XPATH 注入漏洞原理以及修复方法

XPath简介:

XPath 表示 XML 路径语言。它使用非 XML 语法来提供一种灵活地定位(指向)XML 文档的不同部分的方法。它也可以用于检查文档中某个定位节点是否与某个模式(pattern)匹配。

漏洞名称

XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知 识的情况下,通过XPath查询得到一个XML文档的完整内容。XPath 注入攻击利用两种技术,即 XPath 扫描和 XPath 查询布尔化。通过该攻击,攻击者可以控制用来进行 XPath 查询的 XML 数据库。这种攻击可以有 效地
对付使用 XPath 查询(和 XML 数据库) 来执行身份验证、查找或者其它 操作。XPath 注入攻击同 SQL 注入攻击类似, 但和 SQL 注入攻击相比较, XPath 在以下方面具有优势。

(1) 广泛性。XPath 注入攻击利用的是 XPath 语法,由于 XPath是一种标准 语言,因此只要是利用 XPath 语法的 Web 应用程序如果未对输入的XPath 查 询做严格的处理都会存在 XPath 注入漏洞,所以可能在所有的 XPath 实现中都 包含有该弱点,这和 SQL 注入攻击有 很大区别。在 SQL 注入攻击过程中根据数据库支持的 SQL 语言不同,注入攻击的实现可能不同。

(2) 危害性大。XPath语言几乎可以引用 XML 文档的所有部分,而这样的引 用一般没有访问控制限制。但在 SQL 注入攻击中,一个‚用户‛的权限可能被 限制到 某一特定的表、列或者查
询,而 XPath 注入攻击可以保证得到完整的 XML 文档,即完整的数据库。只要 Web服务应用具有基本的安全漏洞,即可构 造针对 XPath 应用的自动攻击。

检测条件

1、 Web业务运行正常

检测方法:

XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作,下面以登录验证中的模块为例,说明XPath注入攻击的实现原理和检测方法,在Web 应用程序的登录验证程序中,一般有用户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。若验证数据存放在XML文件中,其原理是通过查找user表中的用户名 (username)和密码(password)的结果来进行授权访问,例存在user.xml文件如下:

<users>
<user>
<firstname>Ben</firstname>
<lastname>Elmore</lastname>
<loginID>abc</loginID>
<password>test123</password>
</user>
<user>
<firstname>Shlomy</firstname>
<lastname>Gantz</lastname>
<loginID>xyz</loginID>
<password>123test</password>
</user>

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

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


但是,可以采用如下的方法实施注入攻击,绕过身份验证。如果用 户传入一个login 和password,例如loginID = 'xyz' 和password = '123test',则该查询语句将返回true。但如果用户传入类似' or 1=1 or ''=' 的值,那么该查询语句也会得到true 返回值,因为XPath 查询语句最终会变成如下代码:

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

这个字符串会在逻辑上使查询一直返回true 并将一直允许攻击者访问系统。攻击者可以利用XPath 在应用程序中动态地操作XML 文档。攻击完成登录可以再通过XPath盲入技术获取最高权限帐号和其它重要文档信息。

修复方案:

1、 数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的 合法性进行验证。
2、 检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删 除敏感字符或字符串。
3、 对于系统出现的错误信息,以 IE 错误编码信息替换,屏蔽系统本身的出错 信息。
4、 参数化 XPath 查询,将需要构建的 XPath 查询表达式,以变量的形式表 示,变量不是可以执行的脚本。如下代码可以通过创建保存查询的外部文件使查询参数化:

declare variable $loginID as xs:string external; declare
variable $password as xs : string external ;
//users/user[@loginID=$loginID and @password= $password]

5、 通过 MD5、 SSL 等加密算法, 对于数据敏感信息和在数据传输过程中加密, 即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息。

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

it技术分享just_free

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值