Jackson调用链自动化发掘思路

渗透技巧 1年前 (2023) admin
294 0 0
《Jackson调用链自动化发掘思路》是i春秋论坛签约作家「Wdd」表哥分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。
Jackson调用链自动化发掘思路

Wdd


五年安全行业从业经验,目前从事甲方安全工程师,擅长安全架构、DevSecOps和代码审计,曾获取多枚CVE

该文章首发在i春秋论坛,欢迎各位师傅完成专业爱好者认证,可第一时间获取最新技术资讯和实战技能分享

Jackson调用链自动化发掘思路

(识别二维码,快速完成认证)


Jackson调用链自动化发掘思路

本文以Jackson为发掘目标,通过自研Java扫描工具发现新的调用链的方法和思路。

其实原本是想写一个代码审计扫描器的,但是由于工作量较大,中途缩减用来寻找调用链,于是就分享一下通过Python进行静态自动化调用链的发掘,当然通过规则配置也可以对其他调用链进行自动扫描和发掘。

01

Jackson简述 

Jackson从2021年底就不再接受新的CVE了,也就是说通过绕过黑名单方式的CVE已经不收了,就算不收,也不能阻拦研究的热情。

Jackson黑名单位置:
comfasterxmljacksondatabindjsontypeimplSubTypeValidator.class。

Jackson调用链自动化发掘思路

1.主要发掘思路

继承原有类:在已经证实存在利用的基础链上,发现继承存在利用的类。

发现新的类:通过特征以及Jackson的利用特征来找到新的调用链。

2.扫描思路

扫描器通过Python首先将Java源文件解析为dict树,型如:

Jackson调用链自动化发掘思路

然后通过规则匹配的方式去匹配,给一个简易的规则样式。

Jackson调用链自动化发掘思路

这条规则的含义代表找到调用类型为URL,调用方法为openConnection,循环递归查找,即找到满足条件的方法,同时会在当前类中寻找调用此方法,最后指定这个方法的前缀。

主要的难点在于将Java再转为dict树和后期规则的编写,以及对规则内容的适配。现阶段就是规则+代码同时改的阶段。

3.Jackson利用特征

利用分为:远程jndi调用,xxe,ssrf等,不同的利用方式会使用不同的关键方法。本篇主要抛砖引玉,寻找ssrf相关的调用链。

除了调用规则和方法,Jackson需要要求方法必须是set,或者get,为了方便调用,还需要传入参数为string类型的,这样更加方便我们的调用,通过内部代码进行适配。

02

继承JEditorPane 

已经有的调用链就不写了,我们找一些很少有人分析的,比如JEditorPane,javax.swing.JEditorPane。

Jackson调用链自动化发掘思路

简单的看一下,JEditorPane类中存在setPage方法,此方法有一个String的入参,然后将url传入setPage。

Jackson调用链自动化发掘思路

在这里调用getStream

Jackson调用链自动化发掘思路

最终调用openConnection

Jackson调用链自动化发掘思路

那么用自动扫描工具时,就可以根据继承关系去找符合两个条件的类。

一个条件是继承JEditorPane,还有一个条件是不能有setpage方法,因为如果子类没有setpage方法就会调用父类的setpage方法。

针对jdk1.7的包进行扫描:找到了一个类HTMLPane,具体位置是 sun.tools.jconsole.HTMLPane。

Jackson调用链自动化发掘思路

可以看到完美的符合我们的条件。

Jackson调用链自动化发掘思路

写一个demo测试一下。

Jackson调用链自动化发掘思路

成功绕过&利用

Jackson调用链自动化发掘思路

03

发现新的类 

根据我们上面分析的,已经找到了一个触发点,就是URL.openConnection,那么我们自动扫描规则是:

通过找到一个方法存在URL.openConnection,并且这个方法是set或者get开头,参数流的尽头必须是传入参数,还得是String类型的。

规则和代码如下:

Jackson调用链自动化发掘思路

限制方法以及流:

Jackson调用链自动化发掘思路

可以看到成功扫描到了JEditorPane

Jackson调用链自动化发掘思路

要找到一个成功的调用链,还得再次进行筛选,并且要引入多个库进行扫描,由于目前本地数据没有那么多,所以只能给出示例扫描。

Jackson调用链自动化发掘思路

04

 总结    

按照人工智能的发展趋势,以后AI会实现自动寻找调用链的操作,但目前还没有成型的产品,所以不影响我们自己写一个自动化寻找调用链的工具。

原本是想写扫描器的,但由于工作量太大,并且内容和寻找调用链的方式有重合的部分,所幸直接改成自动化调用链检索工具。功能还未完善,需要时间修改测试,所以暂不开源了,仅当做寻找调用链的工具。

小伙伴们如果对本篇文章感兴趣,欢迎来i春秋论坛交流探讨,互相切磋。网络安全本来就是一个比较杂的学科,从我个人的经验来说,想要学好网络安全,首先要脚踏实地打好基础,并抱有浓厚的学习兴趣,同时多分析漏洞原理,可以向技术大佬们虚心请教,有项目实操机会尽量参加,可以快速提升实战技能。

Jackson调用链自动化发掘思路

原文始发于微信公众号(i春秋):Jackson调用链自动化发掘思路

版权声明:admin 发表于 2023年5月8日 下午5:02。
转载请注明:Jackson调用链自动化发掘思路 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...