xss1-20通关

level 1

xss1-20通关
观察三处箭头,发现是向服务器提交了一个name 参数,值为"test",从页面回显看,将name参数的值显示在了页面上,并且显示了name参数值的字符长度
查看其源码xss1-20通关
将name 参数重新赋值为 <script>alert('xss')</script>xss1-20通关

level 2

xss1-20通关
查看其url,发现是Get方式传递参数
查看源代码xss1-20通关
先使用上一关的恶意语句操作进行弹窗
xss1-20通关
报错,查看源代码
xss1-20通关
可以看到<>都被编码实体化了
用到sql注入里的思路将属性的引号和标签先闭合
将keywod的参数值重新赋值为"><script>alert('xss')</script>//
xss1-20通关
“>去闭合原先的”
//去注释掉原先的”

level 3

先在输入框中输入"test"进行尝试,发现不可以xss1-20通关

查看其源代码
xss1-20通关
与第二关相似,但是还不确定有没有敏感字符过滤,编码等操作
构造弹窗测试一下
xss1-20通关
发现报错,看源代码xss1-20通关
发现同一关一样< >均被实体化
在服务器端查看level.php的代码
xss1-20通关
构造代码level3.php?keyword='onfocus=javascript:alert('xss') > //&submit=搜索
xss1-20通关

发现没有直接弹窗,是因为onfocus事件的特殊性造成的

onfocus 事件在对象获得焦点时发生

onfocus 通常用与<input>,<select>,<a>

点击当前页面的输入框就可以完成弹框了

level 4

这一关还是用的Get 方式请求参数并且该参数值在页面上有两处显示
先使用弹窗代码测试一下
xss1-20通关
仔细观察,发现输入框中和我们输入的不一样,没有< >查看网页源代码
xss1-20通关
在第15行中,将< >编码转换了
在第16行中,将< >删除了
使用上一关的代码
xss1-20通关
点击输入框触发事件进行弹框
xss1-20通关
查看源代码分析
xss1-20通关
17:将get方式传递到服务器端的keyword参数的值赋给str变量
18 19 :将变量中的< >删除
20:对变量进行编码然后显示在页面上
22:将去除< >的变量值插入到<input>标签的value属性值中

level 5

xss1-20通关
查看网页源代码
xss1-20通关
发现在我们的恶意代码中添加了_
使用之前的代码进行测试
xss1-20通关这次没有成功出发弹窗,查看网页源代码
xss1-20通关

看了源代码后,发现对onfocus这一类的事件字符也进行了防范
构造下方代码
xss1-20通关
从页面回显可以看到一个xss的链接
点击链接即可触发弹窗的js代码
xss1-20通关

查看这一关的源码
xss1-20通关
17:将get方式传递到服务器端的keyword参数的值进行全小写的转换,然后赋值给str变量。

18 19 :通过str_replace()函数来破坏变量值中的敏感字符的语义。
20 :通过htmlspecialchars()函数处理之后显示到网页上,

22:直接将进行敏感字符处理之后的变量值插入到标签的value属性值中。

level 6

xss1-20通关
先用test测试一下,看源代码
xss1-20通关
尝试使用恶意代码
xss1-20通关

再查看源代码
xss1-20通关
发现其中< > 被编码了
还有在script字符中插入了_破环语义
尝试事件触发的代码
xss1-20通关
查看源代码
xss1-20通关
可以看到在value属性值中也插入了_符号防止xss的发生
尝试上一关的代码
xss1-20通关
xss1-20通关
尝试大小写混写是否可以绕过
xss1-20通关
点击链接
xss1-20通关

level 7

先试一下xss1-20通关
看网页源代码
xss1-20通关
发现其中将< >编码处理了并且将script字符直接删除了,试一下事件触发
xss1-20通关

看源代码
xss1-20通关
发现onfocus事件直接把on 字符删除了,javascript中的script字符也被删除了,不需要再尝试新的标签了,试一下大小写是否可以绕过
xss1-20通关
看源代码
xss1-20通关
大小写绕过失败,尝试双写关键字
xss1-20通关
xss1-20通关
其中将参数值转换成了小写,并将基本的关键字都删除了,但是只执行了一次,所以可以双写绕过

level 8

用test 测试,查看源代码
xss1-20通关
提交的参数值会插入到<input>标签的value属性值中,一个会插入到下方的<a>标签的href属性值中
xss1-20通关
查看源代码
xss1-20通关
< > 被编码了
在href属性值中script字符被插入了_字符破坏语义
xss1-20通关

xss1-20通关
用来闭合引号的引号也被编码了
onfocus一类的事件也被破坏了
大小写绕过失败
因此此处没有对关键字进行删除,所以就不进行双写测试
对于代码进行编码
xss1-20通关
xss1-20通关
xss1-20通关
对参数值做了小写处理并且对常用的关键字做了过滤处理,还将用来起闭合作用的引号做了字符实体替换

level 9

查看网页源代码
xss1-20通关
<a>标签中的href属性中没有出现该参数值,而显示的字符串,猜测对url地址做了匹配,只有包含正常的url地址才能添加到href属性值中,构造一个有正常url地址的恶意代码
xss1-20通关
语句中虽然显示在了href属性值中,但是javascript字符中被插入了_,尝试使用大小写绕过试试
xss1-20通关
失败,尝试上一关的方法对关键字进行编码
xss1-20通关
xss1-20通关
17-23:与上一关一致
32 34 :判断如果字符中没有http://的话就会返回false
接着在href属性值中就会出现字符串
38 :判断成功后,返回第一次出现的位置
将该字符串插入到href属性值中

level 10

看网页源码
xss1-20通关
在源码中有一个隐藏的表单
其中含有t_link t_hiatory t_sort这样三个隐藏的<input>标签
先测试一下
xss1-20通关
看网页源代码
xss1-20通关
这里有三个<input>标签的话,也就意味者是三个参数
看那个标签能够被突破
xss1-20通关
从页面响应来看,有一个<input>标签的状态可以被改变这个标签就是名

t_sort<input>标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。

因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。
xss1-20通关
xss1-20通关

18 :说明是接收t_sort参数值的
19 20 :会删除t_sort参数值中的< >

level 11

查看网页源代码
xss1-20通关
可以看到像第十关一样有隐藏的表单
不同的是多了一个t_ref<input>标签
尝试上一关的方法
xss1-20通关
页面没有反应
查看网页源代码
xss1-20通关
原来t_sort仍然是接受参数值的,但是里面的双引号被编码了

这样浏览器只能正常显示字符但是却无法起到闭合的作用了
进行抓包
可以看到在原始的请求数据包中并没有referer这个请求头,那么我们可以自己给它加上
xss1-20通关
referer :1111
xss1-20通关
构造代码
可以看到我们添加的referer头的值出现在了t_ref标签的value属性值中了。

接下来就是从这里突破注入恶意代码了,恶意代码成功插入了value属性值

中,接着将这个请求的响应放行到浏览器试试

成功弹窗了,说明通过referer头来提交恶意代码触发了xss

level 12

xss1-20通关

xss1-20通关
抓包尝试
xss1-20通关

两个值一摸一样
尝试闭合前面的value属性,然后构造恶意代码
xss1-20通关

level 13

与前几关很相似
xss1-20通关
xss1-20通关
出现了新的标签
猜测应该与http请求头有关,抓包测试一下
xss1-20通关
可以看到抓取的数据包中cookie头是有值的,而且这个值在响应的网页
xss1-20通关

level 14

直接进入第15关

level 15

xss1-20通关

看网页源代码
xss1-20通关
xss1-20通关

level 16

xss1-20通关
可以看到我们提交的参数值在页面中有一处显示位
看网页源代码
xss1-20通关

xss1-20通关

level 17

xss1-20通关
xss1-20通关

xss1-20通关

level 18

同上一关一样
xss1-20通关

level 19

xss1-20通关

level 20

xss1-20通关

上一篇:【PAT (Basic Level) Practice】——【简单数学】1019 数字黑洞


下一篇:第60篇-获取编译任务