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漏洞。
➡️

继续阅读