disable_functions bypass - dl function

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

重要提示:

dl 是一个PHP函数,可用于加载PHP扩展。如果该函数未被禁用,可能会被滥用以绕过disable_functions并执行任意命令。 但是,它有一些严格的限制:

  • dl函数必须存在环境中且未被禁用

  • PHP扩展必须使用与服务器相同的主要版本(PHP API版本)进行编译(您可以在phpinfo的输出中查看此信息)

  • PHP扩展必须位于由**extension_dir指令定义的目录**中(您可以在phpinfo的输出中看到)。攻击者很难获得对此目录的写访问权限,因此这个要求可能会阻止您滥用此技术。

如果您符合这些要求,请继续阅读帖子 https://antichat.com/threads/70763/ 以了解如何绕过disable_functions。以下是摘要:

dl函数用于在脚本执行期间动态加载PHP扩展。PHP扩展通常用C/C++编写,增强PHP的功能。攻击者注意到dl函数未被禁用后,决定创建一个自定义PHP扩展来执行系统命令。

攻击者采取的步骤:

  1. 确定PHP版本:

  • 攻击者使用脚本(<?php echo 'PHP Version is '.PHP_VERSION; ?>)确定PHP版本。

  1. 获取PHP源码:

  1. 本地PHP设置:

  • 在其系统上提取和安装特定的PHP版本。

  1. 创建扩展:

编译自定义扩展的注意事项:

  1. ZEND_MODULE_API_NO:

  • bypass.c中的ZEND_MODULE_API_NO必须与当前Zend Extension Build匹配,可通过以下命令获取:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. PHP_FUNCTION修改:

  • 对于最新的PHP版本(5、7、8),可能需要调整PHP_FUNCTION(bypass_exec)。提供的代码片段详细说明了此修改。

自定义扩展文件:

  • bypass.c

  • 实现自定义扩展的核心功能。

  • php_bypass.h

  • 头文件,定义扩展属性。

  • config.m4

  • phpize用于为自定义扩展配置构建环境。

构建扩展:

  1. 编译命令:

  • 使用phpize./configuremake来编译扩展。

  • 编译后的bypass.so然后位于modules子目录中。

  1. 清理:

  • 编译后运行make cleanphpize --clean

上传并在受害主机上执行:

  1. 版本兼容性:

  • 确保攻击者和受害者系统之间的PHP API版本匹配。

  1. 加载扩展:

  • 利用dl函数,通过使用相对路径或脚本来自动化该过程来规避限制。

  1. 脚本执行:

  • 攻击者将bypass.so和一个PHP脚本上传到受害者的服务器。

  • 该脚本使用dl_local函数动态加载bypass.so,然后通过cmd查询参数传递命令调用bypass_exec

命令执行:

  • 攻击者现在可以通过访问以下方式执行命令:http://www.example.com/script.php?cmd=<command>

这个详细的步骤概述了创建和部署PHP扩展以执行系统命令的过程,利用了dl函数,理想情况下应禁用以防止此类安全漏洞。

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于