CTFlearn-misc(fore/prog)-wp(5)

The Keymaker

一道进阶类型的misc, 配合密码学和标记标识符
strings拿到假的flag
CTFlearn{TheKeymakerIsK00l}
之后binwalk, stegsolve没有收获, winhex打开看看16进制数据
CTFlearn-misc(fore/prog)-wp(5)_第1张图片
发现有base64数据, 如果直接复制换行会有问题, 所以还是用strings
strings -n 8 The-Keymaker.jpg

b3BlbnNzbCBlbmMgLWQgLWFlcy0yNTYtY2JjIC1pdiBTT0YwIC1LIFNPUyAtaW4gZmxhZy5lbmMg
LW91dCBmbGFnIC1iYXNlNjQKCml2IGRvZXMgbm90IGluY2x1ZGUgdGhlIG1hcmtlciBvciBsZW5n
dGggb2YgU09GMAoKa2V5IGRvZXMgbm90IGluY2x1ZGUgdGhlIFMwUyBtYXJrZXIKCg==

解码得到三句话

openssl enc -d -aes-256-cbc -iv SOF0 -K SOS -in flag.enc -out flag -base64

iv does not include the marker or length of SOF0

key does not include the S0S marker

flag用AES-256-CBC加密了, 所以需要找到 IV, key, 和加密的flag
需要标记标识符的知识
http://vip.sugovica.hu/Sardi/kepnezo/JPEG%20File%20Layout%20and%20Format.htm
根据SOF0找到IV, 通过SOS找到key
CTFlearn-misc(fore/prog)-wp(5)_第2张图片CTFlearn-misc(fore/prog)-wp(5)_第3张图片

找到SOF0, 长度是0x11, 之后接IV, 找到SOS, 之后接key

IV: 0800BE00C803011100021101031101FF
key: 000C03010002110311003F00F9766BFC44BEDA8F3F5C031B92CB0E92D6BDC952

CTFlearn-misc(fore/prog)-wp(5)_第4张图片

flag:  CmmtaSHhAsK9pLMepyFDl37UTXQT0CMltZk7+4Kaa1svo5vqb6JuczUqQGFJYiycY

解开密码, 拿到flag


F1L3 M1X3R

strings和binwalk都无用, 意料之中, 这是个修复文件的问题
所以直接找修复方法, 题目也给了一个文件标识wiki网站
https://en.wikipedia.org/wiki/List_of_file_signatures
winhex打开, 发现文件头是错误的, 修改一下, 但是依然不能打开, 继续观察16进制文件, 发现修改的不仅仅是文件头, 整个文件的数据按4字节反转过来, 所以这就是题目"Programming might be useful"的意思吧
真就万物皆可逆向呗

with open("fl4g.jpeg", "rb") as fin:
    OFFSET = 4    
    data_rev = b""
    data_read  = bytearray(fin.read(OFFSET))

    while data_read:
        data_rev += data_read[::-1]
        data_read = fin.read(OFFSET)
        
    with open("Flag.jpeg", "wb") as newfile:
        newfile.write(data_rev)

4字节以此读进来, 反转后存入data_rev, 最后写入文件
得到flag
CTFlearn-misc(fore/prog)-wp(5)_第5张图片

Flag{byt3_sw4p}


Seeing is believing

难得有道音频隐写题
丢进kali, file一下, 发现是ogg文件, 修改后缀用Audacity打开
切换到频谱图
CTFlearn-misc(fore/prog)-wp(5)_第6张图片调一下得到完整二维码
CTFlearn-misc(fore/prog)-wp(5)_第7张图片
扫一扫拿到flag

the_flag_is{A_sP3c7r0grAm?!}


The adventures of Boris Ivanov. Part 1.

一张jpg图片, 尝试了stegsolve, strings, binwalk没有新发现
看了wp才知道是用stereogram solver在offset = 102处时能看到隐藏信息
CTFlearn-misc(fore/prog)-wp(5)_第8张图片CTFlearn-misc(fore/prog)-wp(5)_第9张图片这个题有点恶心啊, 藏得那么深就算了(offset 102), 显出来还那么模糊

flag{d0nt_m3s5_w1th_th3_KGB}

(试了很多次才拼对, 果断给差评


The Adventures of Boris Ivanov Part 2

500张png图片, 应该是要自己拼凑起来得到flag
按高方向拼凑, 500*1 * 500 = 500 * 500

from PIL import Image
limgs = []
for i in range(500):
    limgs.append(Image.open(str(i) + ".png"))

concrete = Image.new("RGB", (500, 500))
height = 0

for i in limgs:
    concrete.paste(i, (0, height))
    height += 1
concrete.save("complete.png")
concrete.show()

CTFlearn-misc(fore/prog)-wp(5)_第10张图片 CTFlearn-misc(fore/prog)-wp(5)_第11张图片

一串16进制字符串

666c61677b7468335f4b47425f6c307633735f4354467d

转ascii得到flag

flag{th3_KGB_l0v3s_CTF}


Minions

strings出了一个url

https://mega.nz/file/wZw2nAhS#i3Q0r-R8psiB8zwUrqHTr661d8FiAS1Ott8badDnZkoH
CTFlearn-misc(fore/prog)-wp(5)_第12张图片下载另一张图片
binwalk得到rar压缩包, 解压得到最后一张图片
CTFlearn-misc(fore/prog)-wp(5)_第13张图片
strings拿到flag的加密形式
CTF{VmtaU1IxUXhUbFZSYXpsV1RWUnNRMVpYZEZkYWJFWTJVVmhrVlZGVU1Eaz0=)
base64解码4次得到

CTF{M1NI0NS_ARE_C00L}

小结: 这个隐写题算是把常规隐写的套路组合到了一起, 算是个比较完整的缝合怪, 不过只要按照strings, binwalk, stegsolve, winhex的解题流程公式基本的隐写问题都不是问题


MountainMan

一道非常规隐写(strings, binwalk, stegsolve无解), 没办法, 回到16进制文件的分析----作为隐写问题的最后手段, 题目说了注意0xffd9, 用winhex打开查找ffd9
CTFlearn-misc(fore/prog)-wp(5)_第14张图片CTFlearn-misc(fore/prog)-wp(5)_第15张图片几乎在文件最后找到一个ffd9标志, 没看出有啥线索
不过突然灵光一闪! 全文件只有俩个ffd9, 题目也说了是作为标志的, 那么俩个ffd9可以看做数据流的起始和结束, 所以包裹的数据就是flag!(大胆猜测)
然后根据xor is your friend这条提示, (之前也做了很多xor is friend的题目), 基本上可以想到是xor爆破
上cyber chef解密
给一个类似flag{***}的正则表达式给magic接口, 然后自动解密
CTFlearn-misc(fore/prog)-wp(5)_第16张图片用bruteforce也行, 要自己给已知字符串
CTFlearn-misc(fore/prog)-wp(5)_第17张图片

CTFlearn{Ubuntu_r0ck5}


Brute Force is Fun!

binwalk发现里含zip文件
foremost分离出来得到一个zip, 需要爆破解密
首先尝试了几个密码, 解压了非加密部分, grep -iR flag(筛选掉除flag之外的匹配项)
得到密码提示
在这里插入图片描述就是5位数的爆破, 直接干就完了

from zipfile import ZipFile
from string import digits
import itertools

brute = itertools.product(digits, repeat=5)

with ZipFile("00000012.zip") as zf:
    for i in brute:
        psd = "ctflag" + "".join(i)
        try: 
            zf.extractall(pwd = bytes(psd, 'utf-8'))
            print("[+] password is " + psd)
        except:
            pass

运行脚本, 得到密码ctflag48625, 游戏结束
解压之后是base64
RkxBR3ttYXlfdGhlX2JydXRlX2ZvcmNlX2JlX3dpdGhfeW91fQ==
解码得到flag

FLAG{may_the_brute_force_be_with_you}

爆破原力与你同在

你可能感兴趣的:(CTF-misc)