level1
源码:
图中框示的为注入点,下同
payload
name=<script>alert(1)</script>
注入结果:
原理:
由于第一关没有做任何的过滤所以直接注入就行
level2
源码:
payload:
keyword=a"><script>alert(1)</script>//
原理:
注入点为form表单,首先先用a">将<input>标签闭合,逃逸出引号,然后执行<script>弹窗语句。//用来注释掉其余的部分。
注入结果:
level3
源码:
分析:
由源码可知这里的注入点依然为form表单,但是这里接收输入语句的$str被.htmlspecialchars函数进行了过滤,
如果要绕过过滤就需要先了解.htmlspecialchars函数的作用。
htmlspecialchars — 将特殊字符转换为 HTML 实体,具体转换情况如下图
则如果依然使用<script>弹窗语句进行弹窗的话“<>”将会被转换,html无法识别语句,导致弹窗失败,所以这里我们需要使用一些没有“<>”的弹窗语句。
payload:
keyword='onclick=alert(1)//
原理:
这里的注入点依旧为form表单 ,首先 ' 是用来和input中的单引号相互闭合,逃逸出单引号,之后执行无”<>“的弹窗语句,//用来注释掉其余的部分。
扩展:
如果在过滤时.htmlspecialchars加上ENT_QUOTES选项的话则无法进行xss注入,因为这里的 ' 也被转换,导致引号无法闭合,无法执行注入语句。
注入结果:
evel4
源码:
分析:
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2):
这两句是将输入语句中的”<>“进行了替换,替换为空,从而过滤输入的语句。所以这里我们依旧使用无”<>“的弹窗语句。
payload:
keyword="onclick=alert(1)//
原理:
注入点为from表单,"用来进行引号逃逸,,之后执行无”<>“的弹窗语句,//用来注释掉其余的部分。
执行结果:
level5
源码:
分析:
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
这两句将含有“<script”及“on”的字段进行了替换,替换为“<scr_ipt”及“o_n”,这样就导致了含有<script”及“on”的字段的弹窗语句全部失效,所以我们就要想办法使用不含上述两个字段的弹窗语句。
payload:
keyword="><a href="javascript:alert(1)">aaaa</a>//
原理:
这一关的注入点依旧为form表单,首先"用来逃逸出引号,”>“用来闭合前面的”<“方便弹窗语句的执行。之后执行不含<script”及“on”字段的弹窗语句,//用来注释掉其余的部分。
注入结果:
level6
源码:
分析:
这一关依旧做了如蓝框内所示的过滤,使得含有蓝框内字段的过滤语句全部失效,这样基本上就过滤了大部分的弹窗语句。然而本关却未对字母大小写进行过滤,而html是忽略大小写的,故我们可以通过使用大小写的方法来绕过过滤。
payload:
keyword="><Script>alert(1)</Script>//
#这里的S为大写
原理:
这一关的注入点依旧为form表单,首先"用来逃逸出引号,”>“用来闭合前面的”<“方便弹窗语句的执行。然后通过将Script中的S大写进行过滤的绕过,然后执行<Script>的弹窗语句,//用来注释掉其余的部分。
执行结果:
level7
源码:
分析:
这一关依旧做了如蓝框内所示的过滤,但不同的是这次将想要替换的函数都替换成了空,而且还通过strtolower函数将所有输入的语句中的大写转化为小写(大小写也被过滤),然后在进行过滤,但是在替换时他将所有的函数都替换成了空,这是我们就可以通过双写字母来进行注入。
payload:
keyword="oonnclick="alert(1)"//
原理:
由于on被替换为空,则使用双写oonn经过替换后就会变成on,之后组成函数onclick,然后触发弹窗。
注入结果:
level8
源码:
分析:
本关进行的过滤有
字母大小写过滤
常见的弹窗函数进行了非空替换。
还将需要逃逸的双引号进行了替换。
将之前的注入点使用.htmlspecialchars函数进行了过滤,而且由于双引号的替换导致之前的注入点无法形成引号逃逸,故之前的注入点无法再使用。所以我们需要更改注入点。
更改注入点到添加友情链接的位置即下面语句的'.$str7.'处。
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
由于这里的注入点使用了<a>标签那么我们可以直接通过<a href="javascript:alert(1)">aaaa</a>语句进行弹窗注入,而且本关将大部分弹窗语句的函数都进行了过滤,所以这里我们需要进行编码注入。
payload:
javascript:alert(1)
原理:
这里的javascript是将javascript经过html实体编码产生的,这样即绕过了过滤还能通过html解码与前面的语句合并成完整的弹窗语句。
注入结果:
level9
源码:
分析:
level9是在level8的基础上添加了一段链接的判断语句:
if(false===strpos($str7,'http://'))
用于判断链接地址的合法性(即存在http://协议即为合法),则在level8的payload的基础上加上http://协议即可。
payload:
javascript:alert(1)//http://
原理:
绕过判断语句,做法:在输入语句中加上http://使链接地址合法
注释掉http://防止弹窗语句异常。
注入结果:
level10
源码:
分析:
本关做的过滤 将”<>“替换成空,代表使用的弹窗语句不要带”<>“
本关与之前关的不同点,本关通过form表单的hidden属性将表单在网页上的用户输入框进行了隐藏,隐藏只是在网页页面上不显示输入框,但是虽然隐藏了,还是具有form传值功能。一般用来传值,而不必让用户看到。所以我们需要在网页上寻找注入点。
10.1寻找注入点
将t_link中的hidden属性删除后就可以看到网页上用户的输入框,我们在输入框中随便输入一些值,查看是否能注入到代码中。
测试注入结果:
注入失败
使用同样的方法分别对t_history和t_sort进行注入结果
t_sort的注入成功,其实直接看源码完全明白注入点在哪,不过对于一个陌生的场景寻找漏洞也是注入的一部分。现在我们知道了过滤的东西以及注入点,可以开始进行注入。
payload:
"onkeydown="alert(1)"type="text
原理:
首先 " 用于逃逸出引号限制,使用无“<>”的弹窗语句,用type="text将type="hidden"覆盖掉,使网页上出现输入框,方便于注入。
level11
源码:
分析:
本关做的过滤: 将”<>“替换成空,代表使用的弹窗语句不要带”<>“
本关的注入点:从源码来看注入点有两个,一个为name="t_sort"的语句字段,另一个为name="t_ref"的语句字段,我们分别进行测试注入。
使用level10的方法进行一次测试,发现name="t_sort"的语句字段可以进行注入,只不过是使用了.htmlspecialchars函数进行了过滤而已,而且此函数所做的过滤与蓝框中的语句所做的过滤相似,都只是对”<>“产生的过滤,所以我们只需要使用无”<>“的弹窗语句就能注入成功。
测试注入:
"onkeydown="alert(1)"type="text
注入结果:
弹窗失败
失败分析:
由上图可知弹窗语句确实已经注入到html中,但是html却没有执行,这是为什么呢?
再次查看源码可知
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
注入点的函数形式为:value="'.htmlspecialchars($str00).'",由于.htmlspecialchars($str00).是以"''"
的形式进行标注的,由于 '' 的作用将引号内的字符转换成整型值(该字符的ASCII值),当弹窗语句被.htmlspecialchars($str00).函数以单引号的形式进行调用时,外表看还是一条语句,实际上到双引号层时已经成为一个整体了,无法再被执行。
更改注入点重新注入:
测试注入时name="t_ref"字段弹出了网页的Referer值
可见新的注入点中存放的为网页的Referer值,这里我们可以通过更改网页的Referer值为弹窗语句进行弹窗。
这里需要用到burp suite进行抓包,放包操作。
如图抓到了此关的包并修改其的Referer值改为弹窗语句,然后放包
payload:
Referer: "onkeydown="alert(1)"type="text
注入结果:
成功修改Referer值,弹窗成功
level12
源码:
分析:
过滤方法与level11相同
注入点也基本相同通过测试注入及HTML解码得知第二注入点为user-agent的属性如下图:
继续通过burp suite来更改网页参数,并对user-agent的值增加弹窗语句的修改后放包
payload:
User-Agent:"onkeydown="alert(1)"type="text"
注入结果:
成功增加了user-agent弹窗语句值,弹窗成功
level13
源码:
分析:
本关所做的过滤与level11相同
注入点也基本相同,通过测试注入及HTML解码得知第二注入点的属性如下图:
这里可以看到这里的注入信息为“call me maybe”,现在仅通过html网页信息我们并不知道这里的“call me maybe”是什么属性,不过通过查看发现这段信息与网站的cookie值相同,所以判断这一信息为网站的cookie值如下图:
所以我们的注入思路就是将网址的cookie更改为不含“<>”的弹窗语句
payload:
"onkeydown="alert(1)"type="text
进行cookie的修改
注入结果:
将cookie的值修改为弹窗语句,弹窗成功
分享弹窗语句
<script>alert(1)</script>
<a href="javascript:alert(1)">aaaa</a>
<img src=1 onerror="alert(1)">
<svg onload="alert(1)"> //onerror 当加载文档或图像时发生某个错误
<iframe src="javascript:alert(1)"></iframe>
<iframe onload="alert(1)"></iframe>
无<>的弹窗语句
onclick="alert(1)" //鼠标单击事件
onmouseover="alert(1)" //鼠标悬浮事件
906

被折叠的 条评论
为什么被折叠?



