常见漏洞验证121 条

XPath 注入检查

XML 查询语句拼接用户输入时可能改变查询语义;检查 XML 数据驱动的查询接口(检索、鉴权)与语句构造方式。

XPath 注入的原理

有些系统把数据放在 XML 里并用 XPath 查询,注册、检索与登录校验都可能由 XPath 表达式驱动。如果把用户输入直接拼进表达式,攻击者可以用引号与运算符改变查询语义,例如让条件恒真绕过校验,或改变节点选择范围读到本不该返回的记录。它的形态与 SQL 注入相似,但操作对象是 XML 节点树。

基本信息

常见入口XML 驱动的检索、配置查询、老系统登录校验
触发信号返回结果范围变化、表达式解析错误、响应长度突变
典型元字符单引号、括号、or 与 and、方括号谓词
修复方向使用支持参数绑定的 XPath 接口,不拼接字符串
处理原则只做存在性验证,不提取数据

典型使用场景

  • 老系统接手评估:确认检索与登录是否由 XML 数据驱动
  • 开发自查复核:核验新代码是否改用参数化查询
  • 告警核实:安全设备报出可疑查询时确认是否真实可利用
  • 复测:按原最小样本重放,确认修复后不再改变语义
  • 报告取证:记录参数与现象差异,不落库、不导出数据

验证步骤

验证步骤
1. 找出由 XML 数据支撑的查询功能,确认参数进入表达式
2. 提交含 XPath 元字符的取值,观察结果集范围与条数变化
3. 出现解析错误时记录完整错误信息,判断是否泄露表达式结构
4. 对照正常请求确认差异确实来自表达式语义变化
5. 记录参数、请求与现象差异,不提取数据即停止

现象与判定

现象可能原因判定与处置
结果条数变多条件被改写为恒真存在注入,按高优先级处理
返回解析错误表达式语法被破坏结合错误信息判断,注意信息泄露
请求被拒或超时输入被过滤或查询代价过高换写法复验,避免只凭单次结果下结论
无任何变化参数未进入表达式或已被绑定记录为未发现问题,注明验证方法
修复视角:使用支持参数绑定的 XPath API,或在解析阶段做白名单校验,而不是把输入拼进表达式字符串。
报错页面常直接回显表达式原文:这类信息泄露单独记一条,它本身就能帮助后续利用。

易错点

  • 把 XML 解析错误全部归为注入
  • 在缺少对照的情况下下结论
  • 沿用 SQL 注入的载荷去试探,触发无关的解析报错
  • 验证过程中读取了业务数据,超出验证所需

数据来源与参考

  • OWASP WSTG WSTG-INPV-09
  • CWE-643
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌