RCTF 部分题目wp
字数 1947 2025-11-21 13:18:03
RCTF 题目综合教学文档
一、Wanna Feel Love 题目解析
1.1 Challenge 1:邮件隐写分析
技术要点
- 文件格式:EML格式邮件文件分析
- 编码方式识别:Base64、Quoted-Printable等邮件编码
- 多部分邮件解析:递归遍历MIME结构
实现代码分析
# 核心解码函数
def decode_part(part):
# 获取传输编码类型
cte = (part.get("Content-Transfer-Encoding") or "").lower()
# 根据编码类型选择解码方式
if "base64" in cte:
decoded_bytes = base64.b64decode(raw)
elif "quoted-printable" in cte:
decoded_bytes = quopri.decodestring(raw)
# 字符集处理
charset = part.get_content_charset() or "utf-8"
关键发现
- 邮件正文中隐藏的垃圾邮件文本包含重要信息
- 通过分析邮件各部分内容,提取隐藏的"低语"信息
1.2 Challenge 2:XM音频文件隐写
技术原理
- XM格式:Extended Module音乐文件格式
- 峰值编码:通过音频波形峰值传递二进制信息
- 采样率转换:将音乐数据转换为可分析的波形
解码步骤
- 文件转换:使用OpenMPT/MilkyTracker将XM转为WAV
- 参数设置:确定采样率、位深度等关键参数
- 峰值检测:滑动窗口分析波形绝对值最大值
- 比特提取:阈值判断生成二进制序列
核心算法
# 峰值检测算法示意
samples_per_bit = 1000 # 每个bit对应的采样数
threshold_ratio = 0.7 # 峰值阈值比例
for i in range(0, len(samples), samples_per_bit):
window = samples[i:i+samples_per_bit]
max_val = max(abs(window))
if max_val > threshold_ratio:
bit_stream.append('1')
else:
bit_stream.append('0')
解码结果
隐藏信息:"I Feel Fantastic heyheyhey"
1.3 Challenge 3:YouTube视频溯源
OSINT技术要点
- 视频ID识别:rLy-AwdCOmI
- 时间线重建:上传日期2009-04-15
- 上传者确认:Creepyblog账号
验证方法
- 多源交叉验证(Wiki、存档站、考据文章)
- Internet Archive历史记录查询
- 相关社区讨论分析
1.4 Challenge 4:数字商品溯源
关键信息
- 购买链接:http://www.androidworld.com/prod68.htm
- 发件人:Android World / Chris Willis
- 创作年份:2004年(非上传年份)
验证依据
- 官方网站产品页面信息
- 音乐数据库元数据(MusicBrainz)
- 实际购买者的详细记录
1.5 Challenge 5:数字墓碑查找
技术路径
- 创作者确认:John L. Bergeron
- 死亡信息:2005年7月22日,Vermont州
- 墓地定位:Resurrection Park Cemetery
最终结果
数字墓碑URL:https://www.findagrave.com/memorial/63520325/john_louis-bergeron
二、Signin题目技术分析
2.1 解题方法
- 进程监控:直接抓包分析进程通信
- Flag提取:从进程内存或通信数据中获取
三、Shadows of Asgard流量分析
3.1 C2通信识别
网络特征
- 服务端口:10111
- 通信协议:HTTP伪装
- IP地址:106.52.166.133
初始化流程分析
{
"agentId": "vf3d665af4a0ebc4",
"aesKey": "WzUsMTM5LDI1NSwuLi5d",
"aesIV": "WzEyNCw4MiwuLi5d",
"data": "N2M3N2ZlN2ExYTdhZGMxY2E3MmZhMzY4MzgxMjUxMjQ5ZDY..."
}
3.2 AES加解密实现
密钥恢复算法
import base64, json, ast
from Crypto.Cipher import AES
# 密钥解析
aes_key_str = base64.b64decode(body["aesKey"]).decode()
key_list = ast.literal_eval(aes_key_str)
key = bytes(key_list) # 32字节AES-256密钥
数据解密流程
# Base64解码
data_b64 = body["data"]
data_hex_ascii = base64.b64decode(data_b64)
cipher_bytes = bytes.fromhex(data_hex_ascii.decode())
# AES解密
cipher = AES.new(key, AES.MODE_CBC, iv)
plain = cipher.decrypt(cipher_bytes)
3.3 PNG隐写技术
隐写结构分析
- PNG Chunk:tEXt类型chunk隐藏数据
- 数据格式:Keyword + Base64编码的加密数据
- 解密链:Base64 → Hex ASCII → AES解密 → JSON解析
隐写数据示例
tEXt chunk数据:Comment\x00ZDRmNGZhMTU1MTU1YzI4NTM5NmU2NDNiMGM4YzlhMDE2ODdjZjFlMzc1MmZj.
3.4 命令执行分析
发现的命令序列
pwd- 当前目录查询(taskId: c0c6125e)drives- 磁盘信息收集whoami- 用户身份确认- 文件上传操作
关键信息提取
- C盘创建时间:2018-09-14 23:09:26
- 代理进程路径:
C:\Users\dell\Desktop\Microsoft VS Code\Code.exe
3.5 Flag获取过程
文件外传分析
{
"outputChannel": "o-2ggeq7qpt2u",
"taskId": "shell-upload-1763017722153",
"fileId": "dd45c631-ec19-40b1-aa1b-e3dea35d21ae",
"filePath": "C:\Users\dell\Desktop\Microsoft VS Code\fllllag.txt",
"fileData": "UkNURnt0aGV5IGFsd2F5cyBzYXkgUmF2ZW4gaXMgaW5hdXNwaWNpb3VzfQ=="
}
Flag解码
import base64
encoded_data = "UkNURnt0aGV5IGFsd2F5cyBzYXkgUmF2ZW4gaXMgaW5hdXNwaWNpb3VzfQ=="
flag = base64.b64decode(encoded_data).decode()
# 结果:RCTF{they always say Raven is inauspicious}
四、Chaos题目分析
4.1 解题方法
- 终端执行:直接运行获得flag
- 相对简单的签到类题目
五、综合技术要点总结
5.1 关键技能要求
- 文件格式分析:EML、XM、PNG等格式深入理解
- 加密算法应用:AES-CBC模式加解密实战
- 网络流量分析:Wireshark高级使用技巧
- 隐写技术识别:多媒介隐写方案识别与破解
- OSINT调查:开源情报收集与验证
5.2 工具链推荐
- 音频处理:OpenMPT、MilkyTracker
- 流量分析:Wireshark
- 加解密:Python + PyCryptodome
- 十六进制编辑:HxD
- OSINT工具:各种存档站、数据库查询
5.3 解题思维模式
- 数据流追踪:从原始数据到最终结果的完整路径
- 交叉验证:多源信息对比确认
- 协议逆向:自定义协议的解析与理解
- 隐蔽通道识别:非常规通信方式的发现与分析
本教学文档涵盖了RCTF多个题目的详细技术解析,重点突出了实际攻防中的关键技术点和解题思路,为CTF参赛者和安全研究人员提供了完整的学习路径。