最近研究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地址:

http://pan.baidu.com/s/1sjoeTbR

XSS传染基础——JavaScript中的opener、iframe的更多相关文章

  1. 基础-JavaScript中的事件

    在html中引入外部js方式: <html> <head> <script src="xxx.js"></script> </ ...

  2. (译文)JavaScript基础——JavaScript中的深拷贝

    在JavaScript中如何拷贝一个对象? 通过引用调用 function mutate(obj) { obj.a = true; } const obj = {a: false}; mutate(o ...

  3. JavaScript基础Javascript中的循环(003)

    1.普通循环JavaScript中一般的循环写法是这样的: // sub-optimal loop for (var i = 0; i < myarray.length; i++) { // d ...

  4. Javascript中window.opener的一点小总结

    以前一直认为window.opener只有在window.open方法打开下的窗口才可以访问,没想到即使是a链接打开的页面的照样可以访问.window.opener指向父窗口,也就是来源窗口.可以利用 ...

  5. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  6. javascript中关于日期和时间的基础知识

    × 目录 [1]标准时间 [2]字符串 [3]闰年[4]月日[5]星期[6]时分秒 前面的话 在介绍Date对象之前,首先要先了解关于日期和时间的一些知识.比如,闰年.UTC等等.深入了解这些,有助于 ...

  7. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  8. JavaScript中登录名的正则表达式及解析(0基础)

    简言 在JavaScript中,经常会用到正则表达式来进行模式匹配.例如,登录名验证,密码强度验证,字符串查找或替换等操作.现在就开始吧,零基础写出你的第一个正则表达式! 在做用户注册时,都会用到登录 ...

  9. JavaScript中的基础测试题

                                                                                                    Java ...

随机推荐

  1. Asp.Net 之 汉字转拼音

    1.利用微软提供的拼音库,计算出汉字的拼音的方法,此方法支持多音字符 下载 Visual Studio International Pack类库,该类库扩展了.NET Framework对全球化软件开 ...

  2. java常用的包的简介

    java常用的包: java.lang:包含java语言的核心类,如String.math.system和thread类等,使用这个包下的类无需import导入,系统会自动导入这个包下的所有类.   ...

  3. UNIX V6内核源码剖析——unix v6 全貌

    1. UNIX V6 运行硬件环境——PDP-11/40 PDP-11/40指令和数据都是以16比特为单位.对它而言,一个字的宽度为16比特. PDP-11/40以及周边设备的寄存器被映射到内存最高位 ...

  4. Linux Shell产生16进制随机数

    n为字符长度 openssl rand -hex n

  5. WinForm控件小知识

    1.DataGridView控件显示自定义表 //造个数据表 DataTable dt = new DataTable(); dt.Columns.Add("DEcode", Sy ...

  6. layer弹出层不居中解决方案,layer提示不屏幕居中解决方法,layer弹窗不居中解决方案

    layer弹出层不居中解决方案,layer提示不屏幕居中解决方法,layer弹窗不居中解决方案 >>>>>>>>>>>>> ...

  7. (译文)12个简单(但强大)的JavaScript技巧(二)

    原文链接: 12 Simple (Yet Powerful) JavaScript Tips 其他链接: (译文)12个简单(但强大)的JavaScript技巧(一) 强大的立即调用函数表达式 (什么 ...

  8. PHP之文件的锁定、上传与下载

    小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚 ...

  9. ASP.Net Core 运行在Linux(Ubuntu)

    这段时间一直在研究asp.net core部署到linux,今天终于成功了,这里分享一下我的部署过程. Linux Disibutaion:Ubuntu 14.04 Web Server:nginx. ...

  10. Error:(6, 0) No such property: outputDir for class: org.gradle.api.internal.project.DefaultProject_Decorated

    在学习greenDao过程中build.gradle文件中出现这个错误,找了半天不知道为什么.代码我是在git上下载的Demo,按理说应该是没问题的.到最后发现缺少了一个关键字Def // 这样有问题 ...