第三届上海市大学生网络安全大赛 流量分析 WriteUp

背景

这次的比赛又跟着 Dalao 去划水了,能力和时间不足本次就只划了三题,一题签到,一题划水的 Web 和一题 Misc 。本文就来讲一下这题 Misc 流量分析。

题目

https://drive.google.com/open?id=1rTp9Uan0kbtGLUxntqMqRpNiW97kIszV

or

https://imlonghao.com/upload/2017/11/05/traffic.zip

解题

将下载回来的 traffic.zip 解压,会得到一个 traffic.pcapng 文件,使用 Wireshark 打开。

将流量按照 Protocol 进行分类,可知有

ARP / DNS / FTP / FTP-DATA / ICMP / ICMPv6 / IGMPv3 / LLMNR / NBNS / SSDP / SSL / TCP / TLSv1.2 / UDP 

除去那几个没什么用的协议之后,有用的协议并没有很多,目前来说 TLSv1.2 协议没有什么好的办法可以强破,所以决定从 FTP 入手解题。

设置过滤器为 ftp || ftp-data 进行分析,能看出来服务器的地址和账户密码

服务器地址:182.254.217.142
用户名:ftp
密码:codingay

尝试直接进行登录,但是失败了,应该是抓完包之后修改过的了。但是从流量中我们也能分析出来很多东西,目录结构可以从 No.8110 中提取出来,内容如下:

(提取的方法:右键 No.8110 -> 追踪流 -> TCP 流 -> Save as ...)

drwxrwxr-x    2 500      500          4096 Sep 17 23:44 docker
-r--r--r--    1 33       33              7 Aug 16 18:51 flag
-rwxr-xr-x    1 33       33            217 Oct 18 01:10 flag.zip
drwx------    2 107      115          4096 Oct 17 17:38 gay
drwxrwxrwx    2 0        0           16384 Oct 27  2016 lost+found
drwxrwxrwx    3 0        0            4096 Nov 29  2016 test
drwxrwxr-x    2 500      500          4096 Sep 17 23:44 docker
-r--r--r--    1 33       33              7 Aug 16 18:51 flag
-rwxr-xr-x    1 33       33            217 Oct 18 01:10 flag.zip
drwx------    2 107      115          4096 Oct 17 17:38 gay
drwxrwxrwx    2 0        0           16384 Oct 27  2016 lost+found
drwxrwxrwx    3 0        0            4096 Nov 29  2016 test

出题人在 FTP 服务器上下载了几个文件,大概有 flag.zip / key.log 以及几个没什么用的文件。需要注意的是他登录了两次,两次下载了两个不同的 flag.zip 文件,应该是其中做出过修改,key.log 先留着。

按照时间顺序分别将两个 flag.zip 文件命名为 1.zip 以及 2.zip 导出

两个文件的 MD5 值如下:

ae22366e23ae2c8c8e90231fd4f2eb9b  1.zip
6bdda6e105e6e690974e7883c5eb090c  2.zip

按照 CTF 对于 zip 文件的处理,是最喜欢出伪加密的题目的了。

hexedit 打开 zip 文件,定位到 50 4B 01 02 位置,将跟在后面的 09 00 改为 00 00 就可以去掉伪加密。

修改前:

修改后:

尝试解压这两个压缩文件(为了备份我 cp 了一份新的命名为 3.zip / 4.zip)

一个可以解压出来另外一个不行,解压出来的结果也是一个假的 flag,提示我们去看看流量中的加密部分,那应该就是 TLSv1.2 的那些流量了。

上面我有提到,出题人在最后还在服务器上面还下载了一个名为 key.log 的文件,贴出前两行供参考:

CLIENT_RANDOM cbdf25c6b2259a0b380b735427629e94abe5b070634c70bd9efd7ee76c0b9dc0 6782ad3aa5938c43831971a06e9a20eac27075d559799769ce5d1a3ea85211c981d8e67f75d6fd11fcf5536f331a968b
CLIENT_RANDOM 247f33720065429dc7e017e51f8b904309685ec8688296011cd3c53e5bafa75a 921ffbf7bfe6d8c393000f34eab6dc20486e620bdc90f21b6037c3df5592ef91fffca1dc8215699687a98febd45a4ce0

能发现这是一份 NSS Key Log Format 的文件,而这个文件是能解密出 Wireshark 里面的 https 流量的。

Firefox、Chrome可以通过设置SSLKEYLOGFILE环境变量导出所有的会话密钥,估计是为了方便调试。Wireshark可以通过这种格式的密钥来解密。

资料参考:

NSS Key Log Format - Mozilla | MDN

27.3 如何用Wireshark解密HTTPS报文

在 Wireshark 的首选项中的 SSL 协议部分,在 (Pre)-Master-Secret log filename 中填上刚刚的 key.log

然后刷新一下流量包就可以解密出来隐藏的信息。

瞄了一眼大概就是上了百度的网盘下载了个东西,直接通过 导出对象 -> HTTP 进行导出

解压之后发现是一首歌,アスノヨゾラ哨戒班,也挺好听的,听到了最后剩下了莫名其妙的杂音,数据应该就在这个部分了。

通过 Audacity 打开了这首歌拉到了最后,果然是后面加上去的

切换到频谱图分析

隐约能看到写着

Key:AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!

回到一开始解不开的 zip 文件,使用 AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa! 作为密码,成功解出来了 flag.txt

# cat flag.txt                                       
flag{[email protected]__#>>_<<#}

到此,游戏结束。