xss-labs
level1(url中的参数修改)
1.url中的参数值(反射型),被原封不动的显示在页面上
尝试
- 对url中的参数值进行修改过后,屏幕会显示相应的url的值。可以在这测试xss
思路
- 在url中写入测试代码
level2(htmlspecialchars($str)过滤)
2.js的<>过滤
尝试
- 在页面输入测试语句
-
查看网页源代码
由源代码①可知,网页对js的<>进行了过滤。由②可知测试语句被完整的写在value的位置了,并没有被浏览器所执行。

-
参考文件的后台代码
在
标签处使用了过滤函数,所以js代码的<>会被替换掉

思路
代码被写在value中了,考虑使得value中的代码被执行。使用闭合的思想。
方法一
-
可以构造使value闭合,从而使浏览器执行测试代码
"><script>alert(1)</script>//> " 闭合value > 闭合input // 注释后面部分
方法二
-
闭合value,测试鼠标经过输入框
" onmouseover=alert(1)// " 闭合value //
方法三
- 闭合value,测试鼠标点击输入框
" onclick=alert(1)//
level3(htmlspecialchars($str)过滤)
尝试
- 后台对
和input的value都进行了,htmlspecialchars($str)过滤。

思路
-
考虑input自身的一些特殊属性,构造没有<>的攻击语句
比如
onfocus=javascript:alert('1') " onmouseover=alert(1)// " onclick=alert(1)//
level4(htmlspecialchars($str)过滤+<>过滤)
尝试
- 使用测试语句,根据反应查看网页源代码

由网页源代码,①使用了htmlspecialchars($str)过滤。②则是把<>给过滤掉了
思路
-
考虑使用没有<>的代码,参考第三关
-
查看后台代码
可见后台是把<>进行了空替换

level5(关键字替换)
尝试
- 通过script ,不含<>的poc测试,通过网页源代码可以知道,后台对其进行了过滤



思路
- 使用伪协议javascript: ,将javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面
"> <a href=javascript:alert(1)/a>//
- 结果

- 后台代码的替换规则

level6(关键字替换+伪协议过滤)
尝试
- 使用常规语句,input属性,伪协议发现都有过滤


思路
- 尝试大小写绕过
"><Script>alert(1)</script>

-
后台代码
由后台代码可以知道,后台对特定的字符进行转换(并没有把字符串准换为小写来进行过滤),以及htmlspecialchars($str)过滤。

level7(关键字替换为空)
尝试
- 把