XPath注入攻击原理及防御

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XPath注入攻击原理及防御

作者美创科技安全实验室

01什么是XPath

XPath即为XML路径语言,是W3C XSLT标准的主要元素,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。

XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力,可用来在XML文档中对元素和属性进行遍历。

02XPath基础语法

1、查询基本语句

//users/user[name/text()=’abc’and password/text()=’test123’]。

这是一个XPath查询语句,获取name为abc的所有user数据,用户需要提交正确的name和password才能返回结果。如果黑客在name字段中输入:'or1=1并在password中输入:'or1=1就能绕过校验,成功获取所有user数据

//users/user[name/text()=''or1=1and password/text()=''or1=1]

2、节点类型

在XPath中,XML文档被作为节点树对待,XPath中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。文档的根节点即是文档结点;对应属性有属性结点,元素有元素结点。

element(元素)

attribute(属性)

text(文本)

namespace(命名空间)

processing-instruction(处理指令)

comment(注释)

root(根节点)

3、表达式

XPath通过路径表达式(Path Expression)来选取节点,基本规则:

03什么是XPath注入攻击

近年来在现代化电子商务,商场现代化系统中,XML技术被广泛的使用,开始出现针对XML数据信息的XPath注入攻击技术。在XML信息被大量使用,其数据的安全性显得非常重要,但是目前很少有研究人员研究XPath的注入攻击防御技术。

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

04XPath注入攻击特点

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 应用的自动攻击。

05XPath注入的危害

1、在URL及表单中提交恶意XPath代码,可获取到权限限制数据的访问权,并可修改这些数据;

2、可通过此类漏洞查询获取到系统内部完整的XML文档内容。

3、逻辑以及认证被绕过,它不像数据库那样有各种权限,xml没有各种权限的概念,正因为没有权限概念,因此利用xpath构造查询的时候整个数据库都会被用户读取。

4、绕过验证、信息泄露

06XPath注入攻击原理

xpath注入的原理其实和sql注入很像,XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作,但是,注入的对象不是数据库users表了,而是一个存储数据的XML文件。

攻击者可以获取XML数据的组织结构,或者访问在正常情况下不允许访问的数据,如果XML数据被用于用户认证,那么攻击者就可以提升他的权限。因为xpath 不存在访问控制,所以我们不会遇到许多在SQL注入中经常遇到的访问限制。XML 中没有访问控制或者用户认证,如果用户有权限使用XPath查询,并且之间没有防御系统或者查询语句没有被防御系统过滤,那么用户就能够访问整个XML文档。

以一个普通实例来说,//users/user[username/text()=''or‘1’or'1'and password/text()=''],

这个字符串会在逻辑上使查询一直返回true并将一直允许攻击者访问系统。攻击者可以利用XPath在应用程序中动态地操作XML文档。攻击完成登录可以再通过XPath盲入技术获取最高权限账号和其它重要文档信息。延展开来,xpath 的注入还有很多花样,像是通过updataxml()函数实现xpath报错注入,还有xpath 的盲注。

Blog.xml(存储用户名和密码)

Index.php(用于接收传入参数,并进行XML查询)

代码很简单,实现了一个简单的登陆验证功能.其实和SQL注入相似,没有对用户输入的数据做过滤,导致攻击者可以直接注入”XPath表达式”。

07XPath盲注的方法

XPath盲注主要利用XPath的一些字符串操作函数和运算符。

以上一部分的环境为例,$query="/root/users/user[username/text()='".$name."' and password/text()='".$pwd."']";如果我们想遍历出整个XML文档,一般步骤如下:利用count(/*)判断跟下节点:

http://127.0.0.1/xpath/index.php?name=’or count(/*)=1or‘1’=‘2

Result:1

如果有返回结果证明存在一个根节点

利用substring分割根节点的每个字符,猜解第一级节点:

http://127.0.0.1/xpath/index.php?name='or substring(name(/*[position()= 1]),1,1)='r'or'1'='2

http://127.0.0.1/xpath/index.php?name='or substring(name(/*[position()= 1]),2,1)='o'or'1'='2

...

相关文档
最新文档