冰蝎源码(Behinder)分析---代码审计
字数 1317 2025-08-29 22:41:10

冰蝎(Behinder)源码分析:Java字节码发送机制详解

1. JSP木马概述

JSP木马与常规的ASP、PHP木马不同,冰蝎(Behinder)和哥斯拉等工具采用发送Java字节码的方式,其中字节码中藏有恶意函数。

传统JSP木马特点

  • 直接包含Runtime、Process类和exec方法
  • 容易被静态杀毒软件检测和查杀

主流JSP木马特点

  • 采用加载字节码的方式
  • 虽然仍可能被杀毒软件检测,但免杀效果更好
  • 是目前最常用的免杀方式

2. 冰蝎字节码发送机制

冰蝎连接后提供的功能包括:

  • 基本信息获取
  • 命令执行
  • 文件管理
  • 内网穿透等

这些功能的字节码来源于冰蝎源码中的payload/java目录。

3. 核心工具:Javassist

冰蝎使用Javassist库动态生成和修改Java字节码。

Javassist核心功能

  1. 动态生成类:在运行时创建新的Java类
  2. 修改现有类:修改已编译类的结构(添加/修改字段、方法)
  3. 代码注入:在方法调用前后注入代码(如添加日志记录)
  4. 动态代理:实现AOP(面向切面编程)
  5. 字节码分析:提取类的结构信息(类名、字段、方法等)

Javassist核心组件

  • ClassPool:管理CtClass对象的容器,用于查找和修改类
  • CtClass:表示一个Java类,用于操作类的结构
  • CtMethod和CtField:分别表示类中的方法和字段

Javassist简单用法示例

// 创建ClassPool
ClassPool pool = ClassPool.getDefault();

// 创建新类
CtClass cc = pool.makeClass("HelloWorld");

// 添加方法
CtMethod method = CtNewMethod.make(
    "public void sayHello() { System.out.println(\"Hello\"); }", cc);
cc.addMethod(method);

// 写入类文件
cc.writeFile();

4. 冰蝎字节码组装流程

Params.java中的组装流程

Params.java是Java字节码操作工具类的核心方法,通过组合传输协议和参数注入来动态生成类:

  1. 使用Javassist/CtClass和ASM框架修改字节码
  2. 支持加密协议处理和参数分块注入
  3. 生成随机类名混淆
  4. 实现缓存机制优化重复操作
  5. 返回处理后的类字节码用于动态加载执行

关键点

  • 函数返回结果是通过Javassist动态修改的类(如Cmd.java+加密函数)
  • 返回byte类型可以直接加载修改的类
  • 原始Cmd.java中没有加密函数,但通过此操作获得了有加密函数的Cmd实体类

5. 数据传输流程

Utils.java代码块

这是捕获的断点中看到的代码:

  • JSP的payload就是通过Params类生成的字节(byte类型)

加密解密机制

冰蝎使用组装过的字节类的加密、解密函数:

  1. 采用ClassLoader方式
  2. 使用invoke方法动态调用
  3. 与原始冰蝎马使用相同的方式

CustomCryptor.java

实现Icrypt接口,处理加密解密功能。

6. 冰蝎Webshell工作原理

原始冰蝎Webshell也使用ClassLoader方式加载字节类:

  1. 解密函数的编写必须与传输协议一致
  2. 字节码通过POST传参传送给JSP
  3. 成功发送Java字节码

7. 总结

冰蝎实现Java字节码发送的关键技术:

  1. 使用Javassist库动态修改class
  2. 动态添加方法或变量
  3. 将动态创建的方法与原始payload的class组装
  4. 发送组装后的字节码给JSP执行

这种技术使得冰蝎能够绕过传统静态检测,实现更高级的Web攻击功能。

冰蝎(Behinder)源码分析:Java字节码发送机制详解 1. JSP木马概述 JSP木马与常规的ASP、PHP木马不同,冰蝎(Behinder)和哥斯拉等工具采用发送Java字节码的方式,其中字节码中藏有恶意函数。 传统JSP木马特点 : 直接包含Runtime、Process类和exec方法 容易被静态杀毒软件检测和查杀 主流JSP木马特点 : 采用加载字节码的方式 虽然仍可能被杀毒软件检测,但免杀效果更好 是目前最常用的免杀方式 2. 冰蝎字节码发送机制 冰蝎连接后提供的功能包括: 基本信息获取 命令执行 文件管理 内网穿透等 这些功能的字节码来源于冰蝎源码中的 payload/java 目录。 3. 核心工具:Javassist 冰蝎使用Javassist库动态生成和修改Java字节码。 Javassist核心功能 动态生成类 :在运行时创建新的Java类 修改现有类 :修改已编译类的结构(添加/修改字段、方法) 代码注入 :在方法调用前后注入代码(如添加日志记录) 动态代理 :实现AOP(面向切面编程) 字节码分析 :提取类的结构信息(类名、字段、方法等) Javassist核心组件 ClassPool :管理CtClass对象的容器,用于查找和修改类 CtClass :表示一个Java类,用于操作类的结构 CtMethod和CtField :分别表示类中的方法和字段 Javassist简单用法示例 4. 冰蝎字节码组装流程 Params.java中的组装流程 Params.java 是Java字节码操作工具类的核心方法,通过组合传输协议和参数注入来动态生成类: 使用Javassist/CtClass和ASM框架修改字节码 支持加密协议处理和参数分块注入 生成随机类名混淆 实现缓存机制优化重复操作 返回处理后的类字节码用于动态加载执行 关键点 : 函数返回结果是通过Javassist动态修改的类(如Cmd.java+加密函数) 返回byte类型可以直接加载修改的类 原始Cmd.java中没有加密函数,但通过此操作获得了有加密函数的Cmd实体类 5. 数据传输流程 Utils.java代码块 这是捕获的断点中看到的代码: JSP的payload就是通过Params类生成的字节(byte类型) 加密解密机制 冰蝎使用组装过的字节类的加密、解密函数: 采用ClassLoader方式 使用invoke方法动态调用 与原始冰蝎马使用相同的方式 CustomCryptor.java 实现Icrypt接口,处理加密解密功能。 6. 冰蝎Webshell工作原理 原始冰蝎Webshell也使用ClassLoader方式加载字节类: 解密函数的编写必须与传输协议一致 字节码通过POST传参传送给JSP 成功发送Java字节码 7. 总结 冰蝎实现Java字节码发送的关键技术: 使用Javassist库动态修改class 动态添加方法或变量 将动态创建的方法与原始payload的class组装 发送组装后的字节码给JSP执行 这种技术使得冰蝎能够绕过传统静态检测,实现更高级的Web攻击功能。