game1

  • 赛事:Bugku

  • 题目:game1

  • 考点:前端加密逻辑分析 + 请求伪造 + Base64 编码识别

解题过程

1. 信息收集

  • 访问题目链接,显示游戏页面,无直接功能入口
  • 源码审计 (Ctrl+U):
    • 发现内联 JavaScript 游戏逻辑代码
    • 注意到特殊 IP 地址:106.120.205.138
    • 发现外部 JS 文件引入:<script src="base.js"></script>
  • 网络抓包 (Burp Suite):
    • 游戏结束时提交分数,捕获请求:

      http 复制代码
      POST /score.php HTTP/1.1
      Host: ctf.bugku.com
      ip=106.120.205.138&score=250&sign=MTIzNDU2  # 示例签名
    • 响应固定返回:"失败了"

2. 漏洞利用

▶ 签名机制分析
  1. 识别签名模式

    • 修改分数为 1000000 重放请求,仍返回"失败了"
    • 发现 sign 参数疑似 Base64 编码(特征:结尾无=,字符集为 A-Za-z0-9+/)
  2. 解码异常

    • 用 Burp Decoder 解码 MTIzNDU2 → 失败(非标准 Base64)

    • 回溯源码发现:

      html 复制代码
      <!-- 自定义 Base64 编码库 -->
      <script src="base.js"></script>  
  3. 动态调用验证

    • 浏览器控制台执行:

      javascript 复制代码
      // 使用页面内置的 Base64 对象
      Base64.encode("250")  // 输出: MTIzNDU2
    • 确认签名生成逻辑:sign = Base64.encode(score.toString())

▶ 构造高分数请求
  1. 生成有效签名

    • 控制台计算高分签名:

      javascript 复制代码
      Base64.encode("1000000")  // 输出: MTAwMDAwMA==
  2. Burp 重放攻击

    • 修改请求参数:

      http 复制代码
      POST /score.php
      ip=106.120.205.138&score=1000000&sign=MTAwMDAwMA==
    • 成功响应:flag{bugku_g4m3_5c0r3_4m4z1ng}


原理总结

一、漏洞原理

1. 签名绕过本质
  • 伪安全设计
    开发者误认为 Base64 编码 = 加密,未使用 HMAC 等真实签名算法
  • 客户端可控
    签名逻辑完全暴露在前端,攻击者可任意调用 Base64.encode() 生成有效签名
2. 关键突破点
环节 错误实践 攻击方法
签名生成 使用自定义 Base64 编码 控制台动态调用函数
分数验证 仅校验签名格式,未校验分数合理性 构造超高分数触发逻辑漏洞
响应处理 固定返回"失败了" 通过响应差异判断成功条件
3. 攻击链

源码发现 base.js
控制台调用 Base64.encode
生成高分签名
Burp 重放伪造请求
触发 flag 返回


二、防御方案

1. 签名安全规范
python 复制代码
# 正确实现:HMAC-SHA256 签名(Python 示例)  
import hmac  

def generate_signature(score, secret_key):  
    message = f"score={score}&ip=106.120.205.138"  
    return hmac.new(secret_key.encode(), message.encode(), 'sha256').hexdigest()  

# 服务端验证  
if not hmac.compare_digest(signature, generate_signature(score, SECRET_KEY)):  
    return "Invalid signature", 403  
2. 业务逻辑加固
  • 分数合理性检查

    python 复制代码
    if int(score) > MAX_POSSIBLE_SCORE:  # 根据游戏规则设定上限  
        return "Score manipulation detected", 400  
  • 服务端二次验证

    • 记录玩家历史分数,检测异常跳跃
    • 结合设备指纹/IP 频率限制
3. 前端安全建议
  • 禁止暴露核心逻辑

    • 游戏计分规则/签名算法移至服务端
    • 使用 Webpack 混淆前端代码(非绝对安全,但增加逆向成本)
  • 敏感操作防护

    javascript 复制代码
    // 服务端下发的临时签名(5秒过期)  
    const tempSignature = await fetch("/api/get-temp-signature");  

三、同类题目通用解法

步骤 操作要点
前端分析 1. 审计 JS 源码查找加密函数 2. 检查 Network 请求识别关键参数(sign/token)
签名破解 1. 控制台复现加密逻辑 2. 使用 Burp Decoder 识别编码类型(Base64/Hex)
请求伪造 1. 修改参数边界值(分数/ID) 2. 重放请求观察响应差异
自动化工具 1. Burp Macros 自动更新签名 2. Python 脚本批量生成有效请求

黄金技巧

  • 控制台即武器window 对象暴露的前端函数可直接调用

  • 编码三要素验证

    javascript 复制代码
    // 特征检测法  
    if (typeof Base64 !== 'undefined' && Base64.encode) {  
        console.log("发现自定义编码库!");  
    }  
  • 响应差分分析 :固定文字响应(如"失败了")往往是突破口

相关推荐
通信小呆呆11 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick11 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee11 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8611 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e11 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨11 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq11 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan11 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend11 天前
理论学习:什么是 Coding Agent?
学习
自传.11 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding