SillyCTF2 wp
字数 5558
更新时间 2026-04-12 12:27:19

SillyCTF2 Writeup 教学文档

概述

本文档基于提供的链接内容,详细解析SillyCTF2比赛的解题思路和技巧,涵盖密码学、Web安全、隐写术、逆向工程等多个领域。本教学文档旨在通过实例讲解,帮助读者掌握CTF比赛中的常见题型和解题方法。

题目解析与教学

1. Esoteric 类别

1.1 Pibble

  • 题型:Misc(杂项)
  • 解题思路:题目页面包含两张可点击图片,其中一张图片(Untitled(1).png)中直接写有Flag。
  • FlagSillyCTF{w@$h_my_b3ll@y}

1.2 Simple Ciphers

  • 题型:密码学(古典编码)
  • 解题思路:题目给出的密文是Base64编码,直接使用Base64解码工具或在线网站解码即可。
  • FlagSillyCTF{wow_that_was_a_simple_way_to_encode_text}

1.3 Simple Ciphers 2

  • 题型:密码学(古典编码)
  • 解题思路:题目提示为Base16编码,使用Base16(Hex)解码即可。
  • FlagsillyCTF{pretty_simple_cipher_I_think}

2. Brainrot Apocalypse 类别

2.1 Quick Maths

  • 题型:Misc
  • 解题思路:简单的数学计算题,计算 9 + 10 的结果。注意题目要求提交时需要包含Flag格式。
  • FlagSillyCTF{19}

2.2 Only in Ohio

  • 题型:Misc / 编码
  • 解题思路
    1. 题目提供的TXT文件看似是字符画,但最后两行混有Brainfuck代码。
    2. 提取文本中所有的Brainfuck符号(><+-.,[])。
    3. 将提取出的符号作为有效的Brainfuck程序运行,其输出即为Flag。
  • FlagsillyCTF{toilet_in_ohio}

2.3 Six to the Seven

  • 题型:Misc / 隐写
  • 解题思路
    1. 题目提供一个名为sixtotheseven.pptx的PPTX文件。PPTX文件本质上是ZIP压缩包。
    2. 将PPTX文件后缀改为.zip后解压,或使用归档工具直接打开。
    3. 在解压后的ppt/slides/目录下,查看所有slide*.xml文件。
    4. 观察发现,每张幻灯片中只包含三种图片之一:image2.png(内容为数字6)、image3.png(内容为数字7)、image4.jpg(空白分隔图)。
    5. image4.jpg每隔9张幻灯片出现一次,因此可以推断:每8张包含6或7的幻灯片为一组,每组之后跟随一张空白图作为分隔符。
    6. 将每组8张幻灯片中的图片内容进行二进制映射:6 -> 0, 7 -> 1。
    7. 将每组得到的8位二进制数转换为ASCII字符,拼接后即可得到Flag。
  • FlagsillyCTF{haha_six_seven}

2.4 Sussiest Challenge

  • 题型:OSINT(开源情报搜集)
  • 解题思路
    1. 题目要求查找Amogus Wiki中角色“Amogus”的生日。
    2. 访问Amogus Wiki页面:https://amogus.fandom.com/wiki/Amogus
    3. 在页面正文中查找,或通过页面搜索功能找到“Birthday”字段。根据文档,该信息位于页面正文第263-265行,内容为“January 1st”。
  • FlagsillyCTF{january_1}

2.5 Hit Me

  • 题型:Web安全
  • 解题思路:这是一道涉及前端源码泄露、开发模式漏洞和JWT密钥硬编码的题目。
    • 信息收集:打开题目提供的在线Blackjack站点,检查浏览器开发者工具(Console/Network)。发现页面加载了Vite开发模式的客户端脚本(@vite/client),表明网站运行在开发环境下,源码可能未打包和混淆。
    • 前端源码泄露:通过fetch直接请求前端源码文件,如/src/main.tsx/src/App.tsx/src/api/client.ts等,成功获取源代码。
    • 分析API:从client.ts中获取后端API地址和关键接口,包括/api/shop/buy-flag
    • 发现JWT密钥:在分析认证逻辑时,发现JWT Token使用HS256算法,且密钥硬编码在代码中为‘admin’。这允许攻击者伪造任意用户的Token。
    • 服务端源码泄露:由于运行在Vite开发模式,前端可以尝试通过/@fs机制访问服务器端的真实文件。通过构造请求读取/server/server.js,成功获取完整的后端源代码。
    • 获取Flag:在后端源码server.js中,直接查看/api/shop/buy-flag路由的实现,发现Flag硬编码在代码中:const FLAG = 'sillyCTF{brainrot_god}';
  • FlagsillyCTF{brainrot_god}

3. Coding Korner 类别

3.1 The End of Linux

  • 题型:Web安全 / 逻辑漏洞
  • 解题思路
    1. 根据题目名和提示“Y2K all over again...”,联想到Unix系统的2038年问题(32位有符号整数时间戳溢出)。
    2. 打开站点,使用浏览器开发者工具监控网络请求。点击页面按钮后,发现向/api/status发送了一个POST请求,请求体中包含一个timestamp字段。
    3. 尝试修改请求中的timestamp值为32位有符号整数能表示的最大值+1,即2147483648,然后重新发送请求。
    4. 后端检测到时间戳溢出,返回包含Flag的响应。
  • Flagsillyctf{maybe_n0t_the_3nd}

3.2 Coding Horror

  • 题型:Web安全 / 暴力破解
  • 解题思路
    1. 题目登录界面存在一个不安全的“两次尝试”机制。根据文档中的密码表,用户名固定为admin
    2. 攻击流程:使用密码字典中的每个密码进行尝试。可以先输入一个错误密码消耗第一次机会,再输入待测试的密码。如果第二次尝试的密码正确,则登录成功并返回Flag。
    3. 通过脚本自动化这个过程,遍历提供的密码字典,最终找到正确密码。
  • FlagsillyCTF{th3_w0rst_bru73f0rc3_pr0t3ct10n_3v3r}

4. Are You Entertained 类别

4.1 Hidden Mickey

  • 题型:Misc / 趣味知识
  • 解题思路
    1. 题目图片展示了一个水族箱底部用石头摆出的“隐藏米奇”(Hidden Mickey)图案。
    2. 通过资料查找(如AllEars网站或迪士尼官方信息)可知,该场景位于EPCOT主题公园的“The Seas with Nemo & Friends”游乐设施结束后的大型水族馆(SeaBase)区域。
  • FlagsillyCTF{the_seas_with_nemo_&_friends}

5. South Park 类别

5.1 Cartman's Business Venture

  • 题型:Misc / 文件隐写
  • 解题思路
    1. .docx文件本质上是ZIP压缩包。将文件后缀改为.zip后解压。
    2. 在解压后的文件中,找到customXml目录下的item1.xml文件。
    3. 用文本编辑器打开item1.xml,在XML注释中发现一段Base64编码的字符串。
    4. 对该字符串进行Base64解码,得到Flag。
  • FlagSillyCTF{cartman_homework_solutions}

6. Krazy Crypto 类别

6.1 Excellent Crypto Challenge

  • 题型:密码学(椭圆曲线)
  • 解题思路
    1. 题目给出了椭圆曲线参数、基点G、公钥Q、临时点R以及两段密文cipher_1cipher_2
    2. 核心漏洞:用于生成临时点R的随机数k(nonce)过小(k = 247439),可以暴力破解。
    3. 攻击步骤
      a. 在椭圆曲线上计算R = k * G,通过循环递增k,直到找到与题目给出的R点相等的点,从而得到正确的k值。
      b. 计算共享密钥S = k * Q
      c. 取S点的x坐标,计算其SHA256哈希值作为密钥key
      d. 使用key与密文cipher_1cipher_2进行逐字节异或解密。
    4. 其中一段明文为提示信息,另一段明文即为Flag。
  • FlagsillyCTF{Can't_Be_Reusing_NONCE}

6.2 Really Small Adversity

  • 题型:密码学(RSA)
  • 解题思路
    1. 题目给出了一个非常小的RSA公钥(n, e)和密文c。
    2. 由于模数n极小(0xFFFFFFFFFFFE5FFFFFFFFFFC25),可以直接分解为两个质数p和q。
    3. 解密步骤
      a. 分解n,得到p = 4503599627370449q = 4503599627370517
      b. 计算欧拉函数 φ(n) = (p-1)*(q-1)
      c. 已知公钥指数e = 65537,计算私钥指数d = e^(-1) mod φ(n)
      d. 计算明文m = c^d mod n,将得到的整数转换为字节或字符串。
  • FlagsillyCTF{R$A_FunNy_HA!}

6.3 Can‘t have a salad without Lattice

  • 题型:密码学(格密码 / 后量子密码)
  • 解题思路
    1. 题目提供了一个Wolfram CDF文件(lattice.cdf)。将其作为文本文件打开,在文件末尾发现密文flag_enc和43组(u, v)向量数据。
    2. 分析数据
      • 所有向量元素的值都在0到3328之间,暗示模数q = 3329
      • 5种不同的u向量循环出现,每个u对应一组v向量。对于每个固定的u,其对应的v向量的每个坐标只有两个可能值(例如,1274或2939)。
      • 观察发现,每对值(a, b)满足b = (a + 1665) mod 3329,其中1665 = (q+1)//2。这表明每个坐标用“是否加上1665”来编码一个比特位。
    3. 比特提取规则
      • 对于每个坐标,确定其基准值(base)和偏移值(shifted = (base + 1665) mod 3329)。
      • 如果坐标值等于基准值,则对应比特为1;如果等于偏移值,则对应比特为0(根据题目具体实现,规则也可能相反,需根据数据验证)。
    4. 密钥恢复
      • 从43个块中,每个块提取3个比特,共129比特。前128比特组成一个AES密钥。
      • 提取出的密钥为:encryptionkey123
    5. 解密Flag
      • flag_enc是Base64编码的字符串,解码后得到48字节数据。
      • 前16字节是AES-CBC模式的初始向量(IV),后32字节是密文。
      • 使用恢复出的密钥encryptionkey123和IV,用AES-CBC模式解密,即可得到Flag明文。

7. Welcome to SillyCTF 2 类别

7.1 Hello Silly World

  • 题型:Misc(签到题)
  • FlagsillyCTF{welcome_to_silly_ctf_2!}

7.2 CREATE A MEME!

  • 题型:Misc
  • 解题思路:按照题目要求,上传一张猫的meme图片即可。
  • FlagsillyCTF{Mememememmememememememmememememem67}

8. Listen Up 类别

8.1 Musical Genius

  • 题型:Misc / 音频隐写
  • 解题思路
    1. 题目提供一个WAV音频文件Groovy_Beat.wav
    2. 使用音频分析工具(如Audacity、Sonic Visualiser)或编写Python脚本(使用matplotliblibrosa库)生成该音频的频谱图(Spectrogram)。
    3. 在生成的频谱图中,仔细观察特定频率范围(例如0-3500 Hz)和时间段,可能会发现以图像形式隐藏的Flag文本。
  • FlagsillyCTF{A_horrible_beat}

总结与技巧

  1. 文件格式:熟悉常见文件格式的内部结构(如ZIP、PPTX、DOCX),它们常被用于隐藏信息。
  2. 开发环境:生产环境中遗留的开发模式(如Vite dev server)、源码映射或未打包的源码是严重的安全漏洞,可能导致关键逻辑和密钥泄露。
  3. 时间戳与整数溢出:注意与时间、数值范围相关的逻辑漏洞,如2038年问题、整数溢出等。
  4. 密码学
    • 弱随机数:在椭圆曲线密码学中,重复或可预测的随机数(nonce)会完全破坏安全性。
    • 小参数攻击:在RSA中,过小的模数n可以被快速分解。
    • 编码识别:熟练掌握Base64、Base16、Brainfuck等编码的特征和解码方法。
  5. 信息隐写:Flag可能隐藏在图片的像素、音频的频谱、文件的注释或元数据中。
  6. OSINT:善于利用搜索引擎和公开资料(如Wiki、文档)查找特定信息。
相似文章
相似文章
 全屏