三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Juice-Shop靶场四星挑战:Web安全实战解析

Juice-Shop靶场四星挑战:Web安全实战解析

1. Juice-Shop靶场四星挑战概述

Juice-Shop是一个基于Node.js和Express构建的现代化Web应用安全靶场,专门设计用于学习Web应用安全测试技术。这个开源项目模拟了电子商务网站的各种功能,同时故意植入了超过100种不同类型的安全漏洞。四星挑战代表其中难度较高的任务类别,通常需要综合运用多种渗透测试技术才能完成。

我第一次接触Juice-Shop是在准备OSCP认证考试期间,当时需要找一个能模拟真实Web应用漏洞的环境进行练习。相比传统的DVWA或Pikachu靶场,Juice-Shop的特别之处在于它采用了Angular前端框架和RESTful API架构,更贴近现代Web开发实践。靶场中的挑战按难度分为1-6星,四星挑战通常涉及需要多步骤利用的复杂漏洞链。

2. 环境准备与部署

2.1 选择部署方式

Juice-Shop提供多种部署选项,最推荐的是Docker方式:

docker pull bkimminich/juice-shop docker run -d -p 3000:3000 bkimminich/juice-shop

对于Windows 11用户,如果遇到"Docker Desktop failed to start because virtualization support wasn't detected"错误,需要:

  1. 进入BIOS启用Intel VT-x/AMD-V虚拟化支持
  2. 确保Windows功能中启用了Hyper-V和Windows Hypervisor Platform
  3. 以管理员身份运行命令:bcdedit /set hypervisorlaunchtype auto

提示:Kali Linux用户可以直接使用预装的Docker,但建议先配置国内镜像源加速下载:

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

2.2 访问与初始配置

成功启动后,通过浏览器访问http://localhost:3000即可看到Juice-Shop的首页。首次使用时建议:

  1. 点击右上角菜单选择"Administration"
  2. 在"Configuration"中关闭"Show CTF flag codes in console"(避免挑战答案直接显示)
  3. 重置数据库确保所有挑战处于初始状态

3. 四星挑战技术解析

3.1 典型四星挑战类型

根据我的实战经验,四星挑战通常涉及以下技术点:

挑战类型技术要点所需工具
复杂SQL注入时间盲注、二阶注入、非常规过滤绕过Burp Suite, sqlmap
高级XSSDOM-based XSS、CSP绕过、AngularJS沙箱逃逸浏览器开发者工具
业务逻辑漏洞价格操纵、库存欺诈、特权提升Burp Repeater
API滥用JWT篡改、OAuth漏洞、GraphQL注入Postman, jwt.io
文件相关漏洞压缩包炸弹、XXE、恶意文件上传Python脚本, hex编辑器

3.2 实战案例:购物车价格篡改

这是一个典型的四星挑战,要求以低于标价的价格购买商品。常规尝试修改前端价格参数会被服务器验证拒绝。正确解法需要:

  1. 使用Burp Suite拦截"POST /api/BasketItems"请求
  2. 观察JSON结构中的产品ID和数量参数
  3. 添加"coupon"字段并尝试常见优惠码(如"WMNSDY")
  4. 当发现无效时,改为操纵"totalPrice"字段的同时修改"couponData"中的折扣计算逻辑
  5. 最终需要在单次请求中同时完成价格覆盖和优惠码验证绕过
POST /api/BasketItems HTTP/1.1 { "ProductId": 12, "quantity": 1, "totalPrice": 0.01, "couponData": { "discount": 99.99, "valid": true } }

注意:现代电商系统应在前端展示价格外,后端必须重新计算并验证所有交易金额。Juice-Shop故意保留此漏洞用于教学。

3.3 JWT令牌伪造挑战

另一个四星挑战要求以管理员身份登录。常规爆破无效后发现:

  1. 应用使用JWT进行身份验证
  2. 通过/login返回的token解码发现使用弱密钥("secretKey")
  3. 使用jwt.io工具重新签名令牌,将"role":"customer"改为"admin"
  4. 但直接修改会被拒绝,需要同时满足:
    • 修改alg为"none"绕过签名验证
    • 添加"typ":"JWT"头
    • 精确控制时间戳在有效期内
import jwt fake_token = jwt.encode( {"data":{"role":"admin"},"iat":1625097600,"exp":1625184000}, key="", algorithm="none", headers={"typ":"JWT"} )

4. 疑难问题排查指南

4.1 常见错误与解决方案

问题现象可能原因解决方案
Docker启动失败端口冲突改用-p 3001:3000映射不同端口
挑战不触发浏览器缓存使用隐身模式或清除Application Storage
API返回403CSRF保护在请求头中添加X-Requested-With: XMLHttpRequest
文件上传失败文件名过滤使用双扩展名如"test.png.php"
数据库重置不当操作执行docker restart juice-shop

4.2 调试技巧

  1. 开启开发者工具的网络日志保持功能,防止重定向丢失请求
  2. 使用localStorage.setItem('debug',true)开启Juice-Shop的调试模式
  3. 对于Angular应用,在控制台通过angular.element(document).scope()访问作用域变量
  4. 监控WebSocket通信可能泄露敏感信息

5. 安全防护建议

完成挑战后,针对发现的漏洞应实施以下防护措施:

  1. 输入验证:

    • 对所有API参数实施严格模式验证
    • 使用正则表达式白名单而非黑名单
  2. 身份认证:

    • JWT使用强密钥和适当算法(如RS256)
    • 实现令牌吊销机制
  3. 业务逻辑:

    • 关键操作(如支付)使用后端最终计算
    • 实施库存、价格等核心数据的版本控制
  4. 防御深度:

    • 启用CSP限制脚本来源
    • 配置WAF规则拦截常见攻击模式

我在实际渗透测试项目中,发现许多企业系统存在与Juice-Shop类似的漏洞组合。例如某电商平台就因为未验证价格参数导致可批量0元购商品,这与我们解决的购物车挑战如出一辙。建议开发者在实现关键业务流时,采用"不信任任何客户端输入"的原则,所有决策都应基于服务端状态重新验证。

← 返回列表