高校战役CTF部分writeup
本文最后更新于:2020年3月20日 晚上
废话
打了两天的比赛,小做了几道题,不可谓不充实。虽然找不到工作,也要继续学习。
MISC
简单的misc
用010editor打开photo.jpg,在最底部看到zip格式,
直接改后缀解压,得到摩斯密码,解密是flag.zip的密码,输入后得到base64加密的flag。
解密即可。flag{Th1s_is_FlaG_you_aRE_rigHT}
隐藏的信息
拿到一个残缺的二维码,看这个二维码很别扭,用Stegsolve.jar翻转了颜色之后,看上去舒服多了,然后补定位符,奈何手残,总是补不好,于是放弃,然后我再压缩包右击了一下7z解压,无意发现这个压缩包是假密码,拿到了一个wav文件,使用百度找了好多类似的题,用Audacity分析频谱发现开始和结束有问题,把音量调到最大,开始的部分还是听不到,但是最后可以听出是拨号音,(看过柯南,一下就猜出这是要猜电话号码),结合百度,才发现和DTFM有关。这里给出一篇参考文章:https://hebin.me/2017/09/10/%E8%A5%BF%E6%99%AEctf-beyond/
然后可以得到一串数字187485618521,但是提交不对,感觉还是和那个二维码有关,
strings命令找到:
看来要base64加密,最后得出flag{MTg3NDg1NjE4NTIx}
ez_mem&usb
从来不刷杂项题,所以都是靠百度做,拿到一个数据pcap文件,分析流量,过滤http协议,找到上传的文件。
发现一个40M的数据包,那肯定传文件了,把文件dump出来,直接解压,得到一个vmem文件,百度一波,这是要内存取证,萌新参考:https://www.cnblogs.com/0x4D75/p/11161822.html
思路是,filescan+grep找到和flag字符匹配的文件,还真有一个flag.img,将flag.img dump出来,然后直接7z解压,需要密码,于是找到内存镜像中的cmd命令,有密码给出。
1 |
|
压缩包里是一个usbdata,查了一下这个脚本,解密即可。
1 |
|
flag{69200835784ec3ed8d2a64e73fe913c0}
武汉加油
010editor打开图片,这可真是个好东西啊,两种不同的文件格式还分颜色。
直接改后缀rar解压,
然后使用一个工具爆破出隐藏的flag.txt文件。
1 |
|
shell脚本爆破密码:
…..没成功,算了,不贴了。。
Reverse
天津垓
上来先运行程序,提示缺少cygwin1.dll文件,下载了之后运行还是报错,算了吧,静态分析看看。
找到了一个f函数,代码很简单,就一些简单的运算操作。
感觉有戏,直接写脚本。
1 |
|
脚本跑出来是Caucasus@s_ability
,提交也不对,我把这个函数出现的字符串都搜了一遍,知道了这是个假面骑士……没看过,我还把跑出来的字符串发给一个假面迷,我真是够了。看了看别的函数,发现有反调试特征:
那肯定要动态调试的啊,一想又运行不了。我把函数都看一遍看看有什么信息。
发现这里的Str和f函数中的Str是一个,分析了一下这个函数,是一段SMC(自修改代码)进行动态解密的。
使用IDAPython:
1 |
|
也不是很复杂。。。。
1 |
|
flag{Thousandriver_is_1000%_stronger_than_zero-one}
cycle_graph
描述是图算法,估计凉了,数据结构菜的一笔。
找到关键函数:
这里是对v1进行初始化,假设v1是个二维数组,每组有三个数据,根据代码可分析出有32组。
这里就是主要算法。
然后最后判断flag:
刚开始没注意v7的限制,直接写的脚本跑,
1 |
|
跑出来d8b0bae8jh52db/2
,提交当然不对,后来看到了v7的限制。为什么v7会出现差异呢? 因为有时候加v5和减v5都满足,不知道走哪条路径。估计得用某个算法解,比完赛再学一下算法,所以我手动正着加倒着,硬是给写出来了。
满满的菜啊…….
此处可用广度优先搜索算法,算法学习具体参考https://blog.csdn.net/raphealguo/article/details/7523411
easyparser
这个题,我可是特别肝的,知道是虚拟机,但是我也没遇到过这种题,直接动态调试,我一步一步跟出来的程序逻辑,还好不是特别复杂,也就调了6个小时左右吧。。。。先给出解密脚本,然后再学习一下正确的解法。
1 |
|
flag{G0d_Bless_Wuhan_&China_Growth!}
fxck!
太累了,所以这道题随便看了一下,看到base58特征,直接解码,发现不对,一想其他题都不简单,这个应该也不会这么简单吧,所以就没考虑换表。比完赛看了看,还真是换表解密,我哭了。。。。
这段是求余,我调了一下,发现不是直接把输入base58加密,还加了点东西,说实话,仔细分析,我没看懂这段伪代码,求得余数和我跑程序求得不一样,自闭了。
换表和加密,不难。
然后用了brainfuck代码,第一次遇见,根本不知道是什么东西,但是最后的比较字符串可以直接动调dump出来。因为是复现,也简单学习了一下这个加密。
注释中给出了这个加密的运算符。
既然又碰到了base58,就熟悉一下吧,go语言写脚本,参考:https://blog.csdn.net/qq_45828877/article/details/103997621
1 |
|
跑出来,发现第一个字节是个\x6
……..
clock
比赛的时候分析出了源码,但是不知道是什么加密,无从下手。
后得知是LFSR(线性反馈移位寄存器),可参考:
LFSR具体参考:
https://www.anquanke.com/post/id/181811
https://zhuanlan.zhihu.com/p/33920501
writeup和脚本参考:
http://ctf.njupt.edu.cn/382.html#clock
贴出逆向的源码(python3)和爆破脚本(go语言)吧。
程序主要源码:
1 |
|
爆破脚本:
1 |
|
Mobile
GetFlag
比赛的时候觉得快出了,但是不会通信就很难受,复现一遍吧。
扔到JEB里看看。
往一个文件里写了flag,这样的方式创建的文件会在应用的私有目录下。我们安装软件到手机上,使用adb shell查看。
服务端监听8080端口。
通过输入流得的传给它的数据。
还有接收数据的方法。
通过输出流返回一个随机数。然后对输入的数据进行了一些操作。
主要就是checkpayload方法。
验证mssage和check,check是随机数作为密钥的HmacSha1加密。
验证通过即可执行wget message。
没有环境了,搭了几个小时,还是没有成功。。。。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!