BugKu CTF(杂项篇MISC)练习—奇怪的png图片

题目

奇怪的png图片

知识点

png图片文件结构,图片隐藏文件,foremost分离,压缩包解密,CRC32爆破,图片尺寸修复

解题步骤

下载下来是file.png,首先用notepad++打开,搜索flag发现文末惊喜,猜测图片还包含文件

用foremost提取出来,又得到一个png图片,一个压缩包,发现压缩包解压需要密码

压缩包解压刚开始使用360压缩打开一直不出现CRC32提示值,之后下载winrar打开出现CRC32提示值(要哭了)

破解压缩包的几种方式(zip伪加密 爆破 CRC32碰撞 已知明文攻击)

crc32爆破:

压缩包压缩文件会附带crc32校验码,如果字节长度比较短的话,可以尝试crc32爆破。

比方说字节长度只有1的话,可以计算所有的字符的crc32码来比较是否有相同的

每个文件都有唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件

CRC的全称是循环冗余校验(Cyclic Redundancy Check, CRC),用来校验文件是否出错但并不能用于自动纠错。
看到这几个文件便猜到需要进行CRC32爆破了

CRC32爆破脚本https://github.com/theonlypwner/crc32

使用方法

python crc32.py reverse 你的crc32密文

这里只举一个例子,crc32值为1d9f11e5,前面加上0x变成16进制

依次得到Awsd2021mzy0

根据提示图片真实crc值,将分离出的png图片用010Editor打开修改正确的CRC值,F5运行发现提示CRC错误,这里我们已经修改正确了,那应该就是图片尺寸不符,接下来获取正确的图片尺寸。

用脚本计算一真实的图片尺寸

import os
import binascii
import struct

crcbp = open("xxx.png", "rb").read()    #打开图片
for i in range(2000):
    for j in range(2000):
        data = crcbp[12:16] + \
            struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        if(crc32 == 0x59f1d4be):    #图片当前CRC
            print(i, j)
            print('hex:', hex(i), hex(j))

在010中修改正确的图片尺寸

保存后打开得到一张带二维码的图片(微信和QQ还扫不出来,百度扫的)

获得密码最后一段9070yo,最终密码Awsd2021mzy09070yo,解压后打开flag.txt获得flag

对于小白的我看着网上的方法做这道题都挺难的,遇到好多问题花费好久呜呜

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值