最近研究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. OC中-数组是如何遍历的?

    #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool ...

  2. java validator的原理与使用

    http://developer.51cto.com/art/201104/253257_1.htm ava EE 6核心特征:Bean Validation特性概述(2) 2011-04-02 14 ...

  3. sysctl

    /proc/sys目录下存放着大多数内核参数,并且可以在系统运行时进行更改,不过重新启动机器就会失效./etc/sysctl.conf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/ ...

  4. Linux基础(一)

    一.安装linux系统可以用的5种方法 1.光盘 2.硬盘 3.NFS 映像 4.FTP 5.HTTP 硬盘安装分两种情况: A.是从Win系统上安装 B.是从别的Linux启动安装 这里介绍大多数人 ...

  5. signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数

    信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...

  6. Win7下简约的Gif查看器 仅1.8M

    win7下面由于版权的原因把,默认打开gif的是ie浏览器,这个多么的不方便呀,我在网上淘到了这个程序,话说是从Xp中提取移植过来的.用起来很不错. 下载地址在: http://pan.baidu.c ...

  7. 【转载】为什么不建议<=3G的情况下使用CMS GC

    之前曾经有讲过在heap size<=3G的情况下完全不要考虑CMS GC,在heap size>3G的情况下也优先选择ParallelOldGC,而不是CMS GC,只有在暂停时间无法接 ...

  8. PHP之基本语法

    人生最幸福的事之一就是,邻居家的wifi密码是123456789,于是回家在pad上也照样可以扯淡.任何语言都有自己的语法,这里只简单说些我觉得应该注意的地方. 首先要明白,PHP是运行于服务器端的脚 ...

  9. Linux - 查看系统的版本信息

    在 Linux 中,有多种方法可以查看系统的版本信息. uname 命令 huey@huey-K42JE:~$ uname -a Linux huey-K42JE 3.5.0-43-generic # ...

  10. Shell中read的选项及用法

    1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a :将内容读入到数值中 echo -n "Input muliple ...