disable_functions bypass - dl function
最后更新于
最后更新于
重要提示:
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 Extension Build匹配,可通过以下命令获取:
PHP_FUNCTION修改:
对于最新的PHP版本(5、7、8),可能需要调整PHP_FUNCTION(bypass_exec)
。提供的代码片段详细说明了此修改。
bypass.c:
实现自定义扩展的核心功能。
php_bypass.h:
头文件,定义扩展属性。
config.m4:
由phpize
用于为自定义扩展配置构建环境。
编译命令:
使用phpize
,./configure
和make
来编译扩展。
编译后的bypass.so
然后位于modules子目录中。
清理:
编译后运行make clean
和phpize --clean
。
版本兼容性:
确保攻击者和受害者系统之间的PHP API版本匹配。
加载扩展:
利用dl
函数,通过使用相对路径或脚本来自动化该过程来规避限制。
脚本执行:
攻击者将bypass.so
和一个PHP脚本上传到受害者的服务器。
该脚本使用dl_local
函数动态加载bypass.so
,然后通过cmd
查询参数传递命令调用bypass_exec
。
攻击者现在可以通过访问以下方式执行命令:http://www.example.com/script.php?cmd=<command>
这个详细的步骤概述了创建和部署PHP扩展以执行系统命令的过程,利用了dl
函数,理想情况下应禁用以防止此类安全漏洞。