二面相比于一面,比较偏向于技术方向,由于篇幅原因,预计会分 2 到 3 次发出。
话说,今天我选择这个文章模板,可是有原因的~
Fastjson 反序列化漏洞是哪个版本,能说一下它的原理和修复方式吗,修复之后还有其他绕过方式吗?
我们常说的最经典的 FastJson 反序列化漏洞是1.2.22 - 1.2.24 版本的。
FastJson 它本身有一个叫做自省的功能,也叫 AutoType。
它本意是在反序列化的时候指定类型,从而方便后续的开发操作。
使用 AutoType 指定类型后,反序列化时就会通过该类型的 setXXX 方法来写入属性值。
恰好,java 的 jdbc 包里面存在一个 JdbcRowSetImpl 类,这个类有一个 dataSourceName 属性是用来指定 Jdbc 的远程连接地址的,它可以传入 rmi 或者 ldap 之类的服务,而这个 dataSourceName 的 set 方法中,又恰好是通过 setAutoCommit 方法去自动连接的。
所以,当反序列化的类指定 AutoType 为 JdbcRowSetImpl 并且 dataSourceName 属性指定一个 rmi 或者 ldap 的远程恶意类时,最终就会自动调用 setDataSourceName 方法内的 setAutoCommit 来连接 rmi 或者 ladp 从而执行恶意代码。
当然,JdbcRowSetImpl 只是众多利用链的其中一条,还有譬如 TemplatesImpl 也是一个比较常用的利用链,其原理都差不多。
在后来的 FastJson 1.2.25 版本,将 AutoType 的默认值设置为 False,并且加入了黑名单校验的方式来过滤掉一些利用链,也预留了白名单方式,但白名单默认是空的,以此来尝试修复反序列化漏洞。
但是,由于 AutoType 本身就是 FastJson 的特色功能,很多场景实际上是很有必要使用的,所以即使默认值设置为 False,但还是有很多场景会手动修改为 True。
并且1.2.25 是以 startWith 匹配黑名单的方式来过滤利用链的包名的,如 com.sun.rowset.JdbcRowSetImpl,但是忽略了一点,在 JNI 语法中,com.sun.rowset.JdbcRowSetImpl 这种写法反而是个简略写法,JNI 中规范的对象写法应该是用字母 L 开头,分号结尾来包裹,如:Lcom.sun.rowset.JdbcRowSetImpl;
也正是因为如此,所以完整的写法反而绕过了 startWith 匹配黑名单的检测方式。同样的,JNI 中的数组写法 [xxx] 也可以绕过 startWith 匹配黑名单检测,因为无论是 Lxxx 还是 [xxx 都不匹配 startWith(“com.xxx”) 这个条件。
直到 1.2.42 版本中,FastJson 对黑名单进行了优化,使用 substring 截断了第一个 L 字符与最后一个 ; 字符,并且将黑名单改进成了 Hash 匹配,从而来增加代码审计的难度。
但是由于 substring 只是简单的截断了头尾的字符,所以又可以使用双写绕过。
1.2.43 版本中,黑名单再次强化,这次,L 和 ;终于彻底被过滤了。
但是,数组写法的绕过方式依然存在。
1.2.44 版本,[ 符号也被加入了黑名单,数组的写法也被拉黑了。
结果,又被大佬们挖掘出新的利用链,好像是基于 MySQL 的某个版本的 jar 包。
再后来,又被大佬们陆续挖掘出 cache 缓存利用等多种方式。
不过 1.2.44 版本之后我就没有深入研究,就不是很了解了。
CC 利用链从 1 - 6 的区别
CC 1-3 是通过修改和扩展 InvokerTransformer 来执行任意 Java 方法的,区别是 Transformer 的组合方式。比如 CC1 只能使用单个 InvokerTransformer,CC3 可以链式调用 Transformer 来实现更复杂的调用。
CC4 是使用 ChainedTransformer 结合多个 Transformer 来执行 Java 方法的,可以绕过一些基础的检查机制。
CC5 是利用 InstantiateFactory 来实例化对象,同样也可以绕过一些检查。
CC6 是在 CC5 的基础上加入了 LazyMap,来延迟执行恶意代码,直到特定条件才触发
CC 链的源码没有做深入研究,回答的比较片面,后期有空的话我会把这一块源码仔细研究一下,专门写一篇。
网络安全成长路线图
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成hei客大神,这个方向越往后,需要学习和掌握的东西就会越来越多,以下是学习网络安全需要走的方向:
# 网络安全学习方法
上面介绍了技术分类和学习路线,这里来谈一下学习方法:
## 视频学习
无论你是去B站或者是油管上面都有很多网络安全的相关视频可以学习,当然如果你还不知道选择那套学习,我这里也整理了一套和上述成长路线图挂钩的视频教程,完整版的视频已经上传至CSDN官方,朋友们如果需要可以点击这个链接免费领取。网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!