import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class fastjsonTest {
public String name;
public Integer age;
public static void main(String[] args) {
fastjsonTest ft = new fastjsonTest();
ft.setName("LTLT");
ft.setAge(20);
ft.toStr();
System.out.println("对象转json字符串");
System.out.println(ft);
String jsonstring = JSON.toJSONString(ft);
System.out.println("①:"+jsonstring);
System.out.println("--------------------");
System.out.println("json转对象");
String js = "{\"age\":20,\"name\":\"LTLT\"}";
JSONObject jso = JSON.parseObject(js);
System.out.println(jso.getString("name")+" is my name, and I am "+jso.getInteger("age")+" years old!");
System.out.println("--------------------");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void toStr(){
System.out.println("I am :"+this.getName()+" and I am "+this.getAge()+" years old now!");
}
}
0x01[基础认知]
环境搭建
简单示例
0x02[@type]
除开正常的序列化,反序列化之外,fastjson提供特殊字符段@type,即AutoType这个字段可以指定反序列化任意类,执行构造函数,且会自动调用类中属性的特定的setter,getter方法,但是遵循以下原则
当类为private或者protected的时候,必须要有set和get方法
evalcalc.java
eval.java
deam.json
0x03[TemplatesImpl链]
漏洞复现
漏洞影响
fastjsonTest.java
AttackPoc.java
漏洞分析
CNVD-2017-02833
CNVD-2019-22238
0x04[漏洞探测]
测试是否为Fastjson
修改原始json数据,使之花括号闭合不全,在有原始报错回显的情况下可能会含有"fastjson"相关字样
利用ldap结合dnslog探测是否存在漏洞
区分Fastjson与Jackson
追加key-value