tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
重要说明:
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 扩展构建匹配,可以通过以下命令获取:
bash
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
- 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
函数,理想情况下应禁用以防止此类安全漏洞。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。