输入完<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攻击

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐