文章目錄
一、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)
得到flag :
flag is wdflag{Png_C2c_u_kn0W}
- 修改檔案頭
- crc32值爆破圖像寬度