misc周报03
周报03
【君子坐而论道,少年起而行之。 ——烽火戏诸侯《剑来》】
TPCTF 2025 题目复现
(难度有点高,尽力尝试ing)
题目:nanonymous spam
题目要求找到匿名垃圾邮件的发送者,打开题目,可以看到留言板上有许多不同的昵称和垃圾信息:
同时,我们可以在下方发送信息,我们注意到网站已经给我们生成了一个昵称:
可以发现的是,如果使用不同的IP访问网站,所显示的昵称是不同的!
也就是说,所谓的匿名,实则是通过一个“算法”,将你的IP地址转化成看似不规律的字符串。
那么,如果我们能逆向出这个算法,就可以知道留言板上的信息发送者了!
然而,想要逆推出算法,我们一定需要大量不同的IP以及对应的匿名昵称来找寻对应关系。
这里借鉴一下0xFFF队的WP
我们可以通过 X-Real-IP 这个 HTTP 头来伪造 IP 地址。
并且也发现第一个 Spam 留言者昵称对应的 IP 地址正是 TPCT 这个 Flag 头的 ASCII 码,这证实了猜想。
那么我们先从 0.0.0.0 开始递增看一看是否能找到一些规律:
1 |
|
结果如下,注意到昵称的第 4-6 个字符每 103 个 IP 地址会有一个周期,进入下一个周期改变了第 1-3 个字符的内容,其余字符则保持不变:
1 |
|
那就继续探索下一个周期变化。这个周期很长,所以直到将范围拉到 520 之后才确定其周期长度为 513:
1 |
|
进一步探索下一个周期。下一个周期的长度为 313,但同时也注意到,在进入下一个周期后,四个部分的顺序也发生了变化:
1 |
|
先对之前三个周期的昵称部分进行了整理,发现它们互相没有交集,所以顺序的变化不影响对下一个周期的探索:
1 |
|
那就继续:
1 |
|
然后意识到这应该是最后一环了,只需要把这个周期的昵称部分整理出来就可以了:
1 |
|
那么就可以直接写解码将那些 Spam 留言者的昵称转换回 IP 地址,进一步解出 Flag 了:
1 |
|
流量分析专题练习(NSSCTF)
(源自NSSCTF的流量分析题)
题目:[陇剑杯 2021]webshell(问2)
题目要求找到日志文件的绝对路径:
因为是日志文件,我们可以直接筛选.log文件:
在后面的流量中找到了日志文件:
但题目要求提交绝对路径,此时可通过已经查看分析的流量包中发现该网站系统为Linux系统,由此猜测默认目录为/var/www/html。也可以继续查看后续流量包,其中存在命令执行pwd,查看http流,可以准确的得到网站目录为/var/www/html
/var/www/html/data/Runtime/Logs/Home/21_08_07.log
题目:[CISCN 2023 初赛]被加密的生产流量
这是一道工业生产流量:(不禁想起了强网线下赛的流量分析题)
大部分是modbus和TCP流量包。
针对modbus协议分析,有以下脚本:
1 | import pyshark |
运行脚本,可以分析流量包中Modbus/TCP的协议功能码,功能码主要有以下几种:
运行代码:
功能码为6(代表预置单个寄存器)的modbus协议数据包有16个,很可疑,于是我们使用wireshark过滤:
1 | modbus.func_code == 6 && modbus.request_frame |
追踪流,在TCP流中发现base32编码:
1 | MMYWMX3GNEYWOXZRGAYDA= |
解码得到flag:
题目:[LitCTF 2023]easy_shark
- 题目描述:卧底小帅在潜伏期间截获了一段非常可疑的流量,为了里面的内容不被泄露出去,小帅将flag进行了加密,你能成功发现犯罪团伙的秘密,并拯救小帅吗?flag格式:NSSCTF{flag_木马连接的key}
- 出题人:王八七七
flag以NSSCTF{}形式提交
依旧是流量分析。
然而,刚下载的附件压缩包就被加密了,用010 Editor看看:
发现是伪加密,进行修复:
打开流量包,筛选http
可以发现第2个流中黑客上传了webshell
同时,在最后一个流中,发现了一个一元二次方程和加密的flag:
方程的解为17和77,这应该是两个key,在常见的古典密码中,是仿射密码的可能性较大,我们使用随波逐流工具进行解密:
buuCTF misc做题记录
题目:Mysterious
一道逆向题(居然塞到misc里面)
题目是一个exe程序,打开提示输入密码:
程序放到exeinfo检查,发现为32位程序,无壳:
我们通过IDA进行静态分析:
可以看到,非常明显的WinMain
主函数(一般的win32程序就是WinMain作为主函数)
进入函数,对其反汇编
这里有一个DialogBoxParamA
函数
详解:https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-dialogboxparama
通过以上对DialogBoxParamA
函数的描述,我们知道这是一个对话框函数,其中DialogFunc
是指向对话框过程的指针,这个对话框过程便是一个回调函数,双击函数查看代码:
这里是一个间接调用。。
接下来分析这个回调函数:
要满足if函数输出flag,
所以密码是122xyz,输入密码得到flag:
题目:zip
打开题目,一堆堆压缩包
每个压缩包里只有4bytes大小,于是可以想到是crc爆破:
有以下脚本:
1 | import zipfile |
运行后,得到的结果是一串base64:
1 | z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA== |
进行解密:
由于文件尾是3D 7B 00 40 07 00,所以这是rar文件
补全文件头:
打开压缩包文件,得到flag
题目:[WUSTCTF2020]girlfriend
题目是一个音频,显然是音频隐写。
频谱看上去不太像摩斯电码。
听出来这是手机键盘的拨号声,也就是DTMF拨号音识别
使用dtmf2num进行识别:
对应手机上九宫格输入,得到最后的字符串为YOUAREMYGIRLFRIENDS
切换成小写,得到flag
题目:[DDCTF2018](╯°□°)╯︵ ┻━┻
题目是一个txt文件
1 | string = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd" |
得到flag:
flag{922ab9974a47cd322cf43b50610faea5}
题目:[MRCTF2020]千层套路
打开是一个压缩包,显示被加密
直接爆破密码:
打开后里面又是一个压缩包,继续爆破,此时我们发现,密码就是压缩包的文件名!
使用python脚本:
1 | import os |
脚本提取文件名的前四位作为密码,然后将解压后的文件都放进名为flag的文件夹中,直到解压出的文件后缀不是zip为止。
最终,发现qr.zip
解压:
发现一串RGB数据,利用脚本还原图片:
1 | from PIL import Image |
得到一张二维码,扫描得到flag
题目:百里挑一
解压附件,打开
流量分析题目,用wireshark打开流量包。根据题目提示,其中应该有很多的壁纸图片。尝试导出HTTP,全部保存在一个文件夹里面
使用exiftool *|grep flag
得到一半的flag:
还有一半则是在流量包里面:
最终flag:
flag{ae58d0408e26e8f26a3c0589d23edeec}
总结:
针对本次的TPCTF比赛的话,第一道二维码还是比较简单的,运用PS把扭曲的二维码扶正后,其实可以尝试利用QRazyBox集成的工具进行修复,而不是手动修复,耗时耗力(借鉴了其他队的WP)
其次就是spam这道题目,完全没有想到IP地址上面,反而以为是Web方面的知识(那个输入框太误导人了!)当时也没有环境去试不同的IP地址。
后面较难的题暂且不论了。。。
然后就是本周的做题,主要以流量分析为主,学习了一下工业生产流量。这种题还是太少了