X-path注入

本文为英文翻译,仅做笔者学习使用
摘要:
可扩展标记语言(XML)被不同的组织采用,作为web服务和internet应用程序的数据交换格式。XML很容易受到黑客的攻击。XML的常用黑客技术是XPath注入。攻击者可以利用XPath操作数据库。XPath注入攻击甚至可以绕过系统安全,结果可能是灾难性的。在这次交流中,使用一个案例研究来回顾XPath代码盲注入问题。本文讨论了问题的范围以及管理和解决XML部署的一些原则

1、介绍:
XML (W3C推荐标准,2000)是一种用于在分布式和异构系统之间传输数据的数据管理工具。XML是一种基于文本的标记语言,因此可以被任何平台识别。XML充当两个不兼容数据库之间的中间模式。一旦填充到XML中,数据就变得完全透明和可访问性强。在XML数据库中隐藏数据是不可能的(Klien, 2005)。XPath (W3C推荐标准,1999 & W3C工作草案,2003)是一种用于引用XML文档部分的语言。XPath是在XQuery的帮助下查询XML文档的工具(W3C工作草案,2003年),还可以使用它使用XSLT转换XML数据库的可视化和表示(W3C推荐标准,1999年)(Klien, 2005年)。XPath查询是一种用于遍历和访问XML数据库的查询语言。Stuttard (Stuttard 2007)报告说XPath注入攻击是Web环境中最常见的攻击类型。沟通问题“XPath盲注”是一种代码攻击。黑客在XML文档中注入一个代码片段以超越安全横幅。即使文档的Xpath不知道攻击者,盲Xpath也可以工作。它的危险程度是,即使应用程序是为有限的查询编写的,数据库的整个内容也可能被XPath攻击。
2、Xpath 注入
XPath查询用于搜索请求、登录处理、数据检索和其他轻量级数据库任务(Klien, 2005)。在基于XPath的应用程序中发现XPath注入后,攻击者不需要猜测XPath查询,只需进行几次尝试,就可以确定攻击者生成了一个模板查询,可用于XPath盲注。XPath查询的这个代码片段可用于挖掘完整的XML文档(Klein, 2005)。XPath盲注攻击可以通过两种方法成功执行;XPath遍历和XPath查询的非结构化(Klein, 2005)。Klein在2005年讨论了XPath注入攻击的类型及其后果。根据Klein的观点,Xpath攻击有两种类型,Xpath遍历和布尔化。作者提出了针对每种类型的攻击使用不同的示例攻击xpath查询的可能机制。与XPath注入攻击类似的是SQL注入。Blasco在2007年进行了比较研究。Blasco简要介绍了XPath注入技术,并描述了各种可能的攻击可以完全检索给定恶意XPath查询的XML文档的场景。(Blasco, 2007)与传统的关系数据库相比,由于访问权限不可用,这项工作也在XML数据库中引起了安全问题。随后,Groppe在2009年提出了XPath查询的可满足性测试。直到2009年,Mitropoulos才提出了一种检测XPath注入的新方法。Mitropoulos使用特定于位置的标识符来验证可执行XPath查询,方法是在应用程序中引用调用站点。该技术的主要特点是源代码的任何修改都需要新的训练来重新分配标识符,因此既耗时又复杂。检测XPath注入的另一项工作是使用面向方面编程(AOP),其中Web服务被插装以拦截所有执行的XPath命令。该技术将通过学习XPath查询生成一个白名单,其中包含基于Web服务操作的合法工作负载。
生成攻击工作负载后,该技术将能够通过比较两个列表来检测XPath注入(Antunes, 2009)。在所有现有的方法中,Web服务环境中仍然缺乏针对XPath盲注入攻击的安全保护。

3、XPath 攻击
图1:XML文档的间接公开
在这里插入图片描述
图一
实验结果表明,数据从数据库中转储到一个XML文件中。这个XML平面文件是一个简单的基于文本的文件,它可以暴露给两种不同类型的应用程序。名为“Security Check”的内部应用程序可以直接访问数据库。这个内部应用程序的用户是应用程序的受信任用户。内部应用程序受到防火墙的保护。外部应用程序称为“登录”。此应用程序由不受信任的用户操作。
图1中的箭头表示数据的可访问性。一个XPath盲注使攻击者可以访问整个XML数据库。图1演示了内部应用程序以XML平面文件的形式使用来自数据库的一些数据。用户使用外部应用程序查询提取的数据。图1清楚地显示,外部应用程序不能直接查询内部应用程序。此连接由防火墙保护。
继续上面的内容,如果有一个基于XML的应用程序需要身份验证,那么它可能有一个名为users的表,该表具有惟一的登录ID和密码。如果在XML转储中获取关系数据库中的“users”表,则该表将如图2所示。
在这里插入图片描述
图二
从users表中检索用户的SQL查询可以写成:
Query1: SELECT * FROM users WHERE login ID = ’abc’ AND password= ‘cba123’
在这个查询中,用户必须提供登录ID和密码作为输入。如果攻击者在登录ID字段中输入[’ ‘or 1=1],并在密码中输入[’ 'or 1=1],则始终会导致匹配,从而使攻击者获得进入系统的权限.
Query2: SELECT * FROM users WHERE loginID = ‘abc‘ AND password= ‘cba123’
XPath注入的工作方式大致相同。与上述SQL查询匹配的XPath语句是:
Query3: //users/user [loginID/text()=’abc’ and password/text()=’cba123’]
为了绕过认证,攻击者可以编写查询:
Query4: //users/user[LoginID/text()=’’ or 1=1 and password/text()=’’ or 1=1]
在应用程序中可能有一个方法,再次使用XML文档执行身份验证:
Query5: //users/user[loginID/text()=’’ or 1=1 or ‘’=’’ and password/text()=’’ or 1=1 or ‘’=’’]
这将在逻辑上产生一个总是返回true的查询,并且总是允许攻击者获得访问权(Sen, 2007)。

4、提取XML模式
Q4中的XPath查询不仅可以绕过身份验证过程,还可以用来提取关于XML模式的信息。如果黑客偶然正确猜测出子节点的名称,并且攻击者输入以下查询:
Query6: String (//users[LoginID/text()=’abc’ or name(//users/LoginID[1]) =’LoginID’ or ‘a=b’ and password/text()=’’])
通过反复试验,攻击者可以猜测XML文档的其他各种子节点,并通过查看XPath表达式是否能成功地进行身份验证来收集信息。
通过这种方式,一个简单的代码片段可以完整地访问XML文档(Sen, 2007)。这种做法违背了数据库安全的原则,即只有经过合法认证的授权用户才能访问、查看和更新数据(李志勇,2011)。在极端情况下,黑客会修改数据库数据,在某些情况下还会执行数据库管理操作或系统命令(Stuttard 2007)。

5、XML Documents 的管理
XML Documents 可以通过应用以下原则来管理:
如果任何应用程序正在访问XML文档的一部分,那么请记住,整个XML文档是间接地暴露给应用程序及其用户的(Obugi,2006)。
应用程序的XML源文件不包含整个XML数据库。它应该只包含应用程序工作所需的信息。(Obugi, 2006)这是可能的,方法是通过修剪XML文件,在需要知道的基础上提供基于XML的数据

在需要知道的基础上修改XML Document:
在这里插入图片描述
图3显示了修剪XML Document 的过程
在这个场景中,用户仍然使用XML转储,但是没有应用程序直接访问完整的文档。相反,在需要知道的基础上,为每个应用程序访问单独的XML文件子集。这可以通过一个称为“XML trimmer”的自动化过程来完成。这就是通过将应用程序与原始数据库隔离,可以控制未经授权的信息访问.
应用程序的设计方式应该是通过XML管道访问XML数据。应用程序应该只在需要知道的基础上获取数据。(Obugi, 2006) XML管道体系结构(图4)将整个查询划分为更小的部分。管道体系结构保持了XML应用程序中所有数据流的清晰性。这种明确性允许评估潜在的威胁。

在这里插入图片描述

结论:
XML数据库只是简单的文本文件,因此它们是高度透明的。XML文件的透明性是XPath注入攻击的主要原因。本文简要介绍了XPath以及保护以XML数据库为中心的应用程序的有用原则。XPath注入攻击的一种类型是盲目性XPath注入,本文重点讨论盲目性XPath注入。Xpath是Web环境中最常见的攻击类型。XPath注入攻击是由于编码不安全的应用程序造成的。当这些应用程序向数据库发送更新或操作查询时,很容易受到Xpath攻击并启用对关键数据的访问。有许多现有的方法可以克服XPath注入攻击的问题,如强输入验证、参数化XPath查询和使用自定义错误。但是这些方法在防止Web服务中的XPath注入方面并不一致。除了这些预防方法之外,程序员还应该记住XML安全性的管理原则。为了缓解安全问题,应用程序应该在可管理的处理阶段交换小的、受控制的XML数据块。基于XML的应用程序的程序员应该始终应用安全检查。当使用XML查询和XPath访问数据库时,基于XML的应用程序应该始终实现管道体系结构。这减少了盲点,使应用程序更容易维护。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值