一、XXE漏洞与xml:
1、XXE漏洞的概念与基本原理:
XXE漏洞,全称:"XML External Entity Injection"。
这种漏洞发生在应用程序解析XML输入数据时,如果没有禁止或限制对外部实体的引用和加载,那么攻击者可以上传含有恶意构造的外部实体的XML文件。这些恶意的外部实体可以被设计为访问服务器上的敏感文件、执行系统命令、扫描内网端口等,从而泄露信息或造成服务拒绝。
简而言之,XXE漏洞类似于其他注入类攻击(如SQL注入、XSS),都是利用了外部输入数据未被充分验证和过滤的安全缺陷。要防御XXE漏洞,可以在解析XML文档时禁止使用外部实体,确保所有XML输入都经过适当的验证和清理程序。
2、XML介绍:
XML是一种非常流行的标记语言,在解析外部实体的过程中,XML解析器可以根据URL中指定的方案(协议)来查询各种网络协议和服务(DNS,FTP,HTTP,SMB等)。 外部实体对于在文档中创建动态引用非常有用,这样对引用资源所做的任何更改都会在文档中自动更新。 但是,在处理外部实体时,可以针对应用程序启动许多攻击。 这些攻击包括泄露本地系统文件,这些文件可能包含密码和私人用户数据等敏感数据,或利用各种方案的网络访问功能来操纵内部应用程序。 通过将这些攻击与其他实现缺陷相结合,这些攻击的范围可以扩展到客户端内存损坏,任意代码执行,甚至服务中断,具体取决于这些攻击的上下文。
关于XML的具体语法参考下面一片文章,附上链接:
二、靶场漏洞复现(Pikachu):
1、有回显XXE漏洞复现:
有回显XXE漏洞后端代码示例,如下图:
正是 echo $creds; 将响应结果打印出来,构成了回显,显示在我们的前端页面上。
进入靶场,页面如下:
根据题目得知,输入框为接收xml数据的api,我们首先要判断是否有回显。
首先在输入框中提交以下XML代码:
<?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY xxe "XXE漏洞有回显"> ]> <root>&xxe;</root>
将代码提交后,页面如下:
我们可以看到页面出现了回显,那么我们就可以修改实体xxe的内容,将回显目标改为一些敏感目录,比如win.ini。
修改payload如下:
<?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///C:/windows/win.ini"> ]> <root>&xxe;</root>
代码提交后,页面如下图所示:
可以看到敏感目录中的内容成功在页面上回显,漏洞复现成功。