Filer: Download challenge files

Writeup: Broken Invoice

Indledende Observationer

Jeg fik udleveret en fil, som ifølge challenge-beskrivelsen var en beskadiget faktura. Efter download kørte jeg:

1
file broken_invoice

Outputtet viste blot:

1
data

Der var altså ingen genkendt filtype, hvilket indikerede, at filens header (magic bytes) sandsynligvis var ødelagt.


Recon / Kortlægning

Jeg åbnede filen i HxD for at inspicere rå bytes.

Allerede i de første bytes kunne jeg se:

1
00 00 44 46 2D 31 2E 34 ...

I “decoded text"-kolonnen i HxD fremgik:

1
.DF-1.4

Det var tydeligt, noget lignede en PDF-header.

En standard PDF starter med følgende magic bytes:

Hex:

1
25 50 44 46 2D

ASCII:

1
%PDF-

I min fil var de første to bytes:

1
00 00

men resten matchede:

1
44 46 2D 31 2E 34

ASCII:

1
DF-1.4

Det betød, at %P (25 50) manglede, og at PDF-headeren derfor var korrupt.


Analyse

Fejlen i filen var simpel:

  • De første to bytes (magic bytes) var blevet overskrevet med 00 00

  • Derfor kunne operativsystemet ikke identificere filtypen

  • PDF-parseren kunne ikke åbne filen


Angrebet

Jeg rettede de første to bytes i HxD:

Fra:

1
00 00 44 46 2D

Til:

1
25 50 44 46 2D

Altså genskabte jeg en korrekt PDF-header og gemte filen:

1
%PDF-

Flaget

Efter rettelsen kunne filen åbnes som en normal PDF.

Inde i dokumentet stod flaget:

1
DDC{ANOTHER_INVOICE_TO_PRINT}

Konklusion

Denne challenge udnyttede en korrupt file header. Ved at identificere manglende magic bytes og genskabe den korrekte PDF-signatur (%PDF-), kunne jeg reparere filen og åbne den. Flaget var derefter synligt i dokumentet.