
一、XML简介
XML是 The Extensible Markup Language (可扩展标识语言)的简写。XML最初设计的目的是弥补 HTML的不足,后来逐渐用于网络数据的转换和描述。XML 的设计宗旨是传输和存储数据,而非显示数据。
目前,各种应用程序之间数据传输最常用的工具是XML和JSON。
xml例子:
<sites> <site> <name>RUNOOB</name> <url>www.runoob.com</url> </site> <site> <name>Google</name> <url>www.google.com</url> </site> <site> <name>Facebook</name> <url>www.facebook.com</url> </site> </sites>
二、实验环境(手动狗头)
假设现在某网站后台存在如下ChangeUserPwd.xml文件:
<?xml version="1.0” encoding="UTF-8"?> <user> <xmler id="1"> <userType>administrator</userType> <name>admin</name> <password>admin</password> </xmler> <xmler id="2"> <userType>administrator</userType> <name>root</name> <password>root</password> </xmler> <xmler id="3"> <userType>advance</userType> <name>xmler</name> <password>123456</password> </xmler> </user>
ChangeUserPwd.xml文件的作用是存储用户的用户名、密码和用户类型。当用户的密码被修改后,ChangeUserPwd.xml文件会同步更新。
三、XML注入
1、何为XML注入?
如果没有对用户的输入进行严格的过滤和转义,那么攻击者就可以把精心构造好的恶意xml语句提交给后台,使得后台XML文件的数据和结构被改写,从而导致XML注入。
注意:XML注入和XXE(XML外部实体注入)是两个不同的概念,也是两种不同类型的漏洞!
2、XML注入演示
现在用户xmler修改密码,并且password字段是用户可控的,那么用户xmler可以构造如下恶意xml语句(要闭合标签):
123</password></xmler><xmler id=”4”><userType>administrator</userType><name>attacker</name><password>666666
把该xml语句当做密码提交后,后台ChangeUserPwd.xml文件变为:
<?xml version="1.0” encoding="UTF-8"?> <user> <xmler id="1"> <userType>administrator</userType> <name>admin</name> <password>admin</password> </xmler> <xmler id="2"> <userType>administrator</userType> <name>root</name> <password>root</password> </xmler> <xmler id="3"> <userType>advance</userType> <name>xmler</name> <password>1123</password> </xmler> <xmler id=”4”> <userType>administrator</userType> <name>attacker</name> <password>666666</password> </xmler> </user>
成功添加一个名为attacker、密码为666666、用户类型为administrator的用户。
3、XML注入条件
由上述演示可知,要完成一次XML注入,需要满足如下两个条件:
(1)闭合标签
(2)获取XML表结构
利用条件还是比较苛刻的,因为获取XML表的结构并非易事。
四、XML注入的危害
攻击者通过随意更改/破坏后台xml文件的结构,可以导致普通用户提权为管理员(上述例子)、破坏业务逻辑(攻击者可以通过破坏xml表结构,使得某些重要功能无法正常使用,从而导致业务无法继续进行下去)、浪费服务器资源(攻击者可以创建大量合法的但又毫无意义的标签,从而导致服务器大量资源被白白浪费)等严重后果。
五、XML注入防护
XML注入的防护还是比较简单的,就是禁止用户输入“<”、“>”、“\”、“’”、“””、“&”等特殊符号,或者对这些特殊符号进行转义。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)