menu Ga1@xy's Wor1d
Ha1cyon_CTF部分wp
844 浏览 | 2020-04-21 | 阅读时间: 约 5 分钟 | 分类: wp,MISC | 标签: Misc,比赛wp
请注意,本文编写于 219 天前,最后修改于 215 天前,其中某些信息可能已经过时。

misc部分

碰上彩虹,吃定彩虹!

附件链接:https://pan.baidu.com/s/1v6i1FhuVyV2M5nuCWEDSVw

提取码:nfaa

下载附件并解压,得到两个文件,先看lookatme.txt

打开文档得到一长串字符串,如果用ctrl+a全选文件内容的话,就可以发现在下面还隐藏着一些东西

下面包含了空格和tab两种字符,可以联想Morse code,把空格替换成.,tab替换成-,解一下Morse code,可以得到autokey,再结合上面的字符串就可以判断该字符串经过了autokey加密

再看secret这个文件,hint中提示在txt中隐藏了一些东西,vim查看一下txt可以发现

很明显为零宽度字符隐写,且由<200b><200c><200d>这三种字符组成,在线网站解一下,可以得到

do u know NTFS?

注:有关零宽度字符隐写可见浅谈基于零宽度字符的隐写方式这篇博客

即NTFS隐写,在附件所在文件夹打开cmd输入dir /r,可以发现在maybehint这个文件后隐藏有一个txt文件

用notepad命令查看,可以看到文档中的内容,稍加观察可以发现其中只有几种字符,而且都为重复的,据此可以尝试词频分析,python脚本即可实现

from collections import Counter

f=open('out.txt','r')
f_read=f.read()
print Counter(f_read)

得到结果为这几种字符从多到少的排列顺序,组合在一起得到ZW5jcnlwdG8=,明显base加密,尝试base64解密成功,得到encrypto,百度encrypto可知其是一个加密软件,下载后尝试用其加密一个文件,可以得知经过其加密的文件后缀名为crypto,将文件后缀名改为crypto即可打开文件

可以看到文件被加密,想到autokey,但是由于没有给出加密密钥,所以需要对其进行爆破

关于如何对autokey加密进行爆破,在该网址有详细介绍

用脚本对密文进行爆破

可以看到当key长度为14时,得到key可读为youhavefoundme,看一下后面的明文,在最后写到

NOWIWILLGIVEYOUTHEPASSWORDITISIAMTHEPASSWD

再结合hint小写,得到password:iamthepasswd

可是用此密码解这个加密文件时却一直解不开,再结合题目描述中加粗的括号删掉,推测是不是在文件中还隐藏了什么信息,用strings命令查看一下文件可以发现这样一条信息

(Oh! You caught me! But...)

用winhex或010editor将其删去后再次尝试解密,即可成功解密

解开加密得到一张图片,用foremost可以从中分离得到一个加密的压缩包,所以现在需要寻找密码

仔细观察图片可以发现,由五种不同颜色的横条分隔开的六块黄色有略微深浅的差异,用gimp打开提取一下颜色

分别提取一下六种黄色,可以发现他们颜色的HTML标记只有最后两位不同,从上到下依次为704073735764,将这几个数组合在一起,用Converter的Hex to Text,或者python的decode('hex'),就可以得到解压密码

得到密码:p@ssWd

解压后得到docx文件,想到word隐写,显示隐藏文字可以看到提示(虽然没有太大用2333

仔细观察上面的一长串字母,可以在众多的小写字母中发现几个大写字母

按照顺序组合起来得到ALPHUCK,百度可知其为一种Programming Language,与Brainf**k类似,只由a,c,e,i,j,o,p,s这8个小写字母组成,删去上面的几个大写字母,在线网站解码一下即可得到flag

flag:flag{1t's_v3ry_De1iCi0us~!}

老千层饼

题目附件:https://pan.baidu.com/s/1G9oTNwfFSAblhk7jMPWKgQ

提取码:4mr5

下载附件并解压,得到5个文件,用winhex观察可知这五个文件分别都是zip文件的一部分,但是我们用将这几个文件都拖进kali中,可以看到最后两个文件直接以zip的形式显示,但是解压发生错误,我们可以直接尝试用binwalk分离,从zrf1文件中可分离得到一张图片,从zfr0文件中可分离得到一个hint.txt,先看png图片

png图片名为BV号,先保存下来一会肯定可以用到,用zsteg分析图片,可以看到文件中还藏有7-zip文件

用010editor将图片文件尾后数据提取出来单独存为一个7-zip文件,解压可以得到一个文档,内容为base64加密过的字符串,将其解密留着备用,再用stegsolve分析文件,可以在Alpha 0通道最上方发现一些黑白点,是LSB隐写的痕迹

用脚本提取一下隐写的数据(感谢FzWjScJ师傅提供的脚本)

from PIL import Image

p = Image.open('1.png')
a,b = p.size
i = ''
count = 0
for y in range(b):
    for x in range(a):
        data = p.getpixel((x,y))[3]
        if data == 255:
            i+='1'
        else:
            i+='0'
a = open('all.txt','w')
a.write(i)
a.close()

data = open('all.txt','r').read()
block1 = Image.new('L',(10,10),0)
block2 = Image.new('L',(10,10),255)
res = Image.new('L',(330,330),0)
for i in range(33):
    for j in range(33):
        if data[j+33*i] == '1':
            res.paste(block1,(i*10,j*10))
        else:
            res.paste(block2, (i * 10, j * 10))
res.show()

脚本可以提取出来一长串的0 & 1序列,再联想到刚刚binwalk得到的:hint.txt文件中的hint33 * 33 = 1089,恰好33 * 33也是二维码的一种格式,我们将得到的01序列转换成二维码,得到


将二维码三个角的定位点补全,得到完整的二维码(感谢兰德师傅p的图)

扫码得到一串base64编码过的字符串,先保存一会用

GvgQE86nZKJdFzN2Z9x2Y3OnZyvnYNQEbG282GRtSL0=

再看之前解压7-zip包得到的那个文件,观察第一行,即

epicer_fehcrebyc

将它反过来读可以发现它实际上为cyberchef_recipe,即用cyberchef的recipe功能得到的文件,将其导入

将base64解码得到的内容粘贴上去,点击LOAD

再根据提示将多余的内容移除,最后得到

提示av?,所以我们将最开始的BV号用在线网站转换为AV号,得到的AV号av415411作为key填上去,再修改一下几个选项,右侧上方填写刚刚扫描二维码得到的base64字符串,即可得到flag

flag:flag{An_Old_Th0usanqs_Of_Layer_P1e}

打不开的图片(校内题)

题目附件:https://pan.baidu.com/s/1Lo8HYli2UrV6kQVcgxTpYA

提取码:vd82

下载附件得到一个没有后缀的文件,winhex查看一下发现是png格式的文件,但是文件头不对

修改文件头为89 50 4E 47后保存再次打开图片,图片仍然无法打开

winhex查看发现图片宽度为0,所以需要爆破宽度

import struct
import binascii
import os

misc = open('1.png','rb').read()

for i in range(1024):
    data = misc[12:16] + struct.pack('>i',i) + misc[20:29]
    #misc[12:16]是IDCH,misc[20:29]是IHDR中除去宽度四个字节的剩余部分
    crc32 = binascii.crc32(data) & 0xffffffff
    if crc32 == 0xC02F6B4F:
        print i

得到宽度为439,化为16进制得到01b7,在winhex里修改一下再次打开即可看到图片

图片中flag被base32加密,在线网站解一下就可得到flag:flag{utql}

注:有关png格式问题可参考ctfwiki,本题只考察了最简单的考点

crypto部分

这是什么觅马

下载附件解压得到一张日历,日历右下角的纸条上写了字母和数字,根据F对应FridayW对应WednesdayT1对应TuesdayS1对应Saturday(以此类推),F1代表Friday下面的第一个数字即3,将纸条上的所有数字对应出来,可以得到3 1 12 5 14 4 1 18(1虽然在日历中被划掉,但是也要算上,这是个坑),再将得到的数字对应在字母表中,即可得到flag:flag{calendar}

Classical Cipher

下载附件得到一个加密的压缩包和一个txt文件,先看txt文件

压缩包密码:gsv_pvb_rh_zgyzhs

对应明文:  ***_key_**_******

观察给出的密文和明文的对应字母:p→k、v→e、b→y

不难发现p和k在字母表中的对应位置之和加起来刚好等于27,ve和by也一样

这正是一种古典密码:atbash,即埃特巴什码

根据对应表,解得明文:the_key_is_atbash

解开压缩包,得到一张图片,图片上的内容一种是猪圈密码变种,一种是古埃及象形文字

对照解密可得flag:flag{classicalcode}

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!