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
解决方案:
- 直接点击submit query按钮会提示来自相同host
- 修改请求的host头可以获取flag
- 更符合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限制
解决方案:
- 修改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应用常见的安全漏洞及利用方法,强调了全面防御的重要性,不应仅依赖单一安全措施。