第一题
打开页面,我们可以看到第一题为easy xss
第一关的注入点是name 我们可以直接插入一个弹窗
name=<script>alert(1)</script>
很容易便通过了
第二题
来到第二题
我们先试试第一题的语句
发现并不能通过,我们可以通过检查看看源码
我们发现input标签没有闭合,那么可以提前闭合input和value标签
"><script>alert(1)</script>
也是成功过关
第三题
来到第三题,尝试闭合后依旧无法过关,查看源码发现 < 和 > 符号被过滤了
这里我们可以使用特殊事件执行
'onclick='alert(1)
由于onclick是点击事件,在报错后点击输入框成功过关
第四题
首先还是尝试第一关的语句,发现 < 和 > 符号被过滤了,那我们再尝试特殊事件执行
不过这次要换成双引号包裹
第五题
依旧先尝试输入看看源码
可以看到过滤了script,经过测试发现on也被过滤了
那么我们可以尝试一下伪协议语句,记得提前闭合标签
"><a href="javascript:alert(1)">test</a>
第六题
测试发现script和on依然被过滤,尝试伪协议语句发现href也被过滤了
那么既然有过滤我们可以尝试一下是否有限制大小写
"><a Href="javascript:alert(1)">test</a>
成功绕过
第七题
老样子,先测试
发现script直接没了,那就好办了,可以通过双写注入绕过过滤
"><scrscriptipt>alert(333)</scrscriptipt>
第八题
测试发现script,on,href全都被过滤了,并且过滤了大小写
不过我们可以发现数据被传到了href协议中,href在执行时会进行unicode编解码,那么我们可以试试将语句unicode编码后执行
javascript:alert(1)
javascript:alert(1)
第九题
查看源码我们发现if(false===strpos($str7,'http://')) http://被注释掉了我们在之前的语句后加一个http://注释掉//http://
javascript:alert(1)//http://
第十题
查看网页源码,发现文本框可能被隐藏了,修改type来看是否可以显示文本框
a&t_history=b&t_sort=c" type="text"
之后我们尝试在此基础上加入事件注入
&t_sort=" type='text' onclick=javascript:alert(12)>//
第十一题
第十一题文本框依旧被隐藏了,尝试之前的方法发现没有效果
检查后发现双引号被转义了,我们查看源代码可以看到HTTP_REFERER,这是用来获取referer字段的,那我们可以通过hackbar修改referer字段来注入
aaa"type="text" onclick="alert(1)
第十二题
依旧先查看源码,发现http_user_agent
那么我们依然可以按照第十一题的思路,在user_agent上进行注入
我这里是构建了一个点击事件
" type="text" onclick="alert(1)
第十三题
我们先看html代码,发现还是有四个地方可以进行传参,不过有个地方会引起我们的注意,那就是
cook,会让我们联想到cookie
那么我们可以尝试一下通过cookie注入
user="type="text" onclick="alert(1)
第十四题
第十四题有些问题,可以直接跳到十五题
第十五题
看一下源码,我们发现令人注意的有一个src
可以尝试一下往src里注入一个弹框,会发现我们输入的东西被注入掉了
先尝试闭合注入发现依旧无法执行
大致查了一下,由于ng-include 指令,我们的script标签不会被执行,由于这里包含了之前的html源文件,同样也会包含之前题目的xss漏洞
所以我们可以引用关卡一的漏洞
src='level1.php?name=<img src=1 onerror=alert(1)>'
第十六题
来到第十六题,我们可以看到传送门的截图
我们看一下源码,发现 script, 空格 和 / 都被编码了
那么正常的语句就无法实现了
那么我们就要构建一个不需要使用到被过滤的字符的语句了
首先考虑到 / 被过滤了,那么我们只能使用不需要闭合的标签<img>
之后我们需要构建语句,由于空格被过滤了,我们只能使用回车替代
<img
src=1
onerror="alert(1)">
但是既然要把语句输入到url中,那必须解决回车的问题
我们可以把回车进行url编码,在加入到语句中去
<img%0Asrc=x%0Aonerror="alert(1)">
成功过关