《一起来玩一些BAT的XSS实例》做题笔记(二)

一段时间没有关注公众号的文章了,晚上翻发现威努特前端时间更新了两个xss例子,趁着晚上有时间来看看

0x01:xsstest 11

老样子打开题目
http://px1624.sinaapp.com/test/xsstest11/
查看源码

eval了location.pathname

那么在#后面执行alert当然是无法成功的,当我们在url中输入alert当然会报404

那利用../呢,例如/test/xsstest11/alert(1)/../,诸如这种,使url中存在alert且不会报404,但是由于目录解析问题,会提前解析到/test/xsstest11/目录中,这样我们输入也是无效的

后来看到network里面的数据,发现服务器是nginx,突然想到了之前看到过nginx关于../的问题,如果我们把../换成..%2f呢

可以看到写入到了目录中,但是页面会报错,这样需要满足两个条件即可
1)是js语法正确,从而执行eval
2)目录依然在/test/xsstest11/下

怎么能在url下使这些语法正确呢,首先想到的当然是注释了
我构造payload为:
http://px1624.sinaapp.com/test/alert(1)/..%2f/xsstest11

能够使目录在/test/xsstest11/,且包含了alert

再利用//注释,直接给出构造后的payload
http://px1624.sinaapp.com/test/;alert(1)//..%2f../xsstest11/

把payload放在console中就可以很清晰的看到了

在作者的文章中,给出的payload是:
http://px1624.sinaapp.com//..%2ftest/xsstest11//alert(11);/..%2f../

这里他是用/*注释,同样放在console中

第一段http://px1624.sinaapp.com//..%2ftest/xsstest11
../之后仍然是/test/xsstest11/目录没变,/
/alert(11);/..%2f../后跳转的目录最终也还是/test/xsstest11/目录,再通过/*将错误语法注释,最终执行eval

文章后面发现我使用的这个方法也是一位师傅使用的方法

0x02:xsstest 12

12题中源码比11题只加了一个判断

这样就导致了我们无法在/test/xsstest11/目录前进行构造了

这个if过不了,将第一步的payload构造出来
http://px1624.sinaapp.com/test/xsstest12/alert(12)/..%2f
页面会报错

这里只需要在test后多加一个/即可,使其满足/test/的正则

但是后面仍然会报错,这里继续使用注释,使语法正确

但是页面报了404错误,观察报错的提示在利用../进行一次路径穿越

又发现了新的错误,显示xsstest12未定义,那就定义一下

直接var进行定义,因为空格的原因肯定会报错,到这里竟然被卡了好久。。。,想到用
window[“a”]去定义,也会报错

没忍住去翻了作者的答案,用了/**/(想给自己一巴掌),注入经常用这个东西绕空格,到这里死没想出来

这里由于使用/*又加了几层目录,../跳出即可

http://px1624.sinaapp.com/test//xsstest12/alert(12);var/**/xsstest12=aa;//..%2f..%2f..%2f..%2f

后面评论中某位师傅给了一个解

tql,不过通过这两题还是能了解到不少知识,希望能学有所用

Reference:

https://mp.weixin.qq.com/s/wa1dj-SX0WHhj7aywmq_9g

发表评论

电子邮件地址不会被公开。 必填项已用*标注