BugKuCTF-crypto:.!?

本文介绍了一次使用Ook密码进行加密的挑战,并通过在线工具成功将其解密。最终得到了flag{bugku_jiami}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题我本以为是转义的摩斯密码其实是简单的Ook密码。

Ook在线解密链接:

https://www.splitbrain.org/services/ook

复制文本后,Ook to text 得到flag:

flag{bugku_jiami}

PS F:\workdata\115_project> mvn dependency:tree | findstr "security" [INFO] +- org.springframework.boot:spring-boot-starter-security:jar:3.3.5:compile [INFO] | +- org.springframework.security:spring-security-config:jar:6.3.4:compile [INFO] | | \- org.springframework.security:spring-security-core:jar:6.3.4:compile [INFO] | | \- org.springframework.security:spring-security-crypto:jar:6.3.4:compile [INFO] | \- org.springframework.security:spring-security-web:jar:6.3.4:compile [INFO] | +- org.springframework.boot:spring-boot-starter-security:jar:3.3.5:compile [INFO] | | +- org.springframework.security:spring-security-config:jar:6.3.4:compile [INFO] | | | \- org.springframework.security:spring-security-core:jar:6.3.4:compile [INFO] | | | \- org.springframework.security:spring-security-crypto:jar:6.3.4:compile [INFO] | | \- org.springframework.security:spring-security-web:jar:6.3.4:compile [INFO] | +- org.springframework.boot:spring-boot-starter-security:jar:3.3.5:compile [INFO] | | +- org.springframework.security:spring-security-config:jar:6.3.4:compile [INFO] | | | \- org.springframework.security:spring-security-crypto:jar:6.3.4:compile [INFO] | | \- org.springframework.security:spring-security-web:jar:6.3.4:compile Downloading from public: https://maven.aliyun.com/repository/public/org/eclipse/jetty/jetty-security/12.0.14/jetty-security-12.0.14.pom Downloaded from public: https://maven.aliyun.com/repository/public/org/eclipse/jetty/jetty-security/12.0.14/jetty-security-12.0.14.pom (5.2 kB at 26 kB/s) [INFO] | +- org.springframework.boot:spring-boot-starter-security:jar:3.3.5:compile [INFO] | | +- org.springframework.security:spring-security-config:jar:6.3.4:compile [INFO] | | \- org.springframework.security:spring-security-web:jar:6.3.4:compile [INFO] | | +- org.springframework.security:spring-security-core:jar:6.3.4:compile [INFO] | +- org.eclipse.jetty:jetty-security:jar:12.0.14:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-security:jar:3.3.5:compile [INFO] | | | +- org.springframework.security:spring-security-config:jar:6.3.4:compile [INFO] | | | \- org.springframework.security:spring-security-web:jar:6.3.4:compile [INFO] | | +- org.springframework.security:spring-security-core:jar:6.3.4:compile [INFO] | +- org.eclipse.jetty:jetty-security:jar:12.0.14:compile PS F:\workdata\115_project>
最新发布
07-26
<think>根据提供的依赖树片段,我们观察到以下几点关键信息: 1. 项目中存在多个`spring-boot-starter-security`依赖,但版本都是3.3.5,对应的Spring Security组件版本为6.3.4(包括`spring-security-core`, `spring-security-config`, `spring-security-web`等)。 2. 在依赖树中,`spring-security-crypto`作为`spring-security-core`的传递依赖被正确引入(版本6.3.4)。 3. 同时出现了`org.eclipse.jetty:jetty-security`依赖(版本12.0.14),这是一个与安全相关的Jetty组件,但不会影响Spring Security的类加载。 ### 问题复现原因分析 尽管依赖树显示`spring-security-crypto:6.3.4`存在,但运行时仍报`ClassNotFoundException: PasswordEncoder`,可能原因包括: 1. **类加载隔离** Kettle(Pentaho Data Integration)使用自定义类加载器(如`PentahoClassLoader`)加载其核心库,可能导致Kettle的类加载器优先加载了其自带的旧版本`spring-security-crypto`(例如5.x版本),而Spring Boot应用类加载器无法访问该版本。 2. **依赖作用域问题** Kettle依赖可能被声明为`provided`或`runtime`,导致编译时可见但运行时缺失。 3. **JAR包冲突** 在打包过程中(如Spring Boot的fat jar),依赖嵌套冲突可能导致`spring-security-crypto`被错误排除。 --- ### 解决方案 #### 方案1:统一类加载器(推荐) 将Kettle相关依赖的作用域设置为`provided`,并通过独立进程(如命令行调用)使用Kettle,避免与Spring Boot共享类加载器。 ```xml <dependency> <groupId>org.pentaho</groupId> <artifactId>kettle-core</artifactId> <version>9.0.0.0-423</version> <scope>provided</scope> </dependency> ``` #### 方案2:强制类加载器委托 在启动脚本中增加JVM参数,强制Kettle的类加载器优先委托给父类加载器: ```bash java -Dorg.osgi.framework.bootdelegation=org.springframework.security.* -jar your-app.jar ``` #### 方案3:检查打包配置 确保Spring Boot的Maven插件没有排除安全模块: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <!-- 确保没有排除spring-security-crypto --> <exclude> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> ``` #### 方案4:升级Kettle版本 检查Kettle 9.0.0.0-423的[官方文档](https://help.pentaho.com/),确认是否支持Spring Security 6.x。若不支持,考虑升级到兼容版本。 --- ### 验证步骤 1. 解压生成的Spring Boot JAR文件: ```bash jar -xf your-app.jar ``` 2. 检查`BOOT-INF/lib`目录下是否存在`spring-security-crypto-6.3.4.jar`。 §§相关问题§§ 1. 如何解决Java应用中由类加载器隔离导致的ClassNotFoundException? 2. 在Maven中,provided作用域与runtime作用域有何区别? 3. Spring Boot的fat jar打包机制如何影响依赖加载? 4. 有哪些工具可以分析Java应用的类加载冲突? 5. 如何配置JVM参数以调试类加载过程?</think>### 依赖树分析及问题定位 根据提供的依赖树输出,我们观察到以下关键信息: 1. **Spring Security依赖完整**: - `spring-security-crypto:jar:6.3.4` 已存在且版本正确(与Spring Boot 3.3.5兼容) - 所有Spring Security组件(core, config, web)版本均为6.3.4 2. **Jetty安全组件**: - 引入了`jetty-security:jar:12.0.14`(来自Kettle的依赖) 3. **核心问题**: - 尽管依赖树显示`spring-security-crypto`存在,运行时仍报`ClassNotFoundException`,表明存在**类加载冲突** --- ### 根本原因分析 **Kettle的类加载机制与Spring Boot冲突**: 1. Kettle(Pentaho)使用自定义类加载器(`PentahoClassLoader`)管理其插件和核心库 2. 当Kettle加载其自带的旧版本Spring组件时: - 优先使用自己的类加载器 - 覆盖了Spring Boot加载的`spring-security-crypto` 3. Jetty依赖进一步加剧冲突: - Kettle 9.x内置Jetty 12 - Jetty 12自带的安全模块可能包含不兼容的类副本 --- ### 解决方案 #### 方案1:类加载器隔离(推荐) ```java // 创建独立类加载器运行Kettle ClassLoader parentLoader = Thread.currentThread().getContextClassLoader(); URLClassLoader kettleLoader = new URLClassLoader(kettleJarPaths, null); // 父加载器设为null Thread.currentThread().setContextClassLoader(kettleLoader); try { KettleEnvironment.init(); // 执行Kettle作业/转换 } finally { Thread.currentThread().setContextClassLoader(parentLoader); } ``` #### 方案2:排除冲突依赖 在`pom.xml`中排除Kettle的嵌入式服务器: ```xml <dependency> <groupId>org.pentaho</groupId> <artifactId>kettle-core</artifactId> <version>9.0.0.0-423</version> <exclusions> <!-- 排除Jetty服务器 --> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> <!-- 排除Spring旧版本 --> <exclusion> <groupId>org.springframework</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ``` #### 方案3:升级Kettle版本 Kettle 9.3+ 已改进Spring兼容性: ```xml <dependency> <groupId>org.pentaho</groupId> <artifactId>kettle-core</artifactId> <version>9.3.0.0-428</version> <!-- 验证兼容性 --> </dependency> ``` --- ### 验证步骤 1. 添加JVM参数检测类加载: ```bash java -verbose:class -jar your-app.jar ``` 2. 检查日志中`PasswordEncoder`的加载来源 3. 使用诊断工具验证: ```java // 在SecurityConfig类中添加诊断代码 System.out.println("PasswordEncoder loaded by: " + PasswordEncoder.class.getClassLoader()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值