简介

XPath 是一门在 XML 文档中查找信息的语言。
XPath注入也是注入,也是输入一些恶意的查询等代码字符串,从而对网站进行攻击。
XPath注入攻击是指利用XPath解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知识的情况下,通过XPath查询得到一个XML文档的完整内容。

遇到的常见比较少,感觉几乎没人这样做。。。

XPath语法

  • XPath教程

    攻击举例

    XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作。

下面以登录验证中的模块为例,说明XPath注入攻击的实现原理。
在 Web 应用程序的登录验证程序中,一般有用户名(username)和密码(password) 两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。
若验证数据存放在XML文件中,其原理是通过查找user表中的用户名(username)和密码(password)的结果来进行授权访问,
例存在user.xml文件如下:

  1. <user>
  2. <firstname>Ben</firstname>
  3. <lastname>Elmore</lastname>
  4. <loginID>abc</loginID>
  5. <password>test123</password>
  6. </user>
  7. <user>
  8. <firstname>Shlomy</firstname>
  9. <lastname>Gantz</lastname>
  10. <loginID>xyz</loginID>
  11. <password>123test</password>
  12. </user>

则在XPath中典型的查询语句如下:

  1. //users/user[loginID/text()='xyz'and password/text()='123test']

如果我们输入的用户名和密码,闭合了单引号,然后构造一些用为真的语句,那么就可以造成XPath注入攻击;
实施注入攻击,绕过身份验证,举例代码如下:

  1. 'or 1=1 or ''='

合并一下:

  1. //users/user[loginID/text()=''or 1=1 or ''='' and password/text()='' or 1=1 or ''='']

自动化工具

  1. 参数化
  2. 数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的合法性进行验证
  3. 检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删除敏感字符或字符串
  4. 对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本身的出错信息
  5. 通过MD5、SSL等加密算法,对于数据敏感信息和在数据传输过程中加密,即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息

    参考