CTFSHOW新手杯MISC部分WriteUp

2,085 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

引文

之前复现了CTFSHOW新人杯的WEB方向部分题目,今天就复现一下MISC为主的题目,可能有些读者不太明白MISC方向是什么意思,简单来说就是"杂项",包括:隐写,压缩包处理,流量分析,攻击取证等但不限于这些,下面给带给大家我做这些题时候的思路。

misc1 哇库哇库

提示:密码纯大小写字母

图片.png

下载附件得到以上内容,压缩包密码在注释中(哇库哇库(小写)),得到解压密码:

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"得到图片:

图片.png

misc2 显卡坏了

图片.png

下载附件得到上面图片,隐约看到红色的字符串,猜测是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:

图片.png

misc3 简单密码             

附件是一个加密的word文件,因为题目没告诉我们密码信息,怀疑是一个压缩包伪加密,关于伪加密的信息可以参考:

blog.csdn.net/xiaozhaidad…

这里我们按照修复方式将对应的09改为00

图片.png

但是word里面只有一张图片:

图片.png

天、黄、荒,三个字旁边分别用红笔标注了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))

图片.png

发现压缩包里有很多这种奇怪的txt文件,有做题经验的人就会猜到是CRC爆破,因为每个文件字节很小,所以我们可以进行爆破来解决。这里放一个项目地址,可以用到这个来做:

github.com/theonlypwne…

用法如下:

py -3 crc32.py reverse 0x123456

之后题目差不多就完成了。

osint1 天上的路

类似于一道社工题目,给我们一个图片寻找拍摄地址:

图片.png

提取图里的重要信息,发现摩托、彩虹路,百度搜索了一下发现神女湖驿站比较符合,是题目答案。

osint2 都可以黑

小菜鸡从外地游玩回来想在家里看看电影,并且对深挖电影细节十分入迷,这是小菜鸡看到的电影截图,你能帮小菜鸡挖掘一些电影细节嘛?

flag格式:ctfshow{主角所在团队名字_主角团队登上的邮轮名字}

图片.png

一开始的时候我发现船的名字,但搜索后没有什么发现,百度识图一下找到匹配的图片,出自电影:《我是谁》,于是我们寻找百度百科,找到主角所在的团队名字: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等部分的题目,收获还是挺大的,有兴趣的小伙伴可以去官网尝试做一下,如果喜欢本文不妨一键三连支持一下。