非持久性XSS(Reflected cross-site scripting),是我們通常所說(shuō)的反射型XSS,也是最常用,使用最廣的一種方式。它通過(guò)給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL,當(dāng)URL地址被打開(kāi)時(shí),特有的惡意代碼參數(shù)被HTML解析、執(zhí)行。它的特點(diǎn)是非持久化,必須用戶(hù)點(diǎn)擊帶有特定參數(shù)的鏈接才能引起。
持久性XSS(Persistent cross-site scripting),指的是惡意腳本代碼被存儲(chǔ)進(jìn)被攻擊的數(shù)據(jù)庫(kù),當(dāng)其他用戶(hù)正常瀏覽網(wǎng)頁(yè)時(shí),站點(diǎn)從數(shù)據(jù)庫(kù)中讀取了非法用戶(hù)存入非法數(shù)據(jù),惡意腳本代碼被執(zhí)行。這種攻擊類(lèi)型通常在留言板等地方出現(xiàn)。
很多人非常鄙視非持久性XSS(反射型XSS),認(rèn)為這種XSS只能依靠欺騙的手段去騙人點(diǎn)擊,才能讓攻擊正常實(shí)施起來(lái)。其實(shí)讓反射型XSS變得持久的方法,已經(jīng)出現(xiàn)過(guò)好多次了。比如利用applet、利用flash的AS腳本、利用IE的Ghost 頁(yè)面,Cross Iframe Trick等等。
反射型XSS的常見(jiàn)利用方法
既然是“需要欺騙用戶(hù)自己去點(diǎn)擊鏈接才能觸發(fā)XSS”,那利用反射型XSS豈不是只有去忽悠用戶(hù)這一種方法?放在幾年前也許是這樣的,現(xiàn)如今,就要上演雞肋變雞翅的好戲了!
·欺騙
不得不說(shuō)這是最簡(jiǎn)單有效的利用方法了,但對(duì)忽悠的能力有嚴(yán)格的要求,不然用戶(hù)不會(huì)那么容易上鉤的。其次,現(xiàn)在的用戶(hù)都有了一定的安全意識(shí),也不是那么好騙了。以上面提到的鏈接為例,由于是NASA網(wǎng)站的跨站,大家完全可以在一些天文愛(ài)好者聚集的群里發(fā)類(lèi)似這樣的消息,如:“美國(guó)航空航天局公布最新UFO照片”然后加上我們的鏈接。由于是NASA的鏈接(現(xiàn)在連小學(xué)生都知道NASA是干什么的),我想應(yīng)該會(huì)有一部分人相信而去點(diǎn)擊從而達(dá)到了我們的目的,這個(gè)反射型的XSS被觸發(fā)。但如果不是這么碰巧呢?請(qǐng)往下看。
·ClickJacking
在去年的OWASP會(huì)議上,ClickJacking這種攻擊方式被提了出來(lái)。簡(jiǎn)單來(lái)說(shuō)ClickJacking大致是這么回事:
1. 表現(xiàn)為點(diǎn)擊某個(gè)鏈接或button時(shí),實(shí)際上是點(diǎn)擊到別的地方去了(劫持鏈接)
2. 不一定需要javascript,所以noscript也擋不住,但是如果有javascript會(huì)讓事情更簡(jiǎn)單
3. 攻擊是基于DHTML的
4. 需要攻擊者一定程度上控制頁(yè)面
所以,我們只要將用戶(hù)的點(diǎn)擊劫持到我們的鏈接上去就行了,而且ClickJacking是可以跨域的哦~
具體應(yīng)用示例大家去google下就有了。
·結(jié)合CSRF技術(shù)
CSRF是偽造客戶(hù)端請(qǐng)求的一種攻擊,CSRF的英文全稱(chēng)是Cross Site Request Forgery,字面上的意思是跨站點(diǎn)偽造請(qǐng)求。這種攻擊方式是國(guó)外的安全人員于2000年提出,國(guó)內(nèi)直到06年初才被關(guān)注。
結(jié)合CSRF技術(shù)來(lái)利用反射型XSS是種不錯(cuò)的方法,利用CSRF可以使得這些不好利用的XSS漏洞變得威力無(wú)窮。具體示例請(qǐng)參考余弦的《基于CSRF的XSS攻擊》(http://huaidan.org/archives/2561.html),這里就不細(xì)說(shuō)了,有機(jī)會(huì)專(zhuān)門(mén)寫(xiě)篇關(guān)于CSRF的paper.
·Cross Iframe Trick
先講講這種攻擊能夠達(dá)成什么效果:
1. 跨域執(zhí)行腳本(IE、Firefox)
2. 把非持久性XSS變成持久性XSS ——>!!!
3. 跨頁(yè)面執(zhí)行腳本
這種攻擊方法比較繞,具體請(qǐng)參考《Cross Iframe Trick》(http://hi.baidu.com/aullik5/blog/item/07d68eb015d72652092302b1.html)
·反轉(zhuǎn)雅典娜——配合Anehta的回旋鏢模塊
什么是Anehta? Anehta是一個(gè)跨站腳本攻擊(XSS)的利用平臺(tái)。功能模塊化,開(kāi)發(fā)者可以單獨(dú)為anehta開(kāi)發(fā)各種各樣的模塊,以滿(mǎn)足獨(dú)特的需求。Anehta中有許多的具有創(chuàng)意的設(shè)計(jì),回旋鏢模塊(Boomerang),就是其中一個(gè)。回旋鏢模塊的作用,是為了跨域獲取本地cookie,只是在站點(diǎn)上有一個(gè)XSS,種類(lèi)不限,不管是反射型XSS,還是持久型XSS,都可以為我們工作。
這時(shí),反射型XSS的余熱就被充分的發(fā)揮了。
淺析Anehta回旋鏢模塊工作原理
既然提到了Anehta的Boomerang模塊,那就簡(jiǎn)單說(shuō)說(shuō)吧。
Boomerang的工作原理:我們知道,瀏覽器被XSS攻擊后,攻擊者可以用js或其他腳本控制瀏覽器的行為。這時(shí)候如果我們強(qiáng)制瀏覽器去訪問(wèn)站點(diǎn)B上一個(gè)存在XSS漏洞的頁(yè)面,就可以繼續(xù)用B站上的XSS_B控制用戶(hù)的瀏覽器行為; 那么把整個(gè)過(guò)程結(jié)合起來(lái),簡(jiǎn)單表示如下:
victim Browser ——>site A,XSS_A —— redirect to ——>Site B,XSS_B —— redirect somewhere ——>……
在IE中,iframe、img等標(biāo)簽都是攔截本地cookie的。需要使用不攔截cookie的比如 window.open等方法,但是window.open會(huì)被IE攔截彈出窗口,所以axis牛在Boomerang中使用了表單提交,構(gòu)造一個(gè)form,向site B提交,然后再?gòu)腟ite B導(dǎo)入一個(gè)XSS B,獲取了cookie后,再通過(guò)表單提交,跳轉(zhuǎn)回原來(lái)的Site A.如果在Site B上,使用XSS_B再將頁(yè)面重新定向回 Site A,那么對(duì)于用戶(hù)來(lái)說(shuō),就是簡(jiǎn)單的閃了一下,非常具有欺騙性,整個(gè)過(guò)程就像用回旋鏢扔出去打了一下B一樣。
但其實(shí)這并沒(méi)有把反射型XSS真正的變成持久型的XSS,只是反射型XSS的一種攻擊方式而已,也沒(méi)有跨域,而是URL重定向轉(zhuǎn)了一圈,跳了一圈又回來(lái)了。但這確實(shí)是讓反射型XSS得到了充分的利用,達(dá)到了我們的目的。axis牛的這種思路非常值得我們學(xué)習(xí)!
小結(jié)
本文只總結(jié)了常見(jiàn)的反射型XSS利用的方法,但都是簡(jiǎn)單的提了下,起到了個(gè)拋磚引玉的作用,讓大家見(jiàn)到反射型XSS時(shí)能想到這些(貌似要都詳細(xì)寫(xiě)出來(lái)就太多了- -:),如有不足之處還請(qǐng)各位見(jiàn)諒。