网站首页 > 知识剖析 正文
导语:Web 应用程序安全研究员 Aleksandr Zhurnakov 详细揭示了 PHP 中新发现的 XML 外部实体(XXE)注入漏洞。
Web 应用程序安全研究员 Aleksandr Zhurnakov 详细揭示了 PHP 中新发现的 XML 外部实体(XXE)注入漏洞。该漏洞展示了攻击者如何绕过多种安全机制,进而访问敏感配置文件和私钥,凸显了即便在看似安全的实现中,不当的 XML 解析配置也存在巨大风险。
此漏洞利用了 PHP 的 libxml 扩展及其包装器的组合,使攻击者能够绕过诸如 LIBXML_NONET、LIBXML_DTDLOAD 等限制标志以及其他标志。这些标志原本的作用是防止加载外部实体或访问外部资源,然而研究显示,攻击者可借助高级有效载荷和技术规避它们。
绕过安全机制
该漏洞源于 PHP 通过 DOMDocument 类处理 XML 解析的方式。默认状态下,外部实体加载处于禁用状态,但像 LIBXML_DTDLOAD 这样的特定标志,却允许攻击者加载恶意 DTD 文件。随后,攻击者可利用 php://filter 等 PHP 包装器制作这些文件,以窃取诸如 /etc/passwd 或私钥等数据。
攻击者绕过安全机制的关键手段之一,是使用诸如 http:// 等替代包装器替换 php://filter/resource=URL,从而有效地绕过 LIBXML_NONET 限制。
此外,通过滥用参数实体(% name;),攻击者能够在应用安全检查之前,将恶意内容注入 XML 结构中。更为复杂的是,研究表明,攻击者可利用类似 zlib.deflate 过滤器的 base64 编码来压缩有效载荷,减小其大小,使其能够符合 GET 参数或查询字符串的常见服务器约束。
根据 PT Swarm 报告,当服务器上的出站 TCP 连接被阻止时,这种方法还能借助 DNS 子域实现渗透。
影响
该漏洞已在特定应用程序中被发现。例如,SimpleSAMLphp(CVE-2024-52596)中的 XXE 漏洞,允许未经身份验证的用户读取配置文件、提取私钥并伪造身份验证断言。
当 SimpleSAMLphp 被配置为身份提供者时,攻击者实际上能够完全绕过身份验证机制。
Zhurnakov 的研究着重强调了 PHP 应用程序中安全 XML 解析实践的重要性。建议开发人员禁用所有不必要的 libxml 标志(如 LIBXML_DTDLOAD、LIBXML_NOENT 等),并确保部署具有增强 XXE 保护的最新 PHP 版本(例如 PHP 8.4 中引入的相关保护机制)。此漏洞清晰地警示我们,看似微不足道的错误配置,也可能引发复杂的攻击途径,凸显了在 Web 应用程序开发中进行严格测试和遵循安全编码实践的必要性。
- 上一篇: 一个有意思的PHP Webshell,利用伪协议执行代码
- 下一篇: PHP内存池分析
猜你喜欢
- 2025-04-29 php开发者composer使用看这一篇就够了
- 2025-04-29 引用和变量声明在不同语言中的实作
- 2025-04-29 PHP 没你想的那么差
- 2025-04-29 Ubuntu linux 上的 Nginx 和 Php 安装
- 2025-04-29 CentOS下通过yum搭建lnmp(单版本PHP)
- 2025-04-29 为什么 PHP8 是个高性能版本
- 2025-04-29 PHP8函数包含文件-PHP8知识详解
- 2025-04-29 使用无参数函数进行命令执行
- 2025-04-29 PHP内存池分析
- 2025-04-29 一个有意思的PHP Webshell,利用伪协议执行代码
- 04-29php开发者composer使用看这一篇就够了
- 04-29引用和变量声明在不同语言中的实作
- 04-29PHP 没你想的那么差
- 04-29Ubuntu linux 上的 Nginx 和 Php 安装
- 04-29CentOS下通过yum搭建lnmp(单版本PHP)
- 04-29为什么 PHP8 是个高性能版本
- 04-29PHP8函数包含文件-PHP8知识详解
- 04-29使用无参数函数进行命令执行
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)