XSS-Labs 各关卡测试过程
level1
- 打开检查,发现 test 直接放入 h2 标签中
- 此时通过 script 绕过 h2 标签
- 构造 payload:
127.0.0.1/xss-labs/lvel1.php?name=<script>alert(111)</script>
- 直接使用 script 标签绕过 h2,并执行 alert,通过
level2
- 打开检查,输入的 123 被放在 input 标签里面的 value 值
- 输入 script 函数
<input name="keyword" value="<script>alert(111)</soript>">
- 此时并未闭合则加入单引号进行测试
- 构造 payload:
127.0.0.1/xss-labs/lvel1.php?name='><script>alert(111)</script>
- 通过
level3
- 打开检查,参数位置与 2 一样
- 输入 2 的代码
<input name="keyword" value=""> <script>alert(111)</soript>">
- 发现参数均为 value 值,闭合操作失效
<input name="keyword" value'>
- 单引号闭合
- 测试仍然失效
- 其中 <> 被替换,则此时不适用标签,则使用 onfocus 事件进行触发
- 此时依旧失效,即后面仍未闭合成功,则添加空格隔开,再次测试
<input name=“keyword" value onfocus="jarascript:alert(111)”'”>
- 观察代码,此时闭合成功,onfocus 可以正常触发,点击输入框,通过
level4
- 此时与前面关卡的页面相同,则使用 3 的代码进行测试
- 发现代码并未闭合成功,此时将单引号变为双引号再次测试
- 通过
level5
- 首先用 script 与 obfocus 进行测试
- 发现 onfocus 与 script 均被替换,此时考虑使用 a 标签 href 链接的应用,通过跳转到另一个页面绕过网页
- 构造 payload 运行,此时 href 并未被替换
- 点击链接,通过
level6
- 使用前面的代码进行测试
- 发现其中关键字符后面添加了下划线,由此可判断是从字符进行判别,将小写字母改为大写字母进绕过测试(此处以 a 标签为例演示)
- 替换后发现标签生效,即该关卡只是通过小写字母进行判别修改
- 点击链接,通过
level7
- 以 script 进行测试
- 发现所有 script 均被替换成空值,即是通过判别整体的 script 完成替换的操作
- 同时通过测试发现字符被锁定成小写
- 此时考虑 script 嵌套,来绕过 script 的整体替换
- 成功绕过 script 的整体替换,完善代码并运行,通过
level8
- 观察页面,输入框的内容是直接添加在 href 里面,首先先使用第五关运行 href 的内容进行测试
- 运行失败
- 此时查看源代码
- 发现链接的内容是经过一系列的关键字替换以及 htmlspecialchars 函数实体化再放进 href 里面
- 此时使用编码的形式来绕过实体化和替换
- javascript:alert (111) 转义后的字符:
"><a+href="javascript:ale
- 将转义的字符输入框内进行测试
- 运行成功