webgoat通关过程系列(四)
字数 1613 2025-08-18 11:36:53

WebGoat通关教学:Server-side Request Forgery与Client-side安全挑战

1. Cross-Site Request Forgeries (CSRF)

1-3 基础CSRF攻击

目标:绕过同源策略获取flag

解决方案

  1. 直接点击submit query按钮会提示来自相同host
  2. 修改请求的host头可以获取flag
  3. 更符合CSRF原理的方法:
    • 创建一个恶意HTML文件模拟外站
    • 复制提交表单的HTML代码:
    <html>
    <body>
    <form accept-charset="UNKNOWN" id="basic-csrf-get" method="POST" 
          name="form1" target="_blank" successcallback="" 
          action="http://127.0.0.1:8081/WebGoat/csrf/basic-get-flag">
      <input name="csrf" type="hidden" value="false">
      <input type="submit" name="submit">
    </form>
    </body>
    </html>
    
    • 在同一浏览器打开此HTML文件并点击提交按钮

1-4 CSRF攻击进阶

解决方案

  • 同1-3,可以修改host头或构造恶意HTML表单提交

1-7 JSON格式CSRF攻击

特点:JSON提交有CORS限制

解决方案

  1. 修改host头
  2. 将Content-Type改为text/plain绕过CORS检查

1-8 用户名相关CSRF

解决方案

  1. 注册新用户,用户名为当前用户名前加csrf-前缀
  2. 在同一浏览器登录新用户
  3. 点击"solved"按钮完成挑战

2. Server-Side Request Forgery (SSRF)

2-2 服务器资源访问

解决方案

  • 直接修改请求中的图片名称参数获取不同服务器资源

2-3 外部资源请求

解决方案

  • 修改请求参数为外部地址,服务器将返回该地址的内容

3. Client-side安全挑战

3.1 Bypass front-end restrictions

特点:前端使用正则表达式限制输入

解决方案

  1. 使用代理工具拦截请求
  2. 直接修改被前端限制的参数值
  3. 提交绕过前端验证的请求

3.2 Client side filtering

2-2 查看隐藏数据

目标:获取Neville Bartholomew的薪水

解决方案

  • 查看页面源代码,薪水信息直接存在于源码中

2-3 发现checkout code

解决方案

  1. 尝试常见code:webgoat, owasp, owasp-webgoat
  2. 观察请求响应,发现返回不同折扣
  3. 修改请求去除code参数,返回所有code列表
  4. 从列表中找到所需code

3.3 HTML tampering

3-2 修改交易数据

解决方案

  • 直接拦截请求并修改交易金额数字

4. Challenges挑战

4.1 Admin lost password

目标:找到admin密码

解决方案

  1. 尝试SQL注入无效
  2. 检查前端代码无果
  3. 下载网站logo图片
  4. 用文本编辑器打开图片,发现密码隐藏在图片元数据中

4.2 Without password

解决方案

  • 使用SQL注入技术绕过密码验证

4.3 Admin password reset

特点:传统修改host方法失效

解决方案

  1. 发现.git源码泄露漏洞
  2. 访问WebGoat/challenge/7/.git下载.git文件
  3. 分析源码发现token生成使用固定种子
  4. 利用伪随机数特性,使用相同种子生成admin的token

4.4 Without account

解决方案

  • 将请求方法从GET改为HEAD
  • 原理:Spring Boot的@GetMapping注解不限制HEAD请求

关键知识点总结

  1. CSRF防御绕过

    • 修改Host头
    • 构造恶意表单
    • 处理JSON的CORS限制
  2. SSRF利用

    • 通过参数修改访问内部资源
    • 构造请求访问外部资源
  3. 客户端安全

    • 前端验证可轻易绕过
    • 敏感数据不应仅依赖前端隐藏
    • 交易关键数据需服务端验证
  4. 密码恢复漏洞

    • 信息可能隐藏在非传统位置(如图片)
    • 源码泄露导致安全风险
    • 伪随机数的安全问题
  5. HTTP方法滥用

    • 注解配置不当时,HEAD方法可能绕过安全控制

这些练习展示了Web应用常见的安全漏洞及利用方法,强调了全面防御的重要性,不应仅依赖单一安全措施。

WebGoat通关教学:Server-side Request Forgery与Client-side安全挑战 1. Cross-Site Request Forgeries (CSRF) 1-3 基础CSRF攻击 目标 :绕过同源策略获取flag 解决方案 : 直接点击submit query按钮会提示来自相同host 修改请求的host头可以获取flag 更符合CSRF原理的方法: 创建一个恶意HTML文件模拟外站 复制提交表单的HTML代码: 在同一浏览器打开此HTML文件并点击提交按钮 1-4 CSRF攻击进阶 解决方案 : 同1-3,可以修改host头或构造恶意HTML表单提交 1-7 JSON格式CSRF攻击 特点 :JSON提交有CORS限制 解决方案 : 修改host头 将Content-Type改为 text/plain 绕过CORS检查 1-8 用户名相关CSRF 解决方案 : 注册新用户,用户名为当前用户名前加 csrf- 前缀 在同一浏览器登录新用户 点击"solved"按钮完成挑战 2. Server-Side Request Forgery (SSRF) 2-2 服务器资源访问 解决方案 : 直接修改请求中的图片名称参数获取不同服务器资源 2-3 外部资源请求 解决方案 : 修改请求参数为外部地址,服务器将返回该地址的内容 3. Client-side安全挑战 3.1 Bypass front-end restrictions 特点 :前端使用正则表达式限制输入 解决方案 : 使用代理工具拦截请求 直接修改被前端限制的参数值 提交绕过前端验证的请求 3.2 Client side filtering 2-2 查看隐藏数据 目标 :获取Neville Bartholomew的薪水 解决方案 : 查看页面源代码,薪水信息直接存在于源码中 2-3 发现checkout code 解决方案 : 尝试常见code:webgoat, owasp, owasp-webgoat 观察请求响应,发现返回不同折扣 修改请求去除code参数,返回所有code列表 从列表中找到所需code 3.3 HTML tampering 3-2 修改交易数据 解决方案 : 直接拦截请求并修改交易金额数字 4. Challenges挑战 4.1 Admin lost password 目标 :找到admin密码 解决方案 : 尝试SQL注入无效 检查前端代码无果 下载网站logo图片 用文本编辑器打开图片,发现密码隐藏在图片元数据中 4.2 Without password 解决方案 : 使用SQL注入技术绕过密码验证 4.3 Admin password reset 特点 :传统修改host方法失效 解决方案 : 发现.git源码泄露漏洞 访问 WebGoat/challenge/7/.git 下载.git文件 分析源码发现token生成使用固定种子 利用伪随机数特性,使用相同种子生成admin的token 4.4 Without account 解决方案 : 将请求方法从GET改为HEAD 原理:Spring Boot的@GetMapping注解不限制HEAD请求 关键知识点总结 CSRF防御绕过 : 修改Host头 构造恶意表单 处理JSON的CORS限制 SSRF利用 : 通过参数修改访问内部资源 构造请求访问外部资源 客户端安全 : 前端验证可轻易绕过 敏感数据不应仅依赖前端隐藏 交易关键数据需服务端验证 密码恢复漏洞 : 信息可能隐藏在非传统位置(如图片) 源码泄露导致安全风险 伪随机数的安全问题 HTTP方法滥用 : 注解配置不当时,HEAD方法可能绕过安全控制 这些练习展示了Web应用常见的安全漏洞及利用方法,强调了全面防御的重要性,不应仅依赖单一安全措施。