记一次RASP Demo分析

渗透技巧 2年前 (2022) admin
543 0 0

点击蓝字 关注我们

前言


前段时间学习了一下RASP的基础知识,想去找一个实例进行分析学习,为了方便学习,从git上找了一个师傅的demo进行分析学习。

demo

链接:https://github.com/xbeark/javaopenrasp

理清思路


这里我们需要了解RASP一般的实现思路,在有类被ClassLoader加载时候,所以会把该类的字节码先交给类ClassTransformer的 transform方法处理,该方法通过配置文件判断该类是否为我们需要hook的类,如果是则交给ASM或JAVASSIST类进行处理,当触发了我们需要hook的类,我们会在方法的开头或者结尾插入进入检测函数的字节码。把hook好的字节码返回,从而载入虚拟机。

入口


先看一下文件结构,接着发现这里的入口是Agent的premain方法,通过init函数对配置文件main.config进行了导入,之后就是熟悉的调用transform方法。

记一次RASP Demo分析

记一次RASP Demo分析

记一次RASP Demo分析

记一次RASP Demo分析


判断类


这里通过的配置导入,判断当前加载的类是否为我们需要hook的类,如果是则进入下面的代码块,这里是自定了一个Reflections类,这里我们看一下这里用到的createVisitorIns的实现代码,可以看到这里是通过反射返回public和private的构造器。通过这里决定了调用visitor的哪个类文件。

记一次RASP Demo分析

记一次RASP Demo分析


进一步判断


这里可以看到继上一步对class的判断,这里进一步对函数进行了判断,通过函数签名判断是否是我们需要hook的函数,如果是则进行下一步对字节码的操作。

记一次RASP Demo分析


字节码操作


大师傅在这里一共写了三个对字节码的操作,这里我们就只对DesrializationVisitorAdapter进行的分析学习写出,其他两个也就一样的思路了,可以看到这里对字节码进行操作的是ASM,先new了一个方法,再用dup进行压栈,之后利用INVOKESPECIAL对类进行初始化操作,然后调用自定义的filter,对其进行一个判断。剩下的字节码,放到下一个板块分析。

记一次RASP Demo分析


filter分析


这里我们前往filters这个目录,查找我们之前调用到的方法,发现这里是通过对配置信息与其对比,利用上文的new Label()进行和visitJumpInsn(IFNE, l92),对黑名单里面的值进行一次比较,如果比较比较成功,则继续运行,因为mod是black,则报出风险。如果运行不成功,因为是try板块,则爆出无风险。

记一次RASP Demo分析


结尾


因为第一次对RASP进行分析,会有点不足之处,希望大家多多担待。另外,感谢github上xbeark师傅的demo。


原文始发于微信公众号(Th0r安全):记一次RASP Demo分析

版权声明:admin 发表于 2022年3月14日 下午12:19。
转载请注明:记一次RASP Demo分析 | CTF导航

相关文章

暂无评论

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