今天我們來介紹一個(gè)場景,當(dāng)xss遇上csrf的時(shí)候,是否能打出一套漂亮的組合技能盒件。
實(shí)驗(yàn)環(huán)境:
ZvulDirll[請用下面我簡單修改過的版本]
下載地址:鏈接:?http://pan.baidu.com/s/1kUwQ6R9?密碼: 92tc
一、安裝:
0x00:解壓ZVulDrill壓縮包,將其放在www目錄下桶错,也就是你的網(wǎng)站根目錄。
0x01胀蛮、編輯ZVulDrill\sys\config.php中的數(shù)據(jù)庫賬號和密碼
0x02院刁、打開mysql終端,創(chuàng)建zvuldrill數(shù)據(jù)醇滥,使用下面的sql語句黎比。
create database zvuldrill;
0x03鸳玩、然后開始導(dǎo)入sql語句進(jìn)zvuldrill數(shù)據(jù)庫阅虫。
use zvuldrill;
source F:/wamp/www/ZVulDrill/sys/zvuldrill.sql;
0x04、打開瀏覽器不跟,訪問
http://localhost/ZVulDrill/
二颓帝、尋找Xss漏洞
0x00、搜索框的xss
一開始打開這個(gè)web應(yīng)用窝革,我們可以大概看到的功能點(diǎn)购城,比如搜索留言、用戶登錄和注冊虐译、留言瘪板。而一般倆說搜索框容易出現(xiàn)xss或者sql注入的問題。
(1)我們先輸入一些內(nèi)容進(jìn)行搜索漆诽,比如2333333侮攀。如下圖
可以看到锣枝,我們搜索的內(nèi)容顯示在頁面上。我們右鍵查看一下元素兰英,觀察2333333在什么標(biāo)簽之間撇叁。如下圖,2333333并沒有被什么標(biāo)簽包裹住畦贸。
我們將搜索的內(nèi)容變成
test
,點(diǎn)擊回車陨闹。可以看到頁面上多了一個(gè)以h1標(biāo)簽顯示的test字符串薄坏,也就是這里存在xss漏洞趋厉。網(wǎng)站后臺并沒有凈化我們的特殊字符,使得我們輸入的數(shù)據(jù)被當(dāng)做成是標(biāo)簽來解析颤殴。效果如下圖觅廓。這里是一個(gè)存在XSS漏洞的點(diǎn)。
0x01涵但、
注冊一個(gè)賬號后杈绸,登錄之后進(jìn)行測試。
1)像這種留言板矮瘟,一般在留言處比較容易出現(xiàn)xss漏洞瞳脓。我們先試試在留言處輸入一堆異常字符看看是否會被轉(zhuǎn)義。如下圖澈侠,我們輸入2333'"\&#;<>,點(diǎn)擊留言即可劫侧。
然后我們右鍵查看網(wǎng)頁源代碼,搜索"2333",我們看一下我們異常字符被怎樣處理哨啃。
可以看到這里2333是被td標(biāo)簽包裹住烧栋,要是我們想插入我們的javascript代碼,那我們需要先閉合拳球,可是我們的<>都被轉(zhuǎn)義了审姓。這里行不通。
2)我們繼續(xù)看一看這里有的功能祝峻,有個(gè)編輯功能魔吐。點(diǎn)擊進(jìn)去看看。如下圖莱找,這里我們可以修改我們的用戶名酬姆,而用戶名的輸出點(diǎn),當(dāng)前頁面有一個(gè)奥溺,注意右上角的小框辞色,那里是顯示用戶的用戶名。
我們右鍵查看元素浮定,查看一下右上角小框是被什么標(biāo)簽所包裹住淫僻。如下圖诱篷,
這里的用戶名是被a標(biāo)簽包裹住的,我們嘗試一下閉合a標(biāo)簽然后插入一段javascript代碼看看雳灵。
修改用戶名為testalert(1)
我們點(diǎn)擊更新按鈕,查看一下效果闸盔。
可以看到這里悯辙,執(zhí)行了script標(biāo)簽內(nèi)的alert函數(shù)。也就是這里存在一個(gè)注入點(diǎn)迎吵。我們修改一下alert的內(nèi)容躲撰,即可獲取cookie值。
修改用戶名為testalert(document.cookie)
我們正確的獲取到了cookie值击费,但是這里的xss只能叉自己拢蛋,我們怎樣才能讓這里的xss發(fā)揮真實(shí)的作用,盜取他人的cookie信息蔫巩,而不僅是自己的呢谆棱?
三、CSRF漏洞
正如CSRF漏洞是偽造別人發(fā)出某個(gè)請求圆仔,致使別人在不知情的情況下執(zhí)行某個(gè)操作垃瞧,如修改密碼、留言坪郭、添加用戶等等个从。
0x00、如何測試是否存在CSRF漏洞
1)這里需要用到Brupsuite來對網(wǎng)站后臺的防御進(jìn)行一些分析歪沃。第一個(gè)是觀察發(fā)出的請求是否帶有隨機(jī)的Token值嗦锐;第二個(gè)是分析網(wǎng)站后臺是否對Referer進(jìn)行校驗(yàn)。
我們配置好瀏覽器的代理為Brupsuite監(jiān)聽的端口沪曙。點(diǎn)擊更新用戶名奕污,Brupsuite抓取數(shù)據(jù)包。如下圖
可以看到Post的數(shù)據(jù)包中并沒有出現(xiàn)token字眼珊蟀,隨機(jī)數(shù)token一般是網(wǎng)站用來防御CSRF的一個(gè)措施菊值。除了Token,我們還有兩個(gè)要點(diǎn)要分析育灸。第一個(gè)要點(diǎn)腻窒,網(wǎng)站是否校驗(yàn)了請求的Referer,這個(gè)Http header是用來表示請求的來源地址是什么磅崭。如果是CSRF的話儿子,那么Referer的值將會為空。
2)我們在數(shù)據(jù)包的空白處右鍵砸喻,send to repeater柔逼,發(fā)到repeater方便我們修改數(shù)據(jù)之后重放請求蒋譬。這里我們將上面Post數(shù)據(jù)中的Referer那一行刪除掉。
刪除后愉适,點(diǎn)擊Go按鈕犯助。返回內(nèi)容如下圖。
返回的數(shù)據(jù)包將我們重定向到edit.php维咸,我們繼續(xù)點(diǎn)擊follow redirection按鈕剂买,觀察一下返回的頁面內(nèi)容。
我們再下面的搜索框那里輸入demo11癌蓖,可以發(fā)現(xiàn)有兩處匹配到了瞬哼。說明我們這里修改成功,在Http header沒有附帶Referer的情況下租副。
3)接下來我們要對最后一個(gè)要素進(jìn)行驗(yàn)證坐慰,就是Post數(shù)據(jù)中的id參數(shù)。我們要驗(yàn)證id參數(shù)的存在是否影響我們修改用戶名用僧。我們同樣是在Repeater里面结胀,把Post數(shù)據(jù)中的id參數(shù)刪除掉,同時(shí)我們把username也修改成demo22永毅,用來與上一次的修改區(qū)分開把跨。如下圖。
修改完成之后沼死,我們點(diǎn)擊Go按鈕着逐,讓數(shù)據(jù)包發(fā)送。如下圖意蛀,返回的響應(yīng)還是302耸别,將我們重定向edit.php,但是頁面中還有Php的Notice信息县钥,提醒我們id變量不存在秀姐。
我們繼續(xù)點(diǎn)擊follow redirection。然后再右下角的搜索框那里搜索demo22若贮。
可以看到在下圖省有,demo22出現(xiàn)了兩次,說明我們修改成功谴麦。也就是說蠢沿,這里的id參數(shù)并沒有影響我們修改用戶名。通過上面的兩次分析匾效。我們可以確定這里存在著CSRF漏洞舷蟀。下面我們寫一個(gè)簡單的頁面去測試。
4)測試CSRF的Poc
測試CSRF漏洞Poc
var formTag = document.getElementById("Poc");
formTag.submit();
我們復(fù)制上面的內(nèi)容到文本編輯器,然后保存為poc.html野宜。然后在登錄了Zvudrill之后扫步,在同一瀏覽器打開poc.html。
下圖是我的brupsuite抓取到poc發(fā)送到網(wǎng)站的請求匈子,可以發(fā)現(xiàn)并沒有Referer值河胎。
我們把brupsuite的代理功能關(guān)閉。然后查看一下Poc的效果旬牲。
可以看到下圖中的用戶名已經(jīng)被修改成hacker仿粹。
四、綜合利用
1)原茅、經(jīng)過上面的分析,我們知道更新用戶名這里的username并沒有過濾特殊字符可以造成xss堕仔,然后更新用戶名發(fā)送的請求存在CSRF擂橘,可以在用戶點(diǎn)擊的時(shí)候,修改用戶的用戶名摩骨。因而我們可以寫出下面的Poc通贞。
測試CSRF漏洞Poc
alert(document.cookie)" class="form-control" id="inputEmail">
var formTag = document.getElementById("Poc");
我們點(diǎn)擊源代碼為上述代碼的html頁面之后,將會出現(xiàn)這樣的效果恼五。
下面我使用Xss平臺的一個(gè)盜取cookie的鏈接,Xss平臺的注冊地址
Poc如下:
測試CSRF漏洞Poc
http://t.cn/RG3kRlu>" class="form-control" id="inputEmail">
var formTag = document.getElementById("Poc");
formTag.submit();
[1]我在Firefox瀏覽器進(jìn)行登錄睬罗,然后再Firefox瀏覽器打開poc.html轨功。然后在chrome瀏覽器利用cookie進(jìn)行登錄。
在登錄Firefox進(jìn)行登錄容达,如下圖
我們再Firefox中打開poc.html,如下圖
[2]我們登錄xss平臺古涧,找到創(chuàng)建的項(xiàng)目』ㄑ危可以看到已經(jīng)獲取到了受害者的cookie羡滑。
[3]利用盜取的cookie,在chrome瀏覽器直接仿造身份。
step1:訪問Xss平臺中獲取的Referer的url
step2:通過Chrome的EditThisCookie插件算芯,重寫我們的cookie柒昏。
step3:再次訪問Referer對應(yīng)的url,觀察效果也祠。如圖
五昙楚、寫在最后
寫在最后,在攻防中重要的是人思考漏洞诈嘿,對待漏洞的思路堪旧。在有想法的白帽子手中削葱,不同漏洞的組合會起到高危漏洞的效果。我們不能期待每一次都遇到高危漏洞淳梦,我們只能改變我們對待漏洞的看法析砸。