-
-
[原创]用frida扫描安卓应用的fastjson gadget
-
发表于:
2024-2-28 16:51
3545
-
[原创]用frida扫描安卓应用的fastjson gadget
问题描述
fastjson有过一些严重的RCE漏洞。虽然官方表示对安卓没有影响,但是也不完全是。分析过程请见这篇文章。
c48K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6*7K9s2g2S2L8X3I4S2L8W2)9J5k6i4A6Z5K9h3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8U0j5^5x3U0M7&6y4K6f1&6y4l9`.`.
目前没有安卓环境上通用的fastjson RCE方法,但是由于每个应用的代码不同,仍然可能存在fastjson反序列化的漏洞。可能存在的漏洞类别有很多,从RCE到敏感信息泄露都有可能。
想要实际挖掘fastjson的漏洞的话,需要有两个条件:
存在fastjson任意类反序列化功能(低版本默认开启)
存在可利用的fastjson gadget,在反序列化代码执行后能造成较大的影响。例如非安卓平台的com.sun.rowset.JdbcRowSetImpl就是利用了jndi,达到了RCE的效果
事实上难点在于第二点。原因如下
能被fastjson反序列化的类有一些限制条件
符合条件的类一般都无法造成实际安全影响
符合条件的类非常多
分析思路
首先找到fastjson反序列化的条件。找到具体哪些类可以被fastjson反序列化,哪些函数可以被执行,以及哪些数据可以被更改。
然后构造一个工具,可以用来找到可利用的类和方法。
由于找到的类会很多,需要自动化排除无实际影响的frida gadget(这个问题暂时遗留)
研究步骤
fastjson反序列化参考文章:ed8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5i4m8W2M7W2)9J5k6i4y4W2k6h3u0#2k6#2)9J5k6h3!0J5k6#2)9J5c8U0V1&6y4q4)9J5c8R3`.`.
首先我们自己构造一个安卓应用,使用低版本的fastjson,然后构造一些类,并实验哪些类的哪些代码是可以被执行的。
具体过程不在本文详细描述,直接说结果吧。假如我们有这么一个类
public class Gadget {
// 类本身不需要被任何地方调用,只要存在、classloader能找到,就可以
public boolean b = true; // 可更改。类型不限,public,非static
public static int i = 0; // 不可更改
public Gadget() {
// 可执行
}
private Gadget() {
// 可执行。private也可以。
}
public void setI(int var) {
// 可执行:public,非static,只有一个参数,方法名为setXXX
// 返回类型无限制,如果参数不是基本类型也可以(比如Bundle也是可以调用的)。
}
public static void setJ(int var) {
// static 不可执行
}
private void setK(int var) {
// 不可执行
}
public int getI() {
// 可执行。public,非static,无参数,方法名为getXXX
}
}
为了能更好地挖掘漏洞,我们用frida进行自动化扫描。当然,如果能通过反编译等方式得到源码,也可以使用静态分析,来对java的ast进行分析和扫描。
我认为动态分析和静态分析无法互相代替。除非能拿到源码,否则一定会有反编译失败的情况。就算有源码,也存在kotlin、groovy和java三种语言需要扫描。
那么以下是我的frida工具。
c8dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5j5i4u0J5P5h3k6&6P5q4)9J5c8X3k6S2M7%4c8B7M7$3!0F1i4K6u0V1k6$3q4V1k6$3g2@1i4K6u0V1j5h3&6V1M7X3!0A6k6q4)9J5k6s2y4U0j5h3&6F1k6i4t1`.
使用方法如下:
准备一个frida+python的环境,安装adb
在frida_script.py中填入相应的device和process,可以通过adb获得

得到所有的已加载的类(frida无法得到全部的类。由于这一步会扫出来很多的类,我们先将其保存)


根据类的列表(上个步骤扫描出来的,也可以手动添加),判断哪些是符合fastjson gadget条件的,然后将结果存入文件



将得到的类和方法,进行人工筛选
此工具可以用来扫描大量的frida gadget,但仍然会有遗漏。扫描出来的gadget具体能产生的影响也需要人为判断。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!