Xss挑战之旅-WriteUp(前13关)

Xss挑战之旅-WriteUp(前13关)

作为荒废已久的小菜鸡恰巧这几天比较有时间,想重新整理一下XSS的笔记,于是找到搭建的xss实验靶场,重新练练手。顺手写下自己的一个解题思路,当做笔记总结。WriteUp如有错误或有更好的办法,还请大佬指教!

另附XSS挑战之旅靶场源码下载链接:https://pan.baidu.com/s/1Lw-jGb5TMddPWY8lFAn8yw  提取码:rtrg 

测试字符:<'"{()}>

 

第一关

上测试字符,查看源码。看一下字符过滤情况,发现单引号和双引号被 / 转义,但是<>没有被过滤,直接上构造payload

Xss挑战之旅-WriteUp(前13关)

Xss挑战之旅-WriteUp(前13关)

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

 

第二关

同样查看字符过滤情况

Xss挑战之旅-WriteUp(前13关)

发现在h2标题处的字符应该是经过htmlspecialchars()函数处理,但是input标签可利用,并且字符过滤情况同第一关。只是闭合情况不同

payload:" οnclick=alert(1) "

Xss挑战之旅-WriteUp(前13关)

第三关

字符过滤情况如下

Xss挑战之旅-WriteUp(前13关)

判断此处同样使用htmlspecialchars()函数对数据进行处理,但是htmlspecialchars默认不对单引号进行编码,虽然单引号前有转义符,但同样可以用来闭合value的引号

payload:' οnclick=alert(123) '

Xss挑战之旅-WriteUp(前13关)

第四关

Xss挑战之旅-WriteUp(前13关)

第四关input框形式与第三关差不多,但不同的是过滤规则更不严谨,使用双引号便可闭合value字段

payload:" οnclick=alert(123) " 

第五关

Xss挑战之旅-WriteUp(前13关)

第五关的过滤情况与第四关一样,但是上第四关payload的时候发现,onclick这个关键字被过滤;o_nclick

Xss挑战之旅-WriteUp(前13关)

尝试其他利用方法发现没有对javascript进行过滤,上payload

payload:"><a href=javascript:alert(123)> "

Xss挑战之旅-WriteUp(前13关)

第六关

通过测试第六关在第五关基础上,增加对href、src、script、data进行过滤

尝试大小写关键字进行绕过

payload:" ><ScRiPt>alert(123)</script> "

Xss挑战之旅-WriteUp(前13关)

第七关

第七关在第六关的基础上,将输入的字符都变成小写,并用删除的方式对script进行过滤

Xss挑战之旅-WriteUp(前13关)

Xss挑战之旅-WriteUp(前13关)

可以使用双写script的方式进行绕过

payload:" ><scrscriptipt>alert(123)</scscriptript> "

Xss挑战之旅-WriteUp(前13关)

第八关

第八关的xss语句在一个A的href属性中,可以立马联想到使用javasript:alert().但是经过测试发现此关将script进行转义scr_ipt

,并且启用大写转换小写的函数strtolower()

Xss挑战之旅-WriteUp(前13关)

这里可以使用HTML实体编码的空白符&#x09;进行绕过

payload:javascr&#x09;ipt:alert(123)

第九关

第九关在第八关的过滤基础上,要求输入的字符需要带有http://不然将无法被输出到A标签的href属性中

Xss挑战之旅-WriteUp(前13关)

Xss挑战之旅-WriteUp(前13关)

利用此特性构造payload如下

payload:javascr&#x09;ipt:alert(&#34http://&#34) 

因为此关同样对引号进行转义,所以alert函数中的引号使用编码&#34代替

第十关

第十关在测试字符可用字符后发现,在h2标签中对字符进行一个htmlspecialchars函数过滤。在尝试多次后发现,该关存在三个隐藏的input标签,并对其进行测试

Xss挑战之旅-WriteUp(前13关)

测试语句:http://127.0.0.1/xssgame/level10.php?keyword=1&t_link=2&t_history=3&t_sort=4

Xss挑战之旅-WriteUp(前13关)

并发现此字段对关键字过滤不严谨,直接上payload

payload=http://127.0.0.1/xssgame/level10.php?keyword=1&t_sort=" οnclick=alert(123) "

Xss挑战之旅-WriteUp(前13关)

 

但是此时的input的还是隐藏控件,这时可以直接手动修改该标签的type值,手动触发

Xss挑战之旅-WriteUp(前13关)

第十一关

有了第十关的思路,看一下第十一关的源码,发现出现增加了一个t_ref,并且该标签的value值为第十关的url;由此可以想到这个t_ref值应该是从http头部中的Referer字段获取而来

Xss挑战之旅-WriteUp(前13关)使用burp进行一个抓包利用,具体payload如下

Xss挑战之旅-WriteUp(前13关)

第十二关

第十二关与第十一关一样,只是获取的头部字段不同,通过查看源码发现,此关从User-Agent头部获取内容

Xss挑战之旅-WriteUp(前13关)

Xss挑战之旅-WriteUp(前13关)

第十三关

第十三关同上两关,但获取的头部字段为Cookie中的user值

Xss挑战之旅-WriteUp(前13关)