返回

在 XML 中拥抱实体注入的魅力

闲谈

在网络应用的广袤世界中,XML 实体注入漏洞可谓一颗耀眼的明星,引诱着安全人员和黑客展开一场猫捉老鼠的游戏。这种漏洞允许攻击者将恶意 XML 实体注入到可信的 XML 文档中,进而获取敏感信息、修改数据,甚至完全控制应用。

注入的艺术

XML 实体注入的本质在于操纵解析器将预定义的实体解析为特定值。举个例子,让我们假设一个应用接受 XML 输入并将其解析为应用程序对象。如果这个输入包含了一个 <!ENTITY foo "malicious code"> 这样的实体声明,那么每次出现 &foo; 实体时,解析器都会将其替换为 "malicious code"。

聪明一点的攻击者可以利用此机制注入各种恶意代码,例如,读取敏感文件或执行系统命令。当然,这需要绕过一些安全措施,比如输入验证和过滤。

测试漏洞的工具

为了验证应用程序是否存在 XML 实体注入漏洞,安全人员可以使用专门的工具,例如 Burp Suite 或 OWASP ZAP。这些工具允许发送经过精心设计的 XML 请求,并在响应中查找可疑行为的迹象。

为了演示漏洞的实际利用方式,我们编写了一个测试脚本,演示如何利用一个简单的 XML 注入来读取服务器上的 passwd 文件。

// xmlget.php
<?php
$xml = simplexml_load_string($_GET['xml']);
echo $xml->passwd;
?>

漏洞测试利用方式1:有回显,直接读取文件

LINUX: 读取passwd文件,需URL编码后执行。

http://example.com/xmlget.php?xml=%3C?xml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3E%3Cpasswd%3E%3C!ENTITY%20passwd%20SYSTEM%20%22cat%20/etc/passwd%22%3E%3Cpasswd%3E%26passwd%3B

windows: 读取文件、执行命令

http://example.com/xmlget.php?xml=%3C?xml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3E%3Cpasswd%3E%3C!ENTITY%20test%20SYSTEM%20%22type%20c:\windows\system32\ipconfig.txt%22%3E%3Cpasswd%3E%26test%3B

修复漏洞的方法

修复 XML 实体注入漏洞至关重要。这可以通过以下步骤来实现:

  • 禁用外部实体引用 (XXE) :大多数 XML 解析器都允许禁用对外部实体的引用,这可以防止攻击者加载恶意实体文件。
  • 验证和过滤输入 :通过输入验证和过滤,可以过滤掉可疑字符并阻止恶意 XML 输入。
  • 使用安全的 XML 解析器 :一些 XML 解析器具有内置的安全机制,可以抵御实体注入攻击。

拥抱魅力,谨慎前行

XML 实体注入漏洞既迷人又危险。通过了解其工作原理和利用方法,安全人员可以更好地检测和防御这种攻击。开发人员同样需要意识到这一漏洞,并采取必要的措施来保护他们的应用程序。

最终,XML 实体注入漏洞就像任何强大的工具,在正确的手中,它可以成为一把造福世界的利器;在错误的手中,它则可能造成毁灭性的后果。因此,让我们谨慎地拥抱这种魅力,始终牢记网络安全的黄金法则。