👋 大家新年好,活动结束了,按照传统来分享一下Web系列题目的解题过程/思路。
😊 对于经常打CTF的师傅们来说这次Web题目(其实大多数为Misc)其实还是非常简单的。以下为我当时解题的整体路线,供大家参考。
😀 下面正式开始分析,先是视频相关
📥 我们可以先将视频下载下来以便于后面分析(将网址中的bilibili改为ibilibili即可下载视频)
⛳ Flag6 (解题工具:RIBT/DTMF 解码器:从拨号音的录音中提取电话号码。 (github.com))
出现在视频第3秒,属于按键音(DTMF),很容易可以听出来按了6次,正好对应flag格式中的6个*,flag6{**}。
使用Audition将这一段音频提取出来保存为wav文件,这里命名为222.wav。
#使用前面提供的工具,适当的设置下容错(-t)
python3 .\dtmf.py -t 25 .\222.wav
得到flag6{590124}
⛳ Flag1
视频00:18中读出 flag1{52pojiehappynewyear}
⛳ Flag3
视频00:25右下角出现的iodj3{06i95dig} 凯撒密码位移-3位得到 flag3{06f95afd}
⛳ Flag2 视频00:22中的二维码,随便找一个解析工具 得到flag2{878a48f2}
⛳ Flag5
00:31有电报声 使用Audition查看。易得
..-. .-.. .- --. ..... . .- .. - //摩斯密码
解码得到FLAG5EAIT 转换为flag格式为flag5{eait}
⛳ Flag9
仔细听视频结尾有一段听不明白的语音,在AU中选中范围进行反向(Ctrl+R)
仔细听可以得到flag9{21c5f8}
⛳ Flag12
单图盲水印,取视频灰色背景那一段导入imagein或者其他工具|
得到flag12{3ac97e24}
⛳ Flag4
出题人B站空间签名档 ZmxhZzR7OWNiOTExMTd9 进行base64解码即可得到flag4{9cb91117}
⛳ Flag8
在Audition中使用频谱图查看整个视频的音频部分可以很明显的发现flag8{c394d7}
🌐接下来就是网站部分
⛳ FlagB
直接拿到了网站又无法访问,可以去查找一下网站的dns解析,最后可以发现在txt解析中有以下内容
"_52pojie_2023_happy_new_year=flagB{substr(md5(uid+\"_happy_new_year_\"+floor(timestamp/600)),0,8)}"
用python将flagB解出来
from math import floor
from time import time
from hashlib import md5
a = floor(time()/600)
UID = '570826' # 自己的UID
data = str(UID)+'_happy_new_year_'+str(a) # 拼凑字符串
md50_8 = md5(data.encode()).hexdigest()[:8] #计算md5,取前8位
flagB = f'flagB{{{md50_8}}}'
print(flagB)
⛳ FlagA
直接访问https//2023challenge.52pojie.cn/没有找到对应的地址,在视频的00:34有提示又与主站处于同一台服务器,这里可以通过修改hosts,将ip对应至https://2023challenge.52pojie.cn/
Hosts文件一般位于”C:\Windows\System32\drivers\etc” 目录下
在微步云等平台查询一下52pojie.cn主站的域名解析52pojie.cn-域名情报 (threatbook.com)
按如图所示 填入hosts文件中后保存,即可访问网站
现在就可以直接访问https://2023challenge.52pojie.cn/
在网站Header中可以找到关于flagA的相关提示
X-Dynamic-Flag: flagA{Header X-52PoJie-Uid Not Found},需要在Header中添加
X-52PoJie-Uid:uid 参数
我这里使用Postman进行讲解,在Header中添加相关参数后发送,可以再返回的Header中发现flagA
⛳ Flag7
网页源代码68行,一串二进制数,去掉空格进行二进制转字符串
简单几行python代码可以得到flag:flag7{5d06be63}
import libnum
data = '01 1 001 1 001 1 01 1 0001 1 00001 01 1 001 1 1 001 1 0111 011 1 101100 1 1 0 10 1 011 0 01 0000 1 10000 001 1 01 1 0 011 0 00 10 011 0 010 100 1 1011 000 1 1 0 0 11 01111101'
data = data.replace(' ','')
data = libnum.b2s(data)
print(data)
#b'flag7{5d06be63}'
⛳ Flag 10
脑电波没对上,应该还是在这串二进制里面
⛳ Flag11
网页源代码69行,二进制数下方,很明显的brainfuck编码,提供一个解题地址
CTF在线工具-在线Brainfuck加密|在线Brainfuck解密|Brainfuck|Brainfuck原理|Brainfuck算法 (hiencode.com)
得到flag11{63418de7}
⛳ FlagC
在网页源代码第60行提示需要进入/login界面,进入之后发现输入框为disabled状态
这里只需要删掉这个disabled,双击后删除即可
输入UID后提交提示不是admin用户,这时候查看cookie,有一个jwt_token
复制放到jwt.io解析一下,将右侧的user改成admin,然后将新生成的jwt_token 复制回cookie处后刷新网页即可获得flagC