xsslab-第十关
·
输入完<script>alert(1)</script>看看页面源码

看到三个被隐藏的输入框,应该就在这三个里,都改成text看看


这三个一个个试试

试到第三个有了

但是过滤了<>
用οnmοuseοver=aler(1) type="text"

代码分析
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.
</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
这段代码要干什么?
它的目的是:
-
获取用户传入的两个参数:
-
keyword -
t_sort
-
-
把
keyword显示在页面的提示文本中(用htmlspecialchars(),相对安全); -
把
t_sort的值放入一个 隐藏的 input 表单字段中; -
对
t_sort做了简单的过滤:删除了<和>。
逐行讲解:
ini_set("display_errors", 0);
关闭错误信息显示。
$str = $_GET["keyword"]; $str11 = $_GET["t_sort"];
获取两个参数:搜索关键词和排序字段(可控)。
$str22 = str_replace(">", "", $str11); $str33 = str_replace("<", "", $str22);
对 t_sort 做过滤,移除了 < 和 >,但其他字符保留(如 "、空格、=、事件名、标签等都没处理)。
这一步看似防 XSS,其实非常脆弱。
页面输出:
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>" . '<center> <form id=search> <input name="t_link" value="'.'" type="hidden"> <input name="t_history" value="'.'" type="hidden"> <input name="t_sort" value="'.$str33.'" type="hidden"> </form> </center>';
生成的 HTML 大概长这样(你输入后):
<form id=search> <input name="t_link" value="" type="hidden"> <input name="t_history" value="" type="hidden"> <input name="t_sort" value="这里是你传的t_sort" type="hidden"> </form>
🎯 问题点:value 属性注入
我们重点看这一句:
<input name="t_sort" value="'.$str33.'" type="hidden">
你的输入(t_sort)直接插入了 value="..." 属性中,没有做 htmlspecialchars()!
但只过滤了 < 和 >,没有过滤引号 " 或其他危险字符,所以可以造成xss攻击
更多推荐
所有评论(0)