1.2.41-68 RCE
1.2.41-rce
fastjson在加载到过程中,会在加载类的时候去掉className前面的L
和最后的;
,所以就有了如下的poc:
(autoTypeSupport属性为true才能使用)
1.2.42-rce
由于上一个版本只只过滤了L
和;
,所以又可以通过双写绕过
1.2.43-rce
上一个版本中双写L和; 被绕过,所有又增加了一个是否以LL未开头判断,绕过的方法是在目标类前面添加[
poc:
1.2.45-rce
这次使用了新的Gadget绕过黑名单,但是需要在目标服务器上存在mybatis包,版本大于3.0.1且小于3.4.6 poc:
1.2.47-rce
1.2.33 ≤ Fastjson版本 ≤ 1.2.47
,是否开启setAutoTypeSupport都能成功1.2.25 ≤ Fastjson版本 ≤ 1.2.32
,关闭setAutoTypeSupport能成功fastjson cache为true
因为来fastjson中有一个全局缓存,在类加载的时候,
如果autoType没开启,会先尝试从mapping缓存中获取目标类,如果缓存中有,则直接返回进入之后的反序列化流程。
如果autoType开启,因为typeName为
java.lang.Class
不在黑名单,成功绕过检测被解析为Class类型。
java.lang.Class
在缓存中肯定有,该类对应的deserializer为MiscCodec,反序列化时会取json串中的val值并加载这个val对应的类Class到全局缓存中。
poc:
1.2.62-rce
这次又有人找到了新的Gedget绕过了黑名单。 utxName可控,造成JNDI注入
poc:
1.2.66-rce
又又又找到了新的Gadget绕过黑名单 poc:
1.2.68
在1.2.68之后的版本,在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。
只要设置@type类型,想反序列化指定类对象的时候,就会抛异常。
(待补充)
判断是否使用fastjson
不闭合花括号判断
一般利用报错判断,例如可以不闭合花括号
的方式来进行报错回显,在报错中往往fastjson的字段
区别fastjson和jackson
由于Jackson相对比较严格,它会相纸key与javabean属性对其,只能少不能多key,所以提交{"name":"S", "age":21,"agsbdkjada__ss_d":123}
时,jackson会报错,而Fastjson不会报错。
DOS漏洞
当字符串中包含\x
转移字符时可能会引发OOM(Out Of Memory内存溢出)的问题
使用Dnslog判断
方法一:利用java.net.Inet[4|6]Address地址
{"@type":"java.net.Inet4Address","val":"dnslog"}
{"@type":"java.net.Inet6Address","val":"dnslog"}
方法二:利用java.net.InetSocketAddress
{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}
方法三:利用java.net.URL
{{"@type":"java.net.URL","val":"http://dnslog"}:"x"}
Last updated
Was this helpful?