level 1
观察三处箭头,发现是向服务器提交了一个name 参数,值为"test",从页面回显看,将name参数的值显示在了页面上,并且显示了name参数值的字符长度
查看其源码
将name 参数重新赋值为 <script>alert('xss')</script>
level 2
查看其url,发现是Get方式传递参数
查看源代码
先使用上一关的恶意语句操作进行弹窗
报错,查看源代码
可以看到<
和>
都被编码实体化了
用到sql注入里的思路将属性的引号和标签先闭合
将keywod的参数值重新赋值为"><script>alert('xss')</script>//
“>去闭合原先的”
//去注释掉原先的”
level 3
先在输入框中输入"test"进行尝试,发现不可以
查看其源代码
与第二关相似,但是还不确定有没有敏感字符过滤,编码等操作
构造弹窗测试一下
发现报错,看源代码
发现同一关一样< >
均被实体化
在服务器端查看level.php的代码
构造代码level3.php?keyword='onfocus=javascript:alert('xss') > //&submit=搜索
发现没有直接弹窗,是因为onfocus事件的特殊性造成的
onfocus 事件在对象获得焦点时发生
onfocus 通常用与<input>,<select>,<a>
点击当前页面的输入框就可以完成弹框了
level 4
这一关还是用的Get 方式请求参数并且该参数值在页面上有两处显示
先使用弹窗代码测试一下
仔细观察,发现输入框中和我们输入的不一样,没有< >
查看网页源代码
在第15行中,将< >
编码转换了
在第16行中,将< >
删除了
使用上一关的代码
点击输入框触发事件进行弹框
查看源代码分析
17:将get方式传递到服务器端的keyword参数的值赋给str变量
18 19 :将变量中的< >
删除
20:对变量进行编码然后显示在页面上
22:将去除< >
的变量值插入到<input>
标签的value属性值中
level 5
查看网页源代码
发现在我们的恶意代码中添加了_
使用之前的代码进行测试
这次没有成功出发弹窗,查看网页源代码
看了源代码后,发现对onfocus这一类的事件字符也进行了防范
构造下方代码
从页面回显可以看到一个xss的链接
点击链接即可触发弹窗的js代码
查看这一关的源码
17:将get方式传递到服务器端的keyword参数的值进行全小写的转换,然后赋值给str变量。
18 19 :通过str_replace()函数来破坏变量值中的敏感字符的语义。
20 :通过htmlspecialchars()函数处理之后显示到网页上,
22:直接将进行敏感字符处理之后的变量值插入到标签的value属性值中。
level 6
先用test测试一下,看源代码
尝试使用恶意代码
再查看源代码
发现其中< > 被编码了
还有在script字符中插入了_破环语义
尝试事件触发的代码
查看源代码
可以看到在value属性值中也插入了_符号防止xss的发生
尝试上一关的代码
尝试大小写混写是否可以绕过
点击链接
level 7
先试一下
看网页源代码
发现其中将< >编码处理了并且将script字符直接删除了,试一下事件触发
看源代码
发现onfocus事件直接把on 字符删除了,javascript中的script字符也被删除了,不需要再尝试新的标签了,试一下大小写是否可以绕过
看源代码
大小写绕过失败,尝试双写关键字
其中将参数值转换成了小写,并将基本的关键字都删除了,但是只执行了一次,所以可以双写绕过
level 8
用test 测试,查看源代码
提交的参数值会插入到<input>
标签的value属性值中,一个会插入到下方的<a>
标签的href属性值中
查看源代码
< > 被编码了
在href属性值中script字符被插入了_字符破坏语义
用来闭合引号的引号也被编码了
onfocus一类的事件也被破坏了
大小写绕过失败
因此此处没有对关键字进行删除,所以就不进行双写测试
对于代码进行编码
对参数值做了小写处理并且对常用的关键字做了过滤处理,还将用来起闭合作用的引号做了字符实体替换
level 9
查看网页源代码
在<a>
标签中的href属性中没有出现该参数值,而显示的字符串,猜测对url地址做了匹配,只有包含正常的url地址才能添加到href属性值中,构造一个有正常url地址的恶意代码
语句中虽然显示在了href
属性值中,但是javascript
字符中被插入了_
,尝试使用大小写绕过试试
失败,尝试上一关的方法对关键字进行编码
17-23:与上一关一致
32 34 :判断如果字符中没有http://
的话就会返回false
接着在href
属性值中就会出现字符串
38 :判断成功后,返回第一次出现的位置
将该字符串插入到href
属性值中
level 10
看网页源码
在源码中有一个隐藏的表单
其中含有t_link t_hiatory t_sort
这样三个隐藏的<input>
标签
先测试一下
看网页源代码
这里有三个<input>
标签的话,也就意味者是三个参数
看那个标签能够被突破
从页面响应来看,有一个<input>
标签的状态可以被改变这个标签就是名
为t_sort
的<input>
标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。
因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。
18 :说明是接收t_sort
参数值的
19 20 :会删除t_sort
参数值中的< >
level 11
查看网页源代码
可以看到像第十关一样有隐藏的表单
不同的是多了一个t_ref
的<input>
标签
尝试上一关的方法
页面没有反应
查看网页源代码
原来t_sort仍然是接受参数值的,但是里面的双引号被编码了
这样浏览器只能正常显示字符但是却无法起到闭合的作用了
进行抓包
可以看到在原始的请求数据包中并没有referer这个请求头,那么我们可以自己给它加上
referer :1111
构造代码
可以看到我们添加的referer头的值出现在了t_ref标签的value属性值中了。
接下来就是从这里突破注入恶意代码了,恶意代码成功插入了value属性值
中,接着将这个请求的响应放行到浏览器试试
成功弹窗了,说明通过referer头来提交恶意代码触发了xss
level 12
抓包尝试
两个值一摸一样
尝试闭合前面的value属性,然后构造恶意代码
level 13
与前几关很相似
出现了新的标签
猜测应该与http请求头有关,抓包测试一下
可以看到抓取的数据包中cookie头是有值的,而且这个值在响应的网页
level 14
直接进入第15关
level 15
看网页源代码
level 16
可以看到我们提交的参数值在页面中有一处显示位
看网页源代码
level 17
level 18
同上一关一样