SkillAgentSearch skills...

WebGoatVulnerabilityRangeCodeAudit

6万字奶爸级WebGoat8.X代码审计大全,全文均可复现,适合刚学完JAVASE准备开始代码审计的师傅🌟

Install / Use

/learn @d0ctorsec/WebGoatVulnerabilityRangeCodeAudit
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

WebGoatVulnerabilityRangeCodeAudit

写在前面:最近团队没什么项目比较闲,就整理一下以前的笔记再写写文章,这篇文章适合学完JavaSE的师傅去接触Java代码审计,为了保证全文都是可理解复现的也花了不少精力,文章花了大概2周去完成,全文总共6万字,部分不涉及代码审计的模块没有写上,同时全文的顺序与WebGoat原顺序不一样,本文会采用从易到难的顺序来保证不会学一半学晕咯,文章目录层级比较多感兴趣的佬可以下载MarkDown阅读。

<h3 align="center"><span style="color:#FFD700">觉</span><span style="color:#FFC000">得</span><span style="color:#FFA500">写</span><span style="color:#FF8C00">的</span><span style="color:#FF8C00">好</span><span style="color:#FFA500">给</span><span style="color:#FFC000">个</span><span style="color:#FFD700">☆Star咯</span> </h3>
参考
★https://wjlshare.com/?s=java%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1
https://www.cnblogs.com/lusuo/p/17825090.html
★https://www.cnblogs.com/HAN91/p/14585449.html
https://jinone.github.io/dom/
https://jinone.github.io/bugbounty-dom-xss/
https://developer.aliyun.com/article/1366087
https://x1lys.github.io/2024/08/13/%E6%B5%85%E8%B0%88%E9%A2%84%E7%BC%96%E8%AF%91%E4%B9%8B%E4%BA%8ESQL%E6%B3%A8%E5%85%A5%E9%98%B2%E5%BE%A1/index.html
https://cloud.tencent.com/developer/article/2299003
https://juejin.cn/post/7115399238728712205
https://tttang.com/archive/1716/#toc_dtd_1
https://juejin.cn/post/7151588443683258376

一、前言

1.1.WebGoat介绍

WebGoat是OWASP组织研制出的用于进行web漏洞实验的Java靶场程序,用来说明web应用中存在的安全漏洞。如果只是像pikachu一样练习可以直接下载jar包练习,因为是代码审计这里我们采用idea启动,方便我们去审计后端代码。

1.2.准备环境

这里必须的环境和坑点,如果要复现的话请按照这里列举的把坑填了
1.JDK版本17
2.idea下载插件Lombok
3.Webgoat下载8.2.2版本https://github.com/WebGoat/WebGoat/releases/tag/v8.2.2,最新版和其他版本模块有一些区别,并且搭建失败可能会踩坑。

下载Webgoat解压,并用idea打开

image-20250707191310967

配置环境,先去下载openjdk-17导入到SDKs模块,附上下载链接

https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html

image-20250624183420469

再去project模块把openjdk-17选择上,这里我使用的17.0.8image-20250624183605140

检查运行配置是否已经被设置为JDK17,如果已经是17不用动什么

image-20250707194032910

去插件库下载Lombok插件

image-20250624183113575

修改pom.xmlowasp版本,这步可能没必要这个版本现在已经报错了,后面还是可以正常使用

image-20250708132933648

 <groupId>org.owasp</groupId>
 <artifactId>dependency-check-maven</artifactId>
 <version>6.5.3</version>

更新Maven的依赖,如果没有这个模块去插件库下载一下Maven

image-20250624185156059

切到WebWolf如果没报错,那么恭喜你可以切换到StartWebGoat运行了

image-20250708133236471

image-20250624185412488

访问WebGoat站点,可以看到已经成功加载出来了,注册一个账号登录到后台,环境已经搭建好了可以开始复现漏洞了

http://127.0.0.1:8080/WebGoat/login

image-20250624185532224

image-20250624185701556

1.3.了解Controller(控制器)、Mapping(映射)和 Endpoint(端点)之间的关系

因为WebGoat是基于Spring MVC框架,这里介绍一下Spring MVC的处理请求方法,顺便学习一下框架, Spring Boot 框架中,Controller(控制器)、Mapping(映射)和 Endpoint(端点) 是关键组件

package org.owasp.webgoat.xss;

import org.owasp.webgoat.assignments.AssignmentEndpoint;
import org.owasp.webgoat.assignments.AssignmentHints;
import org.owasp.webgoat.assignments.AttackResult;
import org.owasp.webgoat.session.UserSessionData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.function.Predicate;
import java.util.regex.Pattern;


@RestController
@AssignmentHints(value = {"xss-reflected-5a-hint-1", "xss-reflected-5a-hint-2", "xss-reflected-5a-hint-3", "xss-reflected-5a-hint-4"})
public class CrossSiteScriptingLesson5a extends AssignmentEndpoint {

    public static final Predicate<String> XSS_PATTERN = Pattern.compile(
            ".*<script>(console\\.log|alert)\\(.*\\);?</script>.*"
            , Pattern.CASE_INSENSITIVE).asMatchPredicate();
    @Autowired
    UserSessionData userSessionData;

    @GetMapping("/CrossSiteScripting/attack5a")
    @ResponseBody
    public AttackResult completed(@RequestParam Integer QTY1,
                                  @RequestParam Integer QTY2, @RequestParam Integer QTY3,
                                  @RequestParam Integer QTY4, @RequestParam String field1,
                                  @RequestParam String field2) {

        if (XSS_PATTERN.test(field2)) {
            return failed(this).feedback("xss-reflected-5a-failed-wrong-field").build();
        }

        double totalSale = QTY1.intValue() * 69.99 + QTY2.intValue() * 27.99 + QTY3.intValue() * 1599.99 + QTY4.intValue() * 299.99;

        userSessionData.setValue("xss-reflected1-complete", "false");
        StringBuffer cart = new StringBuffer();
        cart.append("Thank you for shopping at WebGoat. <br />Your support is appreciated<hr />");
        cart.append("<p>We have charged credit card:" + field1 + "<br />");
        cart.append("                             ------------------- <br />");
        cart.append("                               $" + totalSale);

        //init state
        if (userSessionData.getValue("xss-reflected1-complete") == null) {
            userSessionData.setValue("xss-reflected1-complete", "false");
        }

        if (XSS_PATTERN.test(field1)) {
            userSessionData.setValue("xss-reflected-5a-complete", "true");
            if (field1.toLowerCase().contains("console.log")) {
                return success(this).feedback("xss-reflected-5a-success-console").output(cart.toString()).build();
            } else {
                return success(this).feedback("xss-reflected-5a-success-alert").output(cart.toString()).build();
            }
        } else {
            userSessionData.setValue("xss-reflected1-complete", "false");
            return failed(this)
                    .feedback("xss-reflected-5a-failure")
                    .output(cart.toString())
                    .build();
        }
    }
}

1.Controller(控制器)

定义:处理 HTTP 请求的组件,作为请求处理的入口类

特征:类级别注解 @RestController 或 @Controller,通常包含多个端点方法

解析:CrossSiteScriptingLesson5a 是 Controller ,组织相关端点,处理 /CrossSiteScripting 路径下的请求 ,一个 Controller 可包含多个端点

@RestController // ← Controller 标识
@AssignmentHints(...)
public class CrossSiteScriptingLesson5a extends AssignmentEndpoint { 
    // 类内部包含端点和业务逻辑
}

2.Mapping(映射)

定义:定义 URL 路径与处理方法的绑定规则
特征: 方法级别注解 @GetMapping, @PostMapping 等 ,指定请求路径和 HTTP 方法

解析:@GetMapping("/CrossSiteScripting/attack5a")Mapping 声明路由规则 - "GET 请求到 /CrossSiteScripting/attack5a 由 completed()方法处理" ,一个 Mapping 对应一个端点

@GetMapping("/CrossSiteScripting/attack5a") // ← Mapping 定义
@ResponseBody
public AttackResult completed(...) { ... }

3.Endpoint(端点)

定义:实际处理请求的业务逻辑单元(方法 + 映射)
特征: Mapping 注解修饰的方法 ,包含参数绑定、业务处理、响应生成

解析:completed() 方法 + @GetMapping 注解 = 完整端点 ,路径 /CrossSiteScripting/attack5a端点标识符 ,具体执行业务逻辑(XSS 检测、购物车计算等)

// 整个方法是 Endpoint
public AttackResult completed(@RequestParam Integer QTY1, ...) {
    // 1. 检查 field2 是否包含 XSS
    // 2. 计算购物车总价
    // 3. 构建响应 HTML
    // 4. 根据 field1 返回不同攻击结果
}

4.三者的关系图解

graph TB
A[Controller] --> B[Endpoint 1]
A --> C[Endpoint 2]
B --> D[Mapping]
B --> E[业务方法]
C --> F[Mapping]
C --> G[业务方法]

subgraph Endpoint 分解
D["@GetMapping(path)"] -.- E["method(params){...}"]
end

| 概念 | 示例 | | -------------- | --------------------------------------------- | | Controller | CrossSiteScriptingLesson5a 类 | | Mapping | @GetMapping("/CrossSiteScripting/attack5a") | | Endpoint | @GetMapping(...) + completed(...) | | 端点路径 | /CrossSiteScripting/attack5a |

5.工作流程示例

sequenceDiagram
    participant Client as 客户端
    participant Dispatcher as Spring DispatcherServlet
    participant Controller as CrossSiteScriptingLesson5a
    participant Endpoint as completed()
    
    Client->>Dispatcher: GET /CrossSiteScripting/attack5a
    Dispatcher->>Controller: 查找匹配Controller
    Controller->>Endpoint: 根据Mapping路由到方法
    Endpoint->>Endpoint: 执行XSS检测和业务逻辑
    Endpoint->>Controller: 返回AttackResult
    Controller->>Dispatcher: 返回结果
    Dispatcher->>Client: 发送HTTP响应

二、复现流程

2.0.敏感信息泄露

2.0.0.介绍

在代码审计中,敏感信息泄露指因代码逻辑缺陷或不当配置,导致用户隐私数据、系统密钥、认证凭证等敏感信息被未授权访问或公开暴露的安全隐患。代码审计需重点扫描硬编码敏感字段、明文存储路径、未脱敏日志输出等风险点,通过引入环境变量替代硬编码、采用密钥管理服务加密存储凭证、对日志进行正则脱敏处理等方式规避风险。
1. 源代码中硬编码的数据库连接字符串、API 密钥等凭证未加密存储
2. 配置文件以明文形式包含用户密码、支付密钥等敏感字段
3. 日志系统未做脱敏处理,将用户身份证号、银行卡信息等写入可访问日志
★4. 前端代码泄露后端接口密钥或加密算法私钥
5.错误处理机制不当,在异常返回中暴露数据库表结构、服务器路径等敏感信息

2.0.1.代码审计

老规矩我

View on GitHub
GitHub Stars162
CategoryDevelopment
Updated24d ago
Forks13

Security Score

80/100

Audited on Mar 5, 2026

No findings