吾爱破解 2023 春节解题领红包之 Web 题解
字数 1755 2025-08-11 17:40:15
吾爱破解2023春节Web题解教学文档
活动概述
吾爱破解2023春节解题领红包活动包含三个Web题目(初级、中级、高级),每个难度需要提交4个静态flag和1个动态flag。所有线索都隐藏在指定B站视频中。
活动视频: Bilibili视频链接
初级难度解题
flag1
- 位置: 直接显示在视频中
- 内容:
flag1{52pojiehappynewyear}
flag2
- 位置: 视频中的二维码
- 解法:
- 使用手机扫描二维码或在线解码工具
- 解码后网址包含flag:
flag2{878a48f2}
flag3
- 位置: 视频25秒右下角字符
iodj3{06i95dig} - 解法:
- 识别为凯撒密码(字母替换)
- 每个字母向前偏移3位:
iodj→flag - 最终结果:
flag3{06f95afd}
flag4
- 位置: 视频作者的签名(需鼠标悬停发现)
- 解法:
- 签名内容是Base64编码
- 解码后得到:
flag4{9cb91117}
flagA(动态)
- 线索: 视频中给出的网站
2023challenge.52pojie.cn - 解法:
- 检查域名解析,发现缺少A记录
124.232.185.97 - 修改本地hosts文件添加该记录
- 访问网站,在Response Header中查找
X-Dynamic-Flag - 初始提示:
Header X-52PoJie-Uid Not Found - 添加请求头
X-52PoJie-Uid(值为你的UID)
- 检查域名解析,发现缺少A记录
Python代码示例:
import requests
headers = {
"X-52PoJie-Uid": "2002241", # 替换为你的UID
"Host": "2023challenge.52pojie.cn",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
}
url = "https://2023challenge.52pojie.cn/"
response = requests.get(url, headers=headers)
flagA = response.headers["X-Dynamic-Flag"]
print(flagA)
中级难度解题
flag5
- 位置: 视频30秒左右的电报声
- 解法:
- 识别为摩斯密码
- 通过音频频谱图分析更直观
- 结果:
flag5{eait}
flag6
- 位置: 视频开头的电话拨号声
- 解法:
- 识别为双音多频信号(DTMF)
- 使用工具如DTMF2NUM识别
- 结果:
flag6{590124}
flag7
- 位置: 视频22秒上方的二进制串
- 解法:
- 识别为二进制ASCII码
- 每8位一组转换为字符
- 示例:
01100110→ 'f' - 完整结果:
flag7{5d06be63}
flag8
- 位置: 视频音频中隐藏
- 解法:
- 使用Audacity软件打开音频
- 查看频谱图
- 结果:
flag8{c394d7}
flagB(动态)
- 线索: 域名
2023challenge.52pojie.cn的TXT记录 - 解法:
- 计算公式:
substr(md5(uid+"_happy_new_year_"+floor(timestamp/600)),0,8) - 计算当前时间戳除以600后向下取整
- 拼接字符串并进行MD5哈希
- 取前8位作为flag内容
- 计算公式:
高级难度解题
flag9
- 位置: 视频40秒左右的杂音
- 解法:
- 单独截取该段音频
- 反向播放
- 结果:
flag9{21c5f8}
flag10
- 备注: 题目描述中未提供具体解法
flag11
- 位置: 视频底部的
++++[>等字符 - 解法:
- 识别为Brainfuck编程语言
- 使用在线工具解码
- 结果:
flag11{63418de7}
flag12
- 位置: 视频开头的背景图
- 解法:
- 识别为图片盲水印技术
- 使用傅里叶变换处理图片
- Python代码示例:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('52pj.png', 0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
s1 = np.log(np.abs(f))
s2 = np.log(np.abs(fshift))
plt.subplot(121), plt.imshow(s1, 'gray'), plt.title('original')
plt.subplot(122), plt.imshow(s2, 'gray'), plt.title('center')
plt.show()
- 结果:
flag12{3ac97e24}
flagC(动态)
- 线索:
2023challenge.52pojie.cn登录页面 - 解法:
- 修改页面源码移除输入框的
disabled属性 - 输入UID后抓包,发现JWT token
- 在jwt.io解码token
- 修改payload中的
role从user改为admin - 使用新生成的token重新提交请求获取flag
- 修改页面源码移除输入框的
技术要点总结
-
密码学技术:
- 凯撒密码
- Base64编码
- MD5哈希
-
音频分析技术:
- 摩斯密码识别
- DTMF解码
- 音频频谱分析
- 音频反向播放
-
Web技术:
- 域名解析与hosts修改
- HTTP Header操作
- JWT令牌伪造
-
其他技术:
- 二进制ASCII转换
- Brainfuck语言解码
- 图片盲水印(傅里叶变换)
通过系统性地应用这些技术,可以完整解决所有Web题目。