天天看點

【愚公系列】2021年11月 攻防世界-進階題-MISC-058(2-1)總結

文章目錄

一、2-1

二、答題步驟

1.修改檔案頭

2.根據crc32值爆破圖像寬度

總結

題目連結:

https://adworld.xctf.org.cn/task/task_list?type=misc&number=1&grade=1&page=4

先詳細解釋一下png的檔案頭:

- (固定)八個位元組89 50 4E 47 0D 0A 1A 0A為png的檔案頭

- (固定)四個位元組00 00 00 0D(即為十進制的13)代表資料塊的長度為13

- (固定)四個位元組49 48 44 52(即為ASCII碼的IHDR)是檔案頭資料塊的标示(IDCH)

- (可變)13位資料塊(IHDR)

   - 前四個位元組代表該圖檔的寬

   - 後四個位元組代表該圖檔的高

   - 後五個位元組依次為:

   Bit depth、ColorType、Compression method、Filter method、Interlace method

- (可變)剩餘四位元組為該png的CRC檢驗碼,由從IDCH到IHDR的十七位位元組進行crc計算得到。

也就是說我們可以通過**來得到高度和寬度

恢複png頭為 89 50 4e 47 0d 0a 1a 0a

import struct

import binascii

import os

m = open("misc4.png","rb").read()

for i in range(1024):

   c = m[12:16] + struct.pack('>i', i) + m[20:29]

   crc = binascii.crc32(c) & 0xffffffff

   if crc == 0x932f8a6b:

       print(i)

【愚公系列】2021年11月 攻防世界-進階題-MISC-058(2-1)總結

得到flag :

flag is wdflag{Png_C2c_u_kn0W}

  • 修改檔案頭
  • crc32值爆破圖像寬度

繼續閱讀