XSS传染基础——JavaScript中的opener、iframe
最近研究XSS,根据etherDream大神的博客 延长XSS生命周期 写了一个子页面父页面相互修改的demo。
一、 子页面、父页面相互修改——window.opener、window.open
在父页面修改子页面,是用到了window.open函数:
<script> var target_page=window.open("parent-call.html", ""); target_page.document.write('我被亲爹重写了!'); </script>
在子页面修改父页面的话,用到的是window.opener函数:
<script> if(window.opener){ window.opener.document.write('啦啦啦,我是坏蛋儿子,我把亲爹重写了') } else{ alert('我亲爹是谁?不知道!') } </script>
在调用window.opener.document修改父页面元素的时候,先检查了一下window.opener是否存在。这是因为子页面不一定存在opener,比如说父页面直接跳转到子页面(此时父页面已经不存在了)
二、 iframe子页面和父页面的相互修改——window.frames、window.parent
iframe标签在页面中是个比较神奇的存在,是存在于当前页面中的另一个页面,是两个完全不同的window。
iframe修改父页面,调用了window.parent:
<script type="text/javascript"> window.parent.document.write('我是坏孩子,我修改了亲爹') </script>
父页面修改iframe子页面,调用了window.frames[]:
<script> window.frames['change_by_father'].contentWindow.document.write('来自父页面的修改') //change_by_father为frame的ID </script>
修改子页面的时候,需要注意的一点是iframe的document并不直接属于当前frame,而是属于contentWindow。
三、 XSS传染
我所理解的XSS传染是利用如上的小技巧,把恶意代码注入到用户打开的其他页面中。以小漏洞控制大场面,在钓鱼,XSS扩大攻击中会有比较突出的表现。
本来没准备专门去写demo的,昨天晚上看的很high,不知不觉就把demo写好了- -算是以一种比较逗的语气解释了相关的知识,欢迎交流。
另,补充(如何用JS获取整个HTML页面的内容):
<script> function GetByTagName(code){ return document.getElementsByTagName(code)[0].innerHTML } // 令人震惊的是innerHTML竟然是属性而不是方法 </script>
demo地址:
test22222222222222