基于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();

关键问题点

  1. .enable(true)在生产环境启用Swagger
  2. .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

利用方法

  1. 访问/actuator/env获取环境变量
  2. 下载/actuator/heapdump分析JVM堆信息
  3. 使用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

安全风险

  1. 直接访问/druid/index.html可查看数据库连接池信息
  2. 可能泄露websession信息
  3. 通过weburi获取敏感信息路径

修复方案

  1. 禁用监控页面:enabled: false
  2. 配置认证信息:
    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限制

  1. 不支持Java类型引用
  2. 禁止构造函数调用
  3. 禁止Bean引用

4. SSTI注入模块

4.1 Thymeleaf模板注入

漏洞场景

  1. return内容可控
  2. URL路径可控
  3. 模板内容可控

缺陷代码

// 情况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

安全修复

  1. 白名单校验:
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";
}
  1. 跳过视图解析:
@GetMapping("/safe2/{path}")
public void safe2(@PathVariable String path, HttpServletResponse response) {
    log.info("SSTI注入:"+path);
}

安全编码规范

  1. 避免用户输入直接作为模板名称或路径
  2. 对所有动态内容进行严格校验和转义
  3. 选择支持自动转义的安全模板引擎
  4. 使用白名单限制动态渲染的模板

5. 总结

本教学文档详细分析了JavaSecLab平台中的四种主要漏洞类型:

  1. Swagger UI敏感接口泄漏
  2. SpringBoot Actuator敏感端点泄漏
  3. Druid配置不当
  4. SPEL表达式注入
  5. Thymeleaf模板注入(SSTI)

每种漏洞都包含:

  • 漏洞原理分析
  • 缺陷代码示例
  • 实际利用方法
  • 安全修复方案

通过系统学习这些漏洞,可以深入理解Java安全风险的本质,掌握安全编码的最佳实践。建议在实际环境中复现这些漏洞,加深理解。

JavaSecLab综合Java漏洞平台学习指南(一) 1. 平台概述 JavaSecLab是一款综合型Java漏洞平台,提供: 漏洞缺陷代码 修复代码 漏洞场景 审计SINK点 安全编码规范 覆盖多种漏洞场景 友好的用户交互UI 环境搭建 默认密码:admin/admin 2. SpringBoot模块 2.1 Swagger UI敏感接口泄漏 漏洞描述 : Swagger是一种用于描述API的开源框架,使用OpenAPI规范定义API端点。当未正确配置访问控制时,可能导致API接口被未授权访问。 缺陷代码分析 : 关键问题点 : .enable(true) 在生产环境启用Swagger .paths(PathSelectors.any()) 暴露所有路径 常见Swagger泄露路径 : 自动化工具 : SpringBoot-Scan swagger-hack(用于爬取和测试Swagger接口) 2.2 SpringBoot Actuator敏感端点泄漏 漏洞描述 : Spring Boot Actuator提供监控和管理功能,但可能暴露敏感信息如健康状态、指标、线程dump、环境变量等。 缺陷配置 : 关键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/index.html 可查看数据库连接池信息 可能泄露websession信息 通过weburi获取敏感信息路径 修复方案 : 禁用监控页面: enabled: false 配置认证信息: 3. SPEL注入模块 3.1 SPEL表达式注入 漏洞描述 : SPEL(Spring Expression Language)是Spring表达式语言,当参数未经过滤时,攻击者可注入恶意表达式执行任意代码。 缺陷代码 : 利用Payload : 安全修复 : 使用 SimpleEvaluationContext 限制表达式功能: SimpleEvaluationContext限制 : 不支持Java类型引用 禁止构造函数调用 禁止Bean引用 4. SSTI注入模块 4.1 Thymeleaf模板注入 漏洞场景 : return内容可控 URL路径可控 模板内容可控 缺陷代码 : 利用Payload : 安全修复 : 白名单校验: 跳过视图解析: 安全编码规范 : 避免用户输入直接作为模板名称或路径 对所有动态内容进行严格校验和转义 选择支持自动转义的安全模板引擎 使用白名单限制动态渲染的模板 5. 总结 本教学文档详细分析了JavaSecLab平台中的四种主要漏洞类型: Swagger UI敏感接口泄漏 SpringBoot Actuator敏感端点泄漏 Druid配置不当 SPEL表达式注入 Thymeleaf模板注入(SSTI) 每种漏洞都包含: 漏洞原理分析 缺陷代码示例 实际利用方法 安全修复方案 通过系统学习这些漏洞,可以深入理解Java安全风险的本质,掌握安全编码的最佳实践。建议在实际环境中复现这些漏洞,加深理解。