Ich habe heute das erste mal wirklich an einem CTF teilgenommen, der Start war etwas holprig aber ich konnte nun auch mal die Luft des geknackten Rätsels wittern und werde definitiv häufiger Hand anlegen.
Hier nun auch mein erstes WriteUp zur Challenge "How to pronounce GIF".
Gegeben war dieses GIF:
Schritt 1
Als erstes habe ich mir via exiftool
, eog
und stegsolve
das Bild genauer angeschaut und nichts gefunden. Dann habe ich mir das GIF generell etwas genauer angeschaut und festgestellt, dass es wie ein zerteilter QR Code aussieht, weshalb ich einfach mal das Viech zerlegt habe:
Mein Arbeitsverzeichnis:
┌──(um3n㉿Penetration)-[~/Downloads/How to pronounce GIF]
└─$ ls -la
total 120
drwxr-xr-x 4 um3n um3n 4096 Sep 24 21:40 .
drwxr-xr-x 3 um3n um3n 4096 Sep 24 21:40 ..
-rw-r--r-- 1 um3n um3n 106214 Sep 22 01:23 challenge.gif
drwxr-xr-x 2 um3n um3n 4096 Sep 24 21:40 result
drwxr-xr-x 2 um3n um3n 4096 Sep 24 21:40 splitted
Via convert habe ich nun einfach das GIF challenge.gif
in ein PNG aufgeteilt, hier wird nun jedes Bild in der GIF Sequenz in ein eigenes PNG gespeichert.
convert challenge.gif splitted/splitted.png
Nun habe ich mir die einzelnen (119) Bilder etwas genauer angeschaut. Mir vielen die unterschiedlichen Farben der einzelnen QR Codeschnippsel ins Auge, weshalb ich ein mögliches Muster überlegt habt.
Wie man auf dem Screenshot sehen kann, scheinen die unterschiedlichen Farben sich bei jedem 10ten Bild zu wiederholen. Weiter gehören die Bilder in 10ner Schritten augenscheinlich auch zusammen. Also dachte ich mir, wir fügen jedes zehnte Iteration einfach zusammen.
Sicherlich hätte man diese Schleife auch schöner binden können, aber egal 🙂
for i in {0..9};do convert splitted/splitted-{${i},1${i},2${i},3${i},4${i},5${i},6${i},7${i},8${i},9${i},10${i},11${i}}.png -append result/result${i}.png;done
Nun hatte ich meine 10 QRCodes - aber noch nicht meine Flagge.
Nichts liegt hier also näher, als die QRCodes mal auszulesen, da ich ohnehin in Linux unterwegs war kurz zum zbarimg
gegriffen und die Werte ausgelesen:
└─$ zbarimg result/result*
QR-Code:The princess is in another castle
QR-Code:https://bit.ly/3Afouex
QR-Code:f0ll0w 7h3 wh173 r4bb17
QR-Code:https://bitly.com/98K8eH
QR-Code:(\(\
( -.-)
o_(")(")
QR-Code:RFVDVEZ7YU1
QR-Code:https://bit.ly/2YOdoPM
QR-Code:fMV9oYVhYMHJfbjB3P30=
QR-Code:( )( )
(O.O)
o_(")(")
QR-Code:https://www.youtube.com/watch?v=N1AL2EMvVy0
scanned 10 barcode symbols from 10 images in 0.04 seconds
Schaut euch gerne die Videos an, es ist 1A NerdHumor 😀
Was wir allerdings brauchen sind die zwei Schnippsel der zusammengewürfelten Buchstabenketten. (Flagge wurde in zwei QR Codes verteilt)
QR-Code:RFVDVEZ7YU1
QR-Code:fMV9oYVhYMHJfbjB3P30=
Einmal zusammenkopiert RFVDVEZ7YU1fMV9oYVhYMHJfbjB3P30=
und durch den Base64-Wolf gedreht:
└─$ echo RFVDVEZ7YU1fMV9oYVhYMHJfbjB3P30= | base64 --decode
DUCTF{aM_1_haXX0r_n0w?}
Bekommen wir auch schon unsere Flagge.