XPath注入攻击原理及防御
0x01 什么是XPath
XPath 即为 XML 路径语言,是 W3C XSLT 标准的主要元素,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言。
XPath 基于 XML 的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力,可用来在 XML 文档中对元素和属性进行遍历。
0x02 XPath基础语法
1. 查询基本语句
//users/user[name/text()=’abc’ and password/text()=’test123’] 。
这是一个XPath查询语句,获取name为abc的所有user数据,用户需要提交正确的name和password才能返回结果。如果黑客在name字段中输入:’ or 1=1 并在 password 中输入:’ or 1=1 就能绕过校验,成功获取所有user数据
//users/user[name/text()=’‘or 1=1 and password/text()=’'or 1=1]
2. 节点类型
在XPath中,XML文档被作为节点树对待,XPath中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。 文档的根节点即是文档结点;对应属性有属性结点,元素有元素结点。
element (元素)
attribute (属性)
text (文本)
namespace (命名空间)
processing-instruction (处理指令)
comment (注释)
root (根节点)
3. 表达式
XPath通过路径表达式(Path Expression)来选取节点,基本规则:
0x03 什么是XPath注入攻击
近年来在现代化电子商务,商场现代化系统中,XML技术被广泛 的使用,开始出现针对XML数据信息的XPath注入攻击技术。在XML信息被大量使用,其数据的安全性显得非常重要,但是目前很少有研究人员研究XPath的注入攻击防御技术。
XPath注入攻击是指利用XPath解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知识的情况下,通过XPath查询得到一个XML文档的完整内容。
0x04 XPath注入攻击特点
XPath注入攻击利用两种技术,即XPath扫描和 XPath查询布尔化。通过该攻击,攻击者可以控制用来进行XPath查询的XML数据库。这种攻击可以有效地对付使用XPath查询(和XML数据库) 来执行身份验证、查找或者其它操作。XPath注入攻击同SQL注入攻击类似,但和SQL注入攻击相比较,XPath在以下方面具有优势。
(1) 广泛性。XPath注入攻击利用的是XPath语法,由于XP