福建三明学院信息工程学院网络攻防大赛(SMUCTF)是由共青团三明学院信息工程学院委员会主办、信息工程学院网络安全协会承办的一场关于网络安全技术练习的CTF夺旗赛。
本篇文章将展示笔者对2022年度福建三明学院信息工程学院网络攻防大赛(SMUCTF)的部分解题笔记(个人理解)。能解出来的题目,手把手教程!
》MISC
SMUGIFQR
点击下载附件得到一个gif,不同的图片查看器有不同的高度(判断应该是修改了高度)
这个gif包含了多个二维码,每个二维码只停留不到1秒钟的时间。
Stegsolve是基于java编写(需要安装Java环境),它能够将掩藏在图形中的重要信息解析过来,它能读取图片中的链接、文本信息,软件操作相对简单。
用Stegsolve打开解压得到的flag.gif
接下来使用Stegsolve提供的“Frame Browser”,
在Frame Browser中点击 > 按钮,可以逐帧查看,用二维码扫描器逐一扫描二维码得到
1 | flag{SMUQRs-Are-FUN!} |
冰墩墩的汉信码
点击下载附件得到一张冰墩墩的图片
说是有汉信码,一定在图片上,同样使用Stegsolve,调整好窗口大小后直接按下菜单栏的 > 键,在Red plane 0 的频道画面下出现汉信码
汉信码是我国具有完全自主知识产权的特殊二维码
汉信码具有知识产权免费、汉字编码能力强、抗污损、抗畸变、信息容量大等特点。
要使用特定的手机APP:中国编码(Android点击下载) 才能扫描
手机安装中国编码APP后扫描得到:
1 | Dear SMUCTFers, congratulations on getting the flag:flag{Have_YOu_ever_Heard_0f_HanXinMa} |
得到flag{Have_YOu_ever_Heard_0f_HanXinMa}
listentomusic
点击下载附件解压得到一个音频和另一个压缩包
pass.wav中是电话拨号音频,使用 在线电话拨号音频解密:Detect DTMF Tones (dialabc.com),选择文件后进行解密得到
1 | 1933056020 |
带到加密包输入密码1933056020得到lsb-silenteye,
根据提示使用SilentEye工具,将音频拖进SilentEye工具,点击Decode,在弹出窗口再次点击decode
得到以下提示,下载得到SSTVflag,
链接:https://pan.baidu.com/s/1Jsy4naAx3JvOaGWmKeKAfg
提取码:1mci
在网络上的教程大多对sstv的解法是使用kali的Qsstv,但是我的kali中的qsstv显示,这个音频不支持,所以我们使用另外的方法
在手机上下载Robot36(Android点击下载)
手机打开软件使用电脑播放音频得到
图片中有
1 | flag{D0_YOu_know_SMUmusic_ForWAVE} |
High-level_SMUpdf
点击这里下载附件,得到一个压缩包,其中flag.pdf为解密文件
打开pass.pdf,发现改文件受到密码保护,不允许查看
我们打开PDF Password Recovery(或者其他PDF密码解锁爆破工具),选择恢复用户密码使用枚举攻击
使用1-8位密码字符数字组合
得到pass密码,使用密码并且使用PDF编辑器打开pass.pdf文件
在最后一栏有隐形的字,把他复制到记事本中,得到解压密码6ef23c0845c43d82e0614baeba084d11
——>password:6ef23c0845c43d82e0614baeba084d11
打开flag文件后得到包含11张图片的PDF,使用winhex打开发现他拥有两个PDF的文件头,推断使用了wbStego4open把文件隐藏到PDF文件中
我们使用wbStego4.3open.exe(百度上不好找这个工具,点击这里下载),第二步中选择Decode ,输入文件地址后,下一步中选择PDF
直接下一步,不用输入,之后随便输入命名txt文件,然后点击继续,之后在工具的根目录下出现自己命名的txt文件
——>
得到
1 | flag{0urSMUPDF} |
病毒文件恢复
点击下载附件,解压得到一个勒索文件,一个加密文件
由于,本人目前能力有限,毕竟专业领域有人做的比我们好,所以我们使用360勒索病毒解密:https://lesuobingdu.360.cn/
选择在线解密,上传留言文件和加密文件,点击开始解密,稍等片刻后就可以下载到含有flag的源文件
1 | flag{fngD_vwfW_JTqI_E4Kl} |
》CRYPTO
hex
点击这里下载附件,解压得到mod.txt给了一串字符串解密得到答案;
分析字符串可以得到是16进制,因为16进制的组成字母范围是 a-f
1 | d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd |
把其转成ASC码即可,但是往往不是那么顺利,因为存在 ASC码超过最大值的问题,需要减128,再转ASC码;
脚本:
1 | cipher = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd" |
得到flag{9af3c9d377b61d269b11337f330c935f}
》REVERSE
warmup
点击这里下载附件包,得到某个文件,二话不说放进IDA,因为是64位文件,使用IDA64打开。
找到main函数
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
这里将”Reverse_is_very_Fun-_-!”复制到数组s2中,并将s2和输入的s1进行对比,如果s1和s2相同则输出”right!”否则输出”wrong!”
所以,flag就是Reverse_is_very_Fun-_-!
1 | flag{Reverse_is_very_Fun-_-!} |