10.3.1 XML注入
XML是The Extensible Markup Language(可扩展标识语言)的简写。XML最初设计的目的是弥补HTML的不足,后来逐渐用于网络数据的转换和描述。XML的设计宗旨是传输数据,而非显示数据。
目前,XML在Web中的应用已非常广泛。XML是各种应用程序之间数据传输中最常用的工具。
下面是一个最简单的XML例子,描述了管理员的信息(admin.xml)。
<?xml version="1.0" encoding="UTF-8"?>
<manager>
<admin id="1">
<name>admin</name>
<password>admin</password>
</admin>
<admin id="2">
<name>root</name>
<password>root</password>
</admin>
</manager>
XML注入是通过改写XML实现的,与XSS跨站漏洞相似,此漏洞利用成功的关键点就是闭合XML标签。
对上面所述的admin.xml,管理员可以更改自己的密码,如果攻击者恰好能掌控PassWord字段,那么就会产生XML注入,如攻击者输入:
admin</password><admin id="5"><name>hack</name><password>hacker</password></admin>
最终修改后的XML为:
<?xml version="1.0" encoding="UTF-8"?> <manager> <admin id="1"> <name>admin</name> <password>admin</password> </admin> <admin id="5"> <name>hack</name> <password>hacker</password> </admin> <admin id="2"> <name>root</name> <password>root</password> </admin> </manager> |
这样,通过XML注入将增加一个新的管理员。
XML注入时的两大要素为:标签闭合和获取XML表结构。
至今,XML注入还是比较少见的,而且XML注入修复也是比较简单的事情,只需要将预定义字符进行转义即可,预定义字符如表10-1所示。
表10-1 预定义字符
XPath即为XML路径语言(XML Path Language),XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。简单地说,XPath就是选取XML节点的一门语言。
XPath使用路径表达式在XML文档中选取节点,表10-2列出了XPath的基础语法。
表10-2 Xpath的基础语法
而XPath最强大的功能在于逻辑运算,使用XPath将会使程序变得有逻辑性,但如果这一点使用不当,可能将会造成注入漏洞,逻辑运算符如表10-3所示。
表10-3 逻辑运算符及说明
通过XPath注入攻击,攻击者可以攻击XML,XPath与SQL注入的方式类似,比如有AdminUser表,其中包括ID、UserName、PassWord,查询用户时SQL语句可能如下:
Select * from AdminUser where ID =1
当攻击者输入1 or 1=1,则会列出当前表中的所有数据,也就是SQL注射攻击,与XPath注入的原理类似,但此时的AdminUser不是一张表,而是一个XML文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <users> <user id="1"> <username>admin</username> <password>admin888</password> </user> <user id="2"> <username>root</username> <password>root123</password> </user> </users> |
本文选自《Web安全深度剖析》第十章,本站经电子工业出版社和作者的授权。
版权声明:51Testing软件测试网获电子工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。