BMZCTF-端午彩蛋-纪念屈原

rar

下载附件,查看文件头部,是一个rar的压缩包。

在这里插入图片描述

改后缀解压,需要密码,看到压缩包提示:屈原的姓、氏、名、字分别为哪四个字?拼接起来md5加密后即为解压密码

查看百度:屈原(约公元前340—公元前278年),芈姓,屈氏,名平,字原,

组合芈屈平原,写脚本进行md5编码:

import hashlib
s1 = '芈屈平原'.encode('utf-8')
x=hashlib.md5(s1).hexdigest()
print(x)

得到密码:16ccb09f96f27af192f541992560d695

解压后,得到三个文件:先来看看这个吧password,base_data.txt

先来看看这个吧

用010editor打开先来看看这个吧,发现是jpg图片

在这里插入图片描述

改后缀后,查看

在这里插入图片描述

没有什么有用信息。

继续看010editor。

发现一段base64密文:

4pe777iO4pmL77iO4qyn77iO4qyn77iO4qyl77iO4pah77iO4p2S77iO4pmO77iOIOKZk++4juKsp++4jiDimYvvuI4g4pmM77iO4p2N77iO4pe777iOIOKZkO+4juKZk++4juKXj++4juKZj++4jiDirKXvuI7imZPvuI7ip6vvuI7imZLvuI4g4pmL77iOIOKZjO+4juKZk++4juKnq++4jiDimY7vuI7imY/vuI7il7vvuI7ip6vvuI7imZLvuI4g4pah77iO4pmQ77iOIO2gve23j++4ju2gve2zhO+4jg==

base64解密后:

◻︎♋︎⬧︎⬧︎⬥︎□︎❒︎♎︎ ♓︎⬧︎ ♋︎ ♌︎❍︎◻︎ ♐︎♓︎●︎♏︎ ⬥︎♓︎⧫︎♒︎ ♋︎ ♌︎♓︎⧫︎ ♎︎♏︎◻︎⧫︎♒︎ □︎♐︎ 🗏︎📄︎

百度后,得知是wingdings编码

https://lingojam.com/WingDing网站解码:

在这里插入图片描述

得到:p︎a︎s︎s︎w︎o︎r︎d︎ i︎s︎ a︎ b︎m︎p︎ f︎i︎l︎e︎ w︎i︎t︎h︎ a︎ b︎i︎t︎ d︎e︎p︎t︎h︎ o︎f︎ 3︎2︎

告诉我们password文件是个32位的bmp文件。

passwrod

查看password文件:

在这里插入图片描述

只有FF00,只能百度下:

https://blog.csdn.net/yesheng1989/article/details/11595735

得知,现在的password文件中的内容是图片点阵数据

我们需要补全文件头信息头

上面的网页中,我们知道bmp的文件头信息头一共是54个字节,我们在password前插入54个字节

在这里插入图片描述

再载入bmp模板

按网页内容修改对应字节:

在这里插入图片描述
其中文件大小可以查看文件属性查看:
在这里插入图片描述
文件尺寸计算方法为:
(文件大小(324,212)-文件头大小(54))/4=wh=81,039
得到81,039这个数字,然后去http://factordb.com/进行分解
在这里插入图片描述
得到81039 = 3 · 7 · 17 · 227,即:81039=357
227

再修改password文件的后缀为.bmp

打开后得到密码:md5{白帽子社区CTF团队祝您端午安康}

用上面脚本得到密码:74636cc4cfe7cc222130ea50bb2e23c2

base_data.txt文件

打开base_data.txt文件,看到里面是base64编码后的密文,写脚本解码:

import base64

tmp=''
with open(r'C:\Users\Crazy\Desktop\test\base_data.txt','r') as f :
    for i in f:
        tmp +=base64.b64decode(i).decode('utf-8')
        tmp +='\n'
print (tmp)
with open (r'C:\Users\Crazy\Desktop\test\base_data1.txt','w') as f :
    f.write(tmp)

打开base_data1.txt文件:

发现内容格式均为日期+时间+内容

我们将内容copy进excel表,数据分列,并按时间排序,得到如下内容:

在这里插入图片描述

我们将内容列的字符串copy进文件,111.txt

在这里插入图片描述

发现文件开关是504B,猜测是压缩包,写脚本:

tmp = ''
with open(r'C:\Users\Crazy\Desktop\test\111.txt','r')as f:
    for i in f :
        tmp +=i.replace('\n', '')
tmp = bytes.fromhex(tmp)
with open(r'C:\Users\Crazy\Desktop\test\111.zip','wb')as f:
    f.write(tmp)

得到压缩包111.zip。

111.zip

使用上面password.bmp的密码解压111.zip,得到两个文件:DuanWu.png.txtThis-Is-Flag.png

查看This-Is-Flag.png,没什么有用内容。

This-Is-Flag.png

用010editor打开,发现CRC校验报错,怀疑图片尺寸被修改。

在这里插入图片描述

使用脚本爆破:

import struct
import binascii
from Crypto.Util.number import bytes_to_long

img = open(r'C:\Users\Crazy\Desktop\test\DuanWu\This-Is-Flag.png', "rb").read()

for i in range(0xFFFF):
    for j in range(0xFFFF):
        stream = img[12:16] + struct.pack('>i', j)+struct.pack('>i', i) + img[24:29]
        crc = binascii.crc32(stream)
        if crc == bytes_to_long(img[29:33]):
            print(hex(i),hex(j))

得到 i 为0xc8, j为0x5dc

用010editor编辑:

在这里插入图片描述

重新查看This-Is-Flag.png

在这里插入图片描述

发现为flag的参考图

DuanWu.png.txt

查看DuanWu.png.txt

都是十六进制内容,头部看不出什么,尾部发现是png文件头的倒序。写脚本:

with open(r'C:\Users\Crazy\Desktop\test\DuanWu\DuanWu.png.txt','r') as f :
    for i in f :
        tmp = i[::-1]
        tmp = bytes.fromhex(tmp)
with open(r'C:\Users\Crazy\Desktop\test\DuanWu\DuanWu.png','wb') as f1:
    f1.write(tmp)

得到DuanWu.png

在这里插入图片描述

观察后发现,有许多小竖线,有蓝色和红色,蓝色线每列只有一个,估计为修改后的This-Is-Flag.png图中的蓝线,我们以此为基准线,写脚本对齐:

from PIL import Image
file = r'C:\Users\Crazy\Desktop\test\DuanWu\DuanWu.png'
img = Image.open(file)
pixels = img.load()
for r in range(img.size[0]):
    backup_row = []
    for c in range(img.size[1]):
        backup_row+=[pixels[r,c]]

    done = False
    for i in range(0,img.size[1]):
        if done:
            break
        for c in range(img.size[1]):
            pixels[r,(c+i)%img.size[1]] = backup_row[c]
            if pixels[r,163]==(0,0,255)and pixels[r,171]==(0,0,255)and pixels[r,175]==(0,0,255):
                done = True
img.save(r'C:\Users\Crazy\Desktop\test\DuanWu\flag.png')

得到flag.png文件。打开后即是flag:BMZCTF{Mochu7&Cyz-Wish-You-Happy-DuanWu-Festival}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值