disable_functions bypass - dl function
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
重要说明:
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 扩展以执行系统命令。
PHP 版本识别:
攻击者使用脚本(<?php echo 'PHP Version is '.PHP_VERSION; ?>
)确定 PHP 版本。
获取 PHP 源代码:
本地 PHP 设置:
在其系统上提取并安装特定的 PHP 版本。
扩展创建:
ZEND_MODULE_API_NO:
bypass.c
中的 ZEND_MODULE_API_NO
必须与当前 Zend 扩展构建匹配,可以通过以下命令获取:
PHP_FUNCTION 修改:
对于较新的 PHP 版本(5、7、8),可能需要调整 PHP_FUNCTION(bypass_exec)
。提供的代码片段详细说明了此修改。
bypass.c:
实现自定义扩展的核心功能。
php_bypass.h:
头文件,定义扩展属性。
config.m4:
由 phpize
用于配置自定义扩展的构建环境。
编译命令:
使用 phpize
、./configure
和 make
编译扩展。
生成的 bypass.so
位于模块子目录中。
清理:
编译后运行 make clean
和 phpize --clean
。
版本兼容性:
确保攻击者和受害者系统之间的 PHP API 版本匹配。
扩展加载:
利用 dl
函数,通过使用相对路径或脚本自动化该过程来规避限制。
脚本执行:
攻击者将 bypass.so
和一个 PHP 脚本上传到受害者的服务器。
脚本使用 dl_local
函数动态加载 bypass.so
,然后调用 bypass_exec
,并通过 cmd
查询参数传递命令。
攻击者现在可以通过访问:http://www.example.com/script.php?cmd=<command>
执行命令。
此详细步骤概述了创建和部署 PHP 扩展以执行系统命令的过程,利用 dl
函数,理想情况下应禁用以防止此类安全漏洞。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)