第一关:
按照图中我们所输入的123和前端代码可以判断出我们的代码插入位置
第一关很简单只需要添加以下代码即可通关
<script>alert(123)</script>
因为代码没有做任何防范可以直接在内容中输入代码令前端执行
第二关:
同上查看代码插入位置
第二关我们是在标签属性值中插入我们的注入命令
可以看到在这里我们只需要做一个闭合符处理即可通关
"><script>alert(123)</script>//
利用 "> 使属性值闭合后面插入我们的注入代码,后使用//注释后面可能影响我们的源代码
第三关:
第三关可以看到它做了一些防范闭合符不起作用了
不起作用是因为它将<>使用htmlspecialchars()函数进行了实体化操作
我们这里可以通过input标签的一些特殊事件来执行js代码'onfocus=javascript:alert(123) > //结果发现并没有直接弹窗,这是因为onfocus事件的特殊性造成的。onfocus是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠 标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发 onfocus事件.因此点击当前页面的输入框就可以完成弹框了。
第四关:
第三关我们输入script标签可以看到有两个回显位置,打开代码可以看到第二个回显位少了点东西
可以看到第一个回显完整的把我们输入的代码显示了出来
第二个回显位却删除了<>
我们拿第三关的代码尝试发现也并没有弹出弹窗
那是因为我们的闭合符发生了改变,利用以下代码可触发弹窗
"onfocus=javascript:alert(123) "
第五关:
因为不懂网页做了什么操作我们还是用<script>alert(123)</script>测试一下
可以看到在第二处显示位可以看到在第一个script字符中插入了一个_符号。
这里猜测在服务器端是对提交的参数值进行了正则匹配,然后在出现的第一个script字符串中插入一个_ 符号导致代码无法成功执行。
这样看来利用之前通过事件触发的代码应该依然可以奏效
"onfocus=javascript:alert(123) "
可以看到这里竟然连onfocus也进行了防范,不过我们的JavaScript并没有被修改,那我们可以构造一个新的标签看看能否奏效
"> <a href=javascript:alert(123) > 123</a>
利用a标签来执行js代码
点击一下123即可通关
第六关:
第六关我们还是用script来测试一下
网页做了实体化防范,当我们用触发事件属性时对o_n进行了防范,当我们使用a标签时进行hr_ef防范,我们目前用过的都被防范住了,但是我们可以尝试一下大小写替换看看能否绕过防范
"> <a hREF="javascript:alert(123)"> 123 </a> //
可以看到我们利用大小写变化成功绕过了
第七关:
第七关我们还是以script起手测试
可以看到在第二个回显位置我们的script直接被一整个删除了
当我使用触发事件代码时on和javascript中的script直接被删除了
既然这样我们可以试试双写来绕过防范
"oonnfocus=javascscriptript:alert(123) "
可以看到当我们使用双写时虽然里面的被删除了但是删除后还是拼接成了我们想要的,从而实现绕过
第八关:
第八个我们测试一下看我们输入的会放到那个标签中
可以看到在input和a标签中能发现我们的aaaa
利用<script>alert(123)</script>可以看到在a标签中script被做了处理
利用触发事件、大小写变化、javascript:alert(123)都不行
那我们可以尝试利用编码来进行绕过,HTML可识别的编码为Unicode编码
javascript:alert(123)
可以看到我们经过Unicode编码后成功绕过了防范