翻译来自:掣雷小组
成员信息:
thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt
标记红色的部分为今日更新内容。
6.0、介绍
6.1、寻找文件包含漏洞
6.2、文件包含和文件上传
6.3、手工验证SQL注入
6.4、基于错误的SQL注入
6.5、确认并利用SQL盲注漏洞
6.6、使用SQLMap查找和利用SQL注入
6.7、利用XML外部实体注入
6.8、检测和利用命令注入漏洞
6.7、利用XML外部实体注入
XML主要是一种用来描述文档或数据结构格式的语言;例如,HTML就是XML的一种使用方法。
XML实体就像是XML结构中定义的数据结构,其中一些实体能够从系统中读取文件,甚至执行命令。
在这小节中,我们将利用XML外部实体(XEE)注入漏洞从服务器上读取敏感文件并远程执行一些代码。
环境准备
在此之前,建议你阅读过文件包含或文件上传的那一小节。
实战演练
请参考以下步骤:
1. 浏览器打开:
http://192.168.56.11/mutillidae/index.php?page=xml-validator.php
2. 上面说这是一个XML验证器。让我们试着提交样例测试看看会发生什么。在XML框中,我们输入HelloWorld,然后点击Validate XML。在解析的结果中它应该只显示Hello World:
3. 现在,让我们看看它是否正确地处理了实体标记。输入以下内容:
在这里,我们只定义了一个实体将 Mr Bob设为其值。解析器在显示结果时解释了实体并替换该值:
4. 这就是内部实体的使用。让我们尝试一个外部实体的使用:
在这个结果,我们可以看到注入后返回文件的内容:
使用这种技术,我们可以读取系统中任何对运行web服务器用户可读的文件。
5. 我们还可以使用XEE加载web页面。在文件包含时,我们可以设法向服务器上传了一个webshell。让我们做到它:
在这个页面返回的结果中,包含执行服务器端的代码并返回命令执行后的代码:
原理剖析
XML提供了定义实体的可能性。XML中的实体只是一个名称,它具有与之相关联的值。每次在文档中使用实体时,它都会在处理XML文件时被其值替换。使用不同协议(例如file://来加载系统文件,或者http://来加载url),我们可以在没有适当安全措施的地方实现,入输入验证和XML解析器配置方面,可以提取敏感数据,甚至在服务器上执行命令。
在这小节中,我们使用file://协议使解析器从服务器加载任意文件,然后使用http://协议调用一个web页面,该页面恰好是同一服务器中的一个webshell,并使用它执行系统命令。
更多…
还有一种拒绝服务(DoS)攻击就是通过这个名为“billion laughs”的漏洞进行的。你可以在维基百科上了解更多:
https://en.wikipedia.org/wiki/Billion_laughs
PHP支持的XML实体有一个不同的封装(如file://或http://),如果在服务器中启用,就可以在不上传文件的情况下执行命令。您可以在下面这个网站中找到更多有关的协议的信息:
http://www.php.net/manual/en/wrappers.php
另请参阅
一个关于XXE漏洞经典案列,如何攻破一些主流的大厂商网站的,可以查看:
http://www.ubercomp.com/posts/2014-01-16_facebook_remote_code_execution
或者看这个最近的例子,看看Oracle Peoplesoft这种的利用:
https://www.ambionics.io/blog/oracle-peoplesoft-xxe-to-rce
--------------------------------------------------------------------
领取专属 10元无门槛券
私享最新 技术干货