引文
之前复现了CTFSHOW新人杯的WEB方向部分题目,今天就复现一下MISC为主的题目,可能有些读者不太明白MISC方向是什么意思,简单来说就是"杂项",包括:隐写,压缩包处理,流量分析,攻击取证等但不限于这些,下面给带给大家我做这些题时候的思路。
misc1 哇库哇库
提示:密码纯大小写字母
下载附件得到以上内容,压缩包密码在注释中(哇库哇库(小写)),得到解压密码:
WAKUwaku
hint的内容如下:
wakuwaku
→
ukawukaw
猜测是反转的意思,我们将第三个文件进行内容反转:
with open('乖女儿', 'rb') as f:s = f.read()
t = [x // 16 + 16 * (x % 16) for x in s]
with open('乖女儿.png', 'wb') as f:f.write(bytes(t))
f = open('乖女儿.png', 'rb').read()
res = open('乖女儿.png', 'wb')
res.write(f[::-1])
是PNG的文件尾,所以我们添加文件头:89504E47,得到一张图片。
我们再看hint2:
"最近女鹅吃了太多花生,脸都变宽了,于是给她在祖安用 海克斯 科技瘦脸瘦了200,没想到会变成这样"——劳埃德▪福杰
暗示我们修改宽高,宽度被更改(减了200),于是我们修改宽高数据,将"00 00 01 42" 还原至 "00 00 03 42"得到图片:
misc2 显卡坏了
下载附件得到上面图片,隐约看到红色的字符串,猜测是flag,但是需要我们进行图片修复。简单分析后发现每十个像素为一行,我看别人WP可以用ps进行手动拼接,但官方提供了脚本,我们通过脚本来做这一道题目:
import os
from PIL import Image
from PIL import ImageDraw
img=Image.open('flag.png')
outImg=Image.new('RGB',(1500*128,10))
str_strlist = img.load()
for y in range(128):for x in range(1500):for z in range(10):outImg.putpixel((y*1500+x,z),str_strlist[x,y*10+z])
outImg.save('temp.png')
img=Image.open('temp.png')
str_strlist = img.load()
outImg=Image.new('RGB',(1600,1200))
for x in range(1500*128):for y in range(10):outImg.putpixel((x%1600,int(x/1600)*10+y),str_strlist[x,y])
outImg.save('solve.png')
脚本的思路是将整张图做成10像素高的一长条,然后按照1600像素宽再拼回去。最后会得到flag:
misc3 简单密码
附件是一个加密的word文件,因为题目没告诉我们密码信息,怀疑是一个压缩包伪加密,关于伪加密的信息可以参考:
blog.csdn.net/xiaozhaidad…
这里我们按照修复方式将对应的09改为00。
但是word里面只有一张图片:
天、黄、荒,三个字旁边分别用红笔标注了0,3,7暗示了用天地玄黄宇宙洪荒来表示0-7,推测可能在提示我们八进制。但是除了这个也没有什么东西了,怀疑上面这个图片里面有东西,于是我们将其拖出来分析:发现尾巴上有附加信息,发现了半字节逆序的504b0304(zip头)。
我们将其逆序回来,网上找到了一个脚本:
with open('image1.png','rb') as fi,open('aaa.zip','wb') as fo:b1 = fi.read()[::-1]bitr = []for x in b1:bitr.append(((x>>4)&0xf)|((x<<4)&0xf0))fo.write(bytes(bitr))
发现压缩包里有很多这种奇怪的txt文件,有做题经验的人就会猜到是CRC爆破,因为每个文件字节很小,所以我们可以进行爆破来解决。这里放一个项目地址,可以用到这个来做:
github.com/theonlypwne…
用法如下:
py -3 crc32.py reverse 0x123456
之后题目差不多就完成了。
osint1 天上的路
类似于一道社工题目,给我们一个图片寻找拍摄地址:
提取图里的重要信息,发现摩托、彩虹路,百度搜索了一下发现神女湖驿站比较符合,是题目答案。
osint2 都可以黑
小菜鸡从外地游玩回来想在家里看看电影,并且对深挖电影细节十分入迷,这是小菜鸡看到的电影截图,你能帮小菜鸡挖掘一些电影细节嘛?
flag格式:ctfshow{主角所在团队名字_主角团队登上的邮轮名字}
一开始的时候我发现船的名字,但搜索后没有什么发现,百度识图一下找到匹配的图片,出自电影:《我是谁》,于是我们寻找百度百科,找到主角所在的团队名字:clay,船的名字就是图片里的船的名字。
crypto1 easy_base
代码:
=0XezFWZfNXafRjNlNXYit3dvh2cmR3Y
通常=是在base最后的,而这个在最前面,怀疑被倒序了,用脚本正过来:
import base64
str1 = "=0XezFWZfNXafRjNlNXYit3dvh2cmR3Y"
print(base64.b64decode(str1[::-1]))
crypto2 天知地知
好不容易要到了妹子手机号,却是加密的,怎么办,兄弟们很急,在线等!听说妹子是佛山的 加密后的手机号: (+86)981935301754
电话号码9开头很奇怪。因为我国都是1开头的,电话号码位数为12位,10-1=9,所以被减数为13位,猜测为:
被减数 = 1000000000000
减数 = 981935301754
差 = 18064698246
感觉这一道题很奇怪,没有提示我们需要做减法,脑洞挺大的。
结语
简单做了一下CTFSHOW新人杯的MISC等部分的题目,收获还是挺大的,有兴趣的小伙伴可以去官网尝试做一下,如果喜欢本文不妨一键三连支持一下。