65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
$ 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`:
|
|
|
|
```bash
|
|
$ 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:
|
|
- `89` wurde zu `55` ('U')
|
|
- `0D 0A` (Windows Newline) wurde zu `41 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.
|
|
|
|
1. Öffnen Sie `flag.png` in einem Hex-Editor.
|
|
2. Suchen Sie die ersten 8 Bytes.
|
|
3. Ersetzen Sie sie durch die Standard-PNG-Signatur: `89 50 4E 47 0D 0A 1A 0A`.
|
|
4. Speichern Sie die Datei.
|
|
|
|
Alternativ können wir `printf` verwenden, um den Header über die Befehlszeile zu überschreiben:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
$ 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}`
|