CVE-2022-33980 Apache Commons Configuration 远程命令执行漏洞分析

news2025/2/23 17:12:15

漏洞描述

7月6日,Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration
组件的远程代码执行漏洞,漏洞编号:CVE-2022-33980,漏洞威胁等级:高危。恶意攻击者通过该漏洞,可在目标服务器上实现任意代码执行。

相关介绍

Apache Commons
Configuration是一个Java应用程序的配置管理工具,可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。在一些配置文件较多较复杂的情况下,使用该配置工具比较可以简化配置文件的解析和管理,提高开发效率和软件的可维护性。

利用范围

2.4 <= Apache Commons Configuration <=2.7

漏洞分析

前置知识

什么是变量插值?

通常我们用apach的configuration2库来管理配置文件(org.apache.commons:commons-
configuration2),在commons-
configuration2管理的配置文件中,配置变量的值可以引用变量。举个例子:${env:xxhzz}就指代环境变量xxhzz,在commons-
configuration2中这种引用动态变量的方式就叫变量插值。

变量插值解析:在commons-
configuration2中,负责对字符串中的变量进行解析的是org.apache.commons.configuration2.interpol.ConfigurationInterpolator类中的interpolate(Object)方法。

漏洞原理

从漏洞通告中,可以得知Apache Commons
Configuration执行变量插值,允许动态评估和扩展属性。插值的标准格式是“${prefix:name}”,其中“prefix”用于定位执行插值的org.apache.commons.configuration2.interpol.Lookup
实例。

从2.4版到2.7版,默认的Lookup实例集包括可能导致任意代码执行或与远程服务器联系的插值器。如公告中提到“script”
可使用JVM脚本执行引擎(javax.script)执行表达式,若使用了不受信任的配置值,在受影响的版本中使用插值默认值的应用程序就很可能受到远程代码执行的影响。

环境搭建

了解了漏洞原理后,为更好理解漏洞的形成,需构建一个调试的demo环境。

通过maven直接引入Apache Commons Configuration2.7。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.7</version>
</dependency>

接着构建一个触发漏洞的主类即可

动态调式

在对插值变量进行解析的地方打下断点。

org.apache.commons.configuration2.interpol.ConfigurationInterpolator#interpolate

开启debug模式,在经过了前两个if判断之后,随后会进入resolveSingleVariable函数。

在org.apache.commons.configuration2.interpol.ConfigurationInterpolator#resolveSingleVariable中首先跟一下extractVariableName函数。

org.apache.commons.configuration2.interpol.ConfigurationInterpolator#extractVariableName的作用是提取变量字符串strValue。

随后进入org.apache.commons.configuration2.interpol.ConfigurationInterpolator#resolve函数中

通过index0f查找和判断条件,从变量字符串中分别获取到prefix和name。

继续跟进会进入lookup函数。

在分析lookup函数前先跟进下fetchLookupForPrefix函数。

fetchLookupForPrefix函数的作用是获取到stringLookup对象。

继续跟进,会进入commons-
text-1.8.jar包中的org.apache.commons.text.lookup.ScriptStringLookup#lookup函数。

在org.apache.commons.text.lookup.ScriptStringLookup#lookup函数中会再次对字符串进行分割,分别提取engineName和script。

接着会通过getEngineByName函数获取ScriptEngine(javax.script)。

继续往下,出现eval函数。

而我们知道eval函数可计算某个字符串,并执行其中的的JavaScript 代码。


继续往下将成功触发我们传入的payload,造成远程命令执行。

漏洞复现


成功命令执行。

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 其他数仓/BI架构解析

文章目录1. 独立数据集市架构2. 辐射状企业信息工厂Inmon架构范式建模维度建模3. 混合辐射状架构与Kimball架构目前&#xff0c;经过长时间的演进&#xff0c;各种数仓架构之间的区别变得越来越小&#xff0c;且不论哪种数仓架构&#xff0c;都会涉及维度建模。下面是几种常见的…

《项目管理精华》读书笔记

《项目管理精华》读后感 《项目管理精华》书中用实例讲解了项目管理的基本流程及一些项目管理技巧&#xff0c;通俗易懂且让人有读下去的欲望。本书按照项目管理的五大过程组的顺序逻辑加上一些作者认为项目管理中比较有价值的内容来介绍的&#xff0c;十大知识领域穿插在这些…

nodejs+vue+elementui在线水果商城购物网站vscode项目

摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 系统开发环境 5 2.1 Vue技术介绍 5 端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 系统分为不同的层次&#xff1a;视图层&#…

哪个室内导航地图好用?画地图用什么软件好?

在互联网服务中&#xff0c;所有互联网巨头均斥巨资布局C端的地图服务&#xff0c;喜闻乐见的地图形式极大地方便了人们在日常生活中的查询位置、了解环境、导航等应用需求&#xff0c;因此取得了巨大的成功。但目前这些地图服务数据的颗粒度基本仅到城市级&#xff1b;园区、景…

CVE-2022-32532 认证绕过漏洞分析

前言 结合自身经历&#xff0c;在使用正则表达式去匹配流量特征时&#xff0c;由于正则表达式中元字符“.”不匹配换行符&#xff08;\n、\r&#xff09;导致一直提取不上所需的流量。而如今&#xff0c;之前踩过的坑却出现在了Apache Shiro框架之中… 漏洞描述 6月29日&…

《MySQL实战45讲》——学习笔记24 “Master/Slave主备同步机制“

binlog可以用来归档&#xff0c;也可以用来做主备同步&#xff0c;binlog在MySQL的各种高可用方案上扮演了重要角色&#xff1b;本篇主要介绍MySQL主备&#xff08;M-S结构&#xff09;的基本原理、不同格式binlog的优缺点和设计者的思考、MySQL双主结构和循环复制问题&#xf…

关于 Linux 系统

个人主页:ζ小菜鸡 大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Linux系统。 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 目录 一、Linux系统的组成 二、Linux 命令行的操作 三、Linux 目录结构 四、文件基本操作 五、用户及文件权限管…

jspssm小型药店药品管理系统

目 录 第一章 概述 1 1.1 研究背景 1 1.2开发意义 1 1.3 研究现状 1 1.4 研究内容 2 1.5论文结构 2 第二章 开发技术介绍 3 2.1 系统开发平台 3 2.2 平台开发相关技术 3 2.2.1 JSP技术介绍 3 2.2.2 Mysql数据库介绍 3 2.2.3 B/S架构 …

excel排名技巧:万能透视表加筛选找出销售冠军

在一组数据中统计单项排名第一的人员名单&#xff0c;如果用函数&#xff0c;我们需要考虑不同项目业绩相等的查找问题&#xff0c;需要考虑同项目业绩相等的查找问题。但如果用数据透视表加筛选&#xff0c;一切就很简单了。最后要么逐条地复制粘贴&#xff0c;要么用技巧合并…

ChatGPT 逆天测试,结局出乎预料

目录一、数学解题能力二、编程能力三、日常生活咨询四、问一些离谱的问题&#xff0c;它有啥反应&#xff1f;五、逆天大测试一、数学解题能力 据说 ChatGPT 会做数学题&#xff0c;给他几个条件不充分的问题&#xff0c;看看他是否真的会思考。 这家伙心理素质真好&#xff…

Uniswap 解析:恒定乘积做市商模型Constant Product Market Maker Model 的Vyper 实作

大纲 一. 前言 二. 恒定乘积做市商模型Constant Product Market Maker Model 1. 计入手续费 2. 程式码结构 3. 演算法核心与实作 4. 段落小结 三. 流动性Liquidity 1. 第一笔流动性注入、决定k值 2. 除了第一笔以外的情况 四. 结语 一. 前言 暨上一篇开始接触了Vyper 后&…

《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下

1.前言 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识。其实这部分也没有什么&#xff0c;主要是给小伙伴或者童鞋们讲一些实际工作中的场景&#xff0c;然后隆重推出我们的猪脚&#xff08;主角&#xff09;-Fiddler。 1.1工作场景 做app测试&#xff0c;你是…

SpringMVC的工作原理

SpringMVC的工作原理图&#xff1a; SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及处…

二叉树29:二叉搜索树中的插入操作

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;701.二叉搜索树中的插入操作 题目&#xff1a; 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入…

苏嵌实训——day19

文章目录一、数据库1.1 在ubuntu中安装数据库1.2 数据库的操作1.2.1 数据库命令的分类1.2.2 常用的系统命令1.2.3 数据中的常用的语句1.3 sqlite数据库中常用api1. sqlite3_open2. int sqlite3_close(sqlite3 * db)3. sqlite3_exec4 sqlite3_get_table5 void sqlite3_free_tabl…

JavaEE12-Spring MVC程序开发

目录 1.什么是Spring MVC? 1.1.MVC定义 1.1.1.Model&#xff08;模型&#xff09; 1.1.2.View&#xff08;视图&#xff09; 1.1.3.Controller&#xff08;控制器&#xff09; 1.2.MVC和Spring MVC的关系 2.为什么要学Spring MVC? 3.怎么学Spring MVC? 3.1.Spring …

LeetCode——2319. 判断矩阵是否是一个 X 矩阵

一、题目 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &#xff0c;表示一个正方形矩阵。如果 grid 是一个 X 矩阵 &#xff0c…

Linux的shell入门和版本控制(五)

0、前言 这部分简单介绍了Linux系统中的shell编程 1、服务监听 在Linux中的服务监听&#xff0c;相当于在windows中的任务管理器。常用指令&#xff1a; 示例一&#xff1a;查询进程 ps -aux|grep 要查询的程序名&#xff1a;这样查询会连带这条查询指令的进程一起查询出来。…

【深度学习笔记】LSTM的介绍及理解

问题 LSTM是深度学习语音领域必须掌握的一个概念,久仰大名,现在终于要来学习它了,真是世事无常,之前以为永远不会接触到呢,因此每次碰到这个就跳过了。 前言 LSTM (Long short-term memory,长短期记忆) 是一种特殊的RNN,主要是为了解决长序列训练过程中梯度消失与梯度…

Linux中SELinux、Shell简介、touch命令的应用知识总结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…