XPath注入——操纵XML数据查询
XPath注入——操纵XML数据查询摘要:XPath是查询XML文档的语言。当Web应用使用用户输入动态构造XPath表达式时,黑客可注入XPath语句,绕过权限、读取任意节点或遍历整个XML文档。本文讲解XPath注入的原理,比较其与SQL注入的异同,并提供参数化查询、输入过滤等防御。关键词:黑客网站攻击;XPath注入;渗透测试;XML安全;数据泄露一、引言XML仍广泛用于配置文件、SOAP服务和旧系统中。XPath注入允许攻击者绕过身份验证,获取原本无权查看的敏感XML数据,如密码、角色信息。这种黑客手段虽然不如SQL注入普遍,但在特定场景下极为致命。二、XPath注入原理2.1 示例场景XML存储用户:xml<users><user><name>admin</name><password>admin123</password><role>admin</role></user><user><name>guest</name><password>guest</password><role>guest</role></user></users>
登录查询代码:php
$query = "/users/user.$username."' and password/text()='".$password."']";
输入用户名 ' or '1'='1 ,密码任意,查询变成:
/users/user,条件永远为真,返回第一个用户(admin)。2.2 与SQL注入的区别
[*]XPath没有注释符,但可以使用|合并节点集。
[*]无法执行命令,但可以读取整个XML文档内容。
[*]可以通过count()、string-length()进行盲注。
三、渗透测试利用
[*]使用 ' or '1'='1 进行认证绕过。
[*]利用 | 联合查询:admin' | //user/name/text() 可能返回所有用户名。
[*]盲注:通过页面响应的长度差异或错误信息逐字符猜解。
四、防御措施
[*]参数化XPath:一些库(如Saxon)支持变量绑定。
[*]输入过滤:删除单引号、双引号、|、[、] 等特殊字符。
[*]使用XQuery:XQuery支持参数化,更安全。
[*]避免动态拼接:对用户输入进行编码,将单引号转义为两个单引号。
五、总结XPath注入危害较大,防御与SQL注入类似,但更简单直接:不要拼接用户输入到XPath表达式,或者严格过滤特殊字符。
页:
[1]