Iuhrey

一个常年被吊打的Web手 一个唱歌不好指弹垃圾的吉他手

xss挑战赛的Payload(上)

写在前面

日常开头,塔主在之前弄了一个XSS的专题,里面大致介绍了XSS攻击的一些要领以及给了我们一个XSS接收平台。,为了练习呢,有人推荐了这个xss.tv,里面有共计20道题目,所以我打算归纳一下Payload,随便总结一下bypass的思路。

level 1


打开XSS挑战赛的地址,发现第一题很明显是Get型的传参方式。试试最为基础的,也是作为测试的Payload。

1
<script>alert(1)</script>

很容易过关跳转到第二关。

level 2

审查元素

发现输入的字符被嵌入进了value=””,可以考虑闭合构造弹出提示框,然后注释掉后面的内容。

1
"><script>alert(1)</script> //

level 3

测试一下发现在文本框输入是无法回显的,审查元素发现如下。

针对这个为啥输入了一个’,源码就变成这样我还特地问了问前端狗大黄,这可能是浏览器的问题。我特地试试了几个不同的浏览器,发现输入相同,但是网站的源码并不一致,所以为了学好XSS,我就一直用一个特定的浏览器firefox。
接着测试一下’a’b确定输入的内容如何嵌入网站源码。

那就照猫画虎构造Payload

1
'onclick=alert(1)>'

源码就变为了

1
<input onclick="alert(1)>''"

这里由于浏览器解析问题这一段就直接解析成了一个事件,点击一下文本框就弹窗了。
PS:具体原理我也搞不懂是为啥,问了前端狗也无果

level 4

这一题和上一题类似,就是把换成了,试着输入Payload。

发现回显出现了一个问题就是>被吞了,既然这样我们可以试试实体编码&gt来绕过。
点击文本框即可弹窗。

level 5

这题目多了一个难点就是on被强制转化为了o_n,就说明某些事件标签就不可以用了,但是可以换一个思路来构造xss的Payload,既然on不能用了,那我们试试a,href标签,构造

1
"><a href="javascript:alert(1)">clickme<"


发现a标签被解析了,只要点击后面的clickme就能执行javascript伪协议后面的内容。

level 6

这一关相比较第五关就是过滤了href,目前过滤了on,script,href这三个关键词,我们可以尝试使用大小写来进行绕过。

1
"><sCript>alert(1)</sCript><"

level 7

这题目初步测试发现关键词on,script,src,href等关键词都被过滤了,无法回显我们输入的关键词,那么可以试试双写来绕过。

1
"><scrscriptipt>alert(1)</scrscriptipt><"

level 8

这一题过滤了很多东西,大写被自动转义成了小写,一些关键词中间都被强加了_,我们可以推测前端获取了信息返回给后端,后端是经过了一定处理的,所以呢,我们只要避开后端的检测就行了,这里可以使用实体编码来绕过,因为在后端是无法解析实体编码的,只有在前端页面才能进行解析,所以我们可以用实体编码来构造payload。
解决这个问题,再次观察题目发现我们输入的payload会被网页添加到a href标签中,所以我们最后的payload为

1
java&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)

level 9

说实话一开始我毫无头绪,测试了很多发现都无法改变友链的内容,知道看到解析才知道,原来合法链接的意思是要加上http://,这样就好构造了,把后面的http://注释掉就行了,payload如下:

1
java&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)//http://

level 10

点进去发现什么都没给,但查看源码发现

输入框被隐藏了,所以可以直接通过get把参数传过去,不过在测试的时候发现只有t_sort这个参数传过去才能更改源码。
不过测试发现<>这个标签被过滤了,并且我在尝试使用&lt,&gt绕过时发现,不仅左右括号被吞了,连内容也被吞了,不过好在on有用,构造如下:

1
http://daka.whaledu.com/xss/level10.php?t_sort=" type="button" onclick="alert(1)

最终的解析为

写在最后

由于考试周加上一些烦躁的事情要处理,博客没来得及更新,接下来博客会很勤的写。

本站总访问量