2.2 KiB
Tragic Magic
Tragic Magic ist eine Forensik-Challenge, die eine beschädigte Bilddatei beinhaltet. Uns wird eine Datei namens flag.png zur Verfügung gestellt, sowie ein Hinweis, dass das Dateiübertragungsprotokoll die Binärdaten beschädigt haben könnte.
Informationsbeschaffung
Wir beginnen damit, den Dateityp mit dem file-Befehl zu identifizieren:
$ file flag.png
flag.png: data
Der file-Befehl sagt einfach "data", was bedeutet, dass er die Dateisignatur (Magic Bytes) nicht erkennt. Wenn wir versuchen, das Bild mit einem Viewer zu öffnen, wird dies fehlschlagen.
Analyse
Untersuchen wir die ersten paar Bytes der Datei mit xxd:
$ xxd -l 16 flag.png
00000000: 5550 4e47 4141 1a0a 0000 000d 4948 4452 UPNGAA......IHDR
Wir können die Strings PNG und IHDR in der ASCII-Darstellung deutlich sehen. PNG ist Teil der Standard-Dateisignatur, und IHDR ist der obligatorische erste Chunk jeder gültigen PNG-Datei. Dies bestätigt zweifelsfrei, dass die Datei als PNG-Bild gedacht ist.
Die "Magic Bytes" (die 8-Byte-Dateisignatur) ganz am Anfang sind jedoch inkorrekt.
Gültige PNG-Signatur:
89 50 4E 47 0D 0A 1A 0A (.PNG....)
Unsere Dateisignatur:
55 50 4E 47 41 41 1A 0A (UPNGAA..)
Die Signatur wurde teilweise beschädigt:
89wurde zu55('U')0D 0A(Windows Newline) wurde zu41 41('AA')
Dies passt zum Hinweis über ein "optimales ASCII-Protokoll", das die Binärdaten verunstaltet.
Lösung
Wir müssen den Datei-Header reparieren, damit Bildbetrachter ihn erkennen können.
- Öffnen Sie
flag.pngin einem Hex-Editor. - Suchen Sie die ersten 8 Bytes.
- Ersetzen Sie sie durch die Standard-PNG-Signatur:
89 50 4E 47 0D 0A 1A 0A. - Speichern Sie die Datei.
Alternativ können wir printf verwenden, um den Header über die Befehlszeile zu überschreiben:
printf "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A" | dd of=flag.png bs=1 count=8 conv=notrunc
Nach dem Fixen des Headers wird die Datei korrekt erkannt:
$ file flag.png
flag.png: PNG image data, 256 x 256, 8-bit/color RGB, non-interlaced
Das Öffnen des wiederhergestellten Bildes enthüllt die in den Pixeln geschriebene Flagge:
{flag: corrupted_png_header}