PHP漏洞在白盒审计中的技巧(3)——PHP动态函数执行

💡 原文中文,约9900字,阅读约需24分钟。
📝

内容提要

文章讨论了多种动态函数调用漏洞及其修复方案,包括直接调用、回调函数和类方法动态调用。通过示例代码展示了攻击原理和恶意Payload,并提供了白名单和类型限制等防御措施,强调了代码审计和输入验证的重要性,以防止远程代码执行(RCE)漏洞。

🎯

关键要点

  • 文章讨论了多种动态函数调用漏洞及其修复方案。
  • 直接动态函数调用漏洞允许攻击者通过控制参数执行系统命令。
  • 修复方案包括使用白名单限制允许调用的函数。
  • call_user_func() 回调风险漏洞可导致任意文件删除。
  • 修复方案是限制回调类型为闭包或类方法。
  • 类方法动态调用漏洞可通过参数调用敏感类,导致RCE。
  • 修复方案是升级至安全版本并增加路由过滤。
  • create_function() 代码注入漏洞可实现RCE,建议使用匿名函数替代。
  • array_map() 函数滥用漏洞允许攻击者对数组元素执行命令。
  • 修复方案是校验回调是否为用户定义的安全函数。
  • __call魔术方法滥用漏洞可通过动态执行攻击,需增加方法存在性检查。
  • 动态函数执行漏洞防御矩阵提供了多层级防御方案。
  • 漏洞检测与审计技巧包括静态代码扫描和动态Fuzz测试。
  • CVE-2021-3129漏洞影响Laravel,攻击者可通过Phar反序列化实现RCE。
  • CVE-2018-7600漏洞影响Drupal,攻击者可通过注入恶意参数实现任意代码执行。
  • CVE-2016-10033漏洞影响PHPMailer,攻击者可通过注入参数控制mail()函数执行任意代码。
  • MailPoet插件存在RCE漏洞,攻击者可通过目录遍历和文件包含执行任意PHP代码。
  • 文章强调了代码审计和输入验证的重要性,以防止RCE漏洞。

延伸问答

PHP动态函数调用漏洞有哪些类型?

主要有直接动态函数调用、回调函数、类方法动态调用、create_function()代码注入、array_map()函数滥用和__call魔术方法滥用等。

如何修复直接动态函数调用漏洞?

可以通过使用白名单限制允许调用的函数来修复此漏洞。

call_user_func()回调风险漏洞的攻击原理是什么?

攻击者可以通过传入恶意的callback参数,执行任意文件删除或系统命令。

如何防御类方法动态调用漏洞?

应升级至安全版本并增加路由过滤,以防止敏感类的调用。

create_function()漏洞的替代方案是什么?

建议使用匿名函数替代create_function()以避免代码注入风险。

如何进行动态函数执行漏洞的检测与审计?

可以使用静态代码扫描和动态Fuzz测试等技术进行检测与审计。

➡️

继续阅读