基于JavaSecLab 一款综合Java漏洞平台的学习思考(一)
字数 1852 2025-08-22 12:22:30
JavaSecLab综合Java漏洞平台学习指南(一)
1. 平台概述
JavaSecLab是一款综合型Java漏洞平台,提供:
- 漏洞缺陷代码
- 修复代码
- 漏洞场景
- 审计SINK点
- 安全编码规范
- 覆盖多种漏洞场景
- 友好的用户交互UI
环境搭建
git clone https://github.com/whgojp/JavaSecLab.git
mvn clean package -DskipTests
docker-compose -p javaseclab up -d
默认密码:admin/admin
2. SpringBoot模块
2.1 Swagger UI敏感接口泄漏
漏洞描述:
Swagger是一种用于描述API的开源框架,使用OpenAPI规范定义API端点。当未正确配置访问控制时,可能导致API接口被未授权访问。
缺陷代码分析:
return new Docket(DocumentationType.OAS_30)
.pathMapping("/")
.enable(swaggerProperties.getEnable()) // 生产环境应禁用
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("top.whgojp"))
.paths(PathSelectors.any()) // 扫描所有路径
.build();
关键问题点:
.enable(true)在生产环境启用Swagger.paths(PathSelectors.any())暴露所有路径
常见Swagger泄露路径:
/api
/api-docs
/api-docs/swagger.json
/api.html
/swagger-ui.html
/swagger-ui.json
/swagger.json
/v1/api-docs
/v2/api-docs
/v3/api-docs
自动化工具:
- SpringBoot-Scan
- swagger-hack(用于爬取和测试Swagger接口)
2.2 SpringBoot Actuator敏感端点泄漏
漏洞描述:
Spring Boot Actuator提供监控和管理功能,但可能暴露敏感信息如健康状态、指标、线程dump、环境变量等。
缺陷配置:
management:
server:
port: 8080
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: '*' # 暴露所有端点
base-path: /sys/actuator
关键Actuator端点:
| 端点 | 描述 | 默认启用 |
|---|---|---|
| auditevents | 审计事件信息 | Yes |
| beans | 所有Spring Beans列表 | Yes |
| conditions | 配置类状态 | Yes |
| configprops | @ConfigurationProperties集合 | Yes |
| env | ConfigurableEnvironment属性 | Yes |
| health | 应用健康信息 | Yes |
| info | 应用信息 | Yes |
| metrics | 应用指标 | Yes |
| mappings | @RequestMapping路径集合 | Yes |
| threaddump | 线程dump | Yes |
| heapdump | 堆dump文件 | Yes |
| shutdown | 优雅关闭应用 | No |
利用方法:
- 访问
/actuator/env获取环境变量 - 下载
/actuator/heapdump分析JVM堆信息 - 使用JVisualVM工具分析dump文件
2.3 Druid配置不当
漏洞描述:
Apache Druid是阿里开源的高性能连接池,配置不当可能导致未授权访问。
缺陷配置:
druid:
filters: stat,log4j
stat-view-servlet:
enabled: true
url-pattern: /druid/*
# login-username: admin # 未配置认证
# login-password: admin
reset-enable: false
安全风险:
- 直接访问
/druid/index.html可查看数据库连接池信息 - 可能泄露websession信息
- 通过weburi获取敏感信息路径
修复方案:
- 禁用监控页面:
enabled: false - 配置认证信息:
stat-view-servlet: login-username: admin login-password: strongpassword
3. SPEL注入模块
3.1 SPEL表达式注入
漏洞描述:
SPEL(Spring Expression Language)是Spring表达式语言,当参数未经过滤时,攻击者可注入恶意表达式执行任意代码。
缺陷代码:
public R vul(String ex) {
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext evaluationContext = new StandardEvaluationContext();
Expression exp = parser.parseExpression(ex);
String result = exp.getValue(evaluationContext).toString();
return R.ok(result);
}
利用Payload:
T(java.lang.Runtime).getRuntime().exec("whoami")
T(Runtime).getRuntime().exec(new String[]{"open","/System/Applications/Calculator.app"})
安全修复:
使用SimpleEvaluationContext限制表达式功能:
public R safe(String ex) {
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext simpleContext = SimpleEvaluationContext.forReadOnlyDataBinding().build();
Expression exp = parser.parseExpression(ex);
String result = exp.getValue(simpleContext).toString();
return R.ok(result);
}
SimpleEvaluationContext限制:
- 不支持Java类型引用
- 禁止构造函数调用
- 禁止Bean引用
4. SSTI注入模块
4.1 Thymeleaf模板注入
漏洞场景:
- return内容可控
- URL路径可控
- 模板内容可控
缺陷代码:
// 情况1:return内容可控
public String vul1(@RequestParam String para, Model model) {
return "/vul/ssti/" + para;
}
// 情况2:URL路径可控
public void vul2(@PathVariable String path) {
log.info("SSTI注入:"+path);
}
利用Payload:
/ssti/vul1?para=__${new java.util.Scanner(T(java.lang.Runtime).exec('id').getInputStream()).next()}__::.x
/ssti/vul2/__${T(java.lang.Runtime).getRuntime().exec('open -a Calculator')}__::.x
安全修复:
- 白名单校验:
public String safe1(String para, Model model) {
List<String> white_list = Arrays.asList("vul", "ssti");
return white_list.contains(para) ? "vul/ssti" + para : "common/401";
}
- 跳过视图解析:
@GetMapping("/safe2/{path}")
public void safe2(@PathVariable String path, HttpServletResponse response) {
log.info("SSTI注入:"+path);
}
安全编码规范:
- 避免用户输入直接作为模板名称或路径
- 对所有动态内容进行严格校验和转义
- 选择支持自动转义的安全模板引擎
- 使用白名单限制动态渲染的模板
5. 总结
本教学文档详细分析了JavaSecLab平台中的四种主要漏洞类型:
- Swagger UI敏感接口泄漏
- SpringBoot Actuator敏感端点泄漏
- Druid配置不当
- SPEL表达式注入
- Thymeleaf模板注入(SSTI)
每种漏洞都包含:
- 漏洞原理分析
- 缺陷代码示例
- 实际利用方法
- 安全修复方案
通过系统学习这些漏洞,可以深入理解Java安全风险的本质,掌握安全编码的最佳实践。建议在实际环境中复现这些漏洞,加深理解。