前言
随手记的东西,不够详细
总结
-
对复现了fastjson相关漏洞进行复现及研究
-
fastjson漏洞版本很多,首先是从最开始的1.2.22-1.2.24因@type引发的反序列化漏洞。
-
到 了1.2.25版本意识到危害后把@type改为默认关闭,还添加了黑白名单进行校验开启autotype传入的@type。
-
在1.2.48版本之前中途出的发布的各种版本都是由于之前的漏洞修复很草率而出的,期间还有了1.2.25-1.2.47通杀payload。
- 1.2.25-1.2.32版本:未开启AutoTypeSupport时能成功利用,开启AutoTypeSupport不能利用
- 1.2.33-1.2.47版本:无论是否开启AutoTypeSupport,都能成功利用直到1.2.48后才完全修复之前的绕过问题。
-
fastjson可用探测payload
-
可用于1.2.48之前版本
{"@type":"java.net.InetAddress","val":"dnslog"}
-
1.2.68版本之前
{"@type":"java.net.Inet4Address","val":"dnslog"} {"@type":"java.net.Inet6Address","val":"dnslog"} {{"@type":"java.net.URL","val":"dnslog"}:"aaa"} {"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}
-
参考https://github.com/alibaba/fastjson/issues/3077
-
fastjson一共有三种打法,JdbcRowSetImpl,BCEL,templatesimpl。
1. 常规打法就是用JdbcRowSetImpl,遇到不出网就得用后面两种。 2. bcel为常用姿势,可用的有bcel不止一个。 3. templatesimpl利用很难,条件很难遇到。需要配一个Feature.SupportNonPublicField。
7.bcel可配合内存马payload使用,或者配置一些通用回显