Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CodeInspector

简介

简化并重写GadgetInspector尝试实现一个自动Java代码审计工具

基本原理是从Java的字节码角度入手,使用ASM技术解析,模拟JVM的Operand StackLocal Variables Array实现数据流分析

最终目标:通过输入一个SpringBootJar,直接生成漏洞报告

原理

JVM在每次方法调用均会创建一个对应的Frame,方法执行完毕或者异常终止,Frame被销毁

而每个Frame的结构如下,主要由本地变量数组(local variables)和操作栈(operand stack)组成

局部变量表所需的容量大小是在编译期确定下来的,表中的变量只在当前方法调用中有效

JVM把操作数栈作为它的工作区——大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈

比如,IADD指令就要从操作数栈中弹出两个整数,执行加法运算,其结果又压回到操作数栈中

之所以介绍JVM Frame,是因为代码模拟了比较完善的Operand Stack和Local Variables交互

例如方法调用会从Stack中弹出参数,方法返回值会压入栈中

根据这样的规则,进而执行数据流的分析

参考代码中的core/CoreMethodAdapter,该类构造了Operand StackLocal Variables Array并结合ASM技术实现数据流分析

进度

目前仅尝试实现了一种简单的SSRF,但可以做到参数可控性判断和数据流追踪分析,参考已有代码可以实现其他的漏洞检测

使用

目前仅测试

打包:mvn clean package

执行:java -jar CodeInspector.jar --boot jar/springboot.jar --pack com.inspector.sbdemo

  • boot:指定SpringBoot的Jar包路径
  • pack:指定项目的包名,将会分析启动的SpringMVC路径映射,生成自动审计的入口

About

基于Java ASM技术和GadgetInspector的原理,尝试实现一个自动Java代码审计工具。目前做到了可控参数分析和数据流跟踪分析

Resources

Stars

37 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /