1.16 XPath 注入介绍
XPath 注入,攻击者利用 Web 应用对用户提交的参数过滤不严的漏洞,提交经过构造 的参数,这些参数能够被注入到 XPath 查询语句中,获得权限信息的访问权并在此基础上更 改这些信息。适用于使用 XML 文档存储数据的 Web 应用系统。和 SQL 注入非常相似,区 别在于 SQL 注入是用户的输入被注入到 SQL 语句中,而 XPath 注入是用户的输入注入到 XPath 查询语句中。
先来看一个简单的例子,下图是登录页面:
![f23e2083e5ed452a9775e76fe1f47a55.png](https://i-blog.csdnimg.cn/blog_migrate/aeafbf90e2b3994aa08ed327a7b0be87.png)
输入登录信息:
![c36f306485424e58913a70c21387e082.png](https://i-blog.csdnimg.cn/blog_migrate/2734e30da6081c47c7ca19d62bdbfd4d.png)
结果:
![7ceb0df20d7c455cb979babd6e3dd5a4.png](https://i-blog.csdnimg.cn/blog_migrate/06796d392d65b455c92f97084a01b5b6.png)
这时返回的结果包含了很多敏感的信息,可以判断该应用采用XML 存储用户认证信息。 为便于分析,在服务器端将查询语句输出到用户的浏览器。
在用户名或密码处输入:999'] | * | user[@role='admin ,另一个随便输入。
![dd745157a9b642c084fd13d99d72fb48.png](https://i-blog.csdnimg.cn/blog_migrate/3f8adc2af5a715ea0bd1f6fdff287124.png)
结果:
![18e7ec504842464fa105a8a5f8861be4.png](https://i-blog.csdnimg.cn/blog_migrate/0ca5dc0f519410fbd67b7907a22cd507.png)
上 图 中 画 红 框 处 即 为 XPath 查 询 语 句 , 可 以 看 到 , 刚 才 输 入 的 999'] | * | user[@role='admin 已经成功的注入进去了!
现在来看看服务器端是如何处理的,index.asp 文件内容为:
用于认证的 user.xml 内容为:
从 index.asp 中可以看到,查询语句为:
auth="//users/user[loginID/text()='"+uid+"' and password/text()='"+pwd+"']"
其含义是:选取这样的 user 节点,它的 loginID=用户提交的 uid 且 password=用户提交
的 pwd ;
其中uid 和 pwd 变量未经任何检查和过滤,直接传递到查询语句中,上图中实际执行的 XPath 语 句 为 : //users/user[loginID/text()='999' and password/text()='999'] | * | user[@role='admin'] ,含义变成:选取 loginID=999 且 password=999 的用户 或者 选取 XML 所有节点 或者 选择 role 属性(如果有)为 admin 的用户。该例中逻辑运算的结果是选取 XML 所有节点,从而导致 XPath 注入的发生。
1.17 XPath 注入工具
关于 XPath 注入的扫描与验证 , 目前已经有工具软件支持 , 如 WebCruiser - Web Vulnerability Scanner (Web 安全漏洞扫描工具,可以扫描出网站存在 SQL 注入、跨 站脚本攻击、XPath 注入的页面,并且可以进一步进行 SQL 注入验证、跨站攻击验证、XPath