Bei der Challenge “randy” wird uns eine Binärdatei bereit gestellt und auf “Zufälligkeit” hingeweisen. Nach dem Download starten wir das Programm direkt um dessen Funktionalität zu beobachten.
root@linux64:~# ./randy Password: rup0rt :(
Das Binary verlangt nach der Eingabe eines Passwortes. Bei Eingabe einer beliebigen (falschen) Zeichenfolge erhalten wir nur ein trauriges Smiley. Um zu erfahren, wie das Programm das Passwort verarbeitet und die Korrektheit bestimmt, nutzen wir objdump um den Assembler-Code zu erzeugen.
Darin fingen wir unter anderem folgende Abschnitte:
0000000000400884 <main>: [...] 400958: e8 c3 fc ff ff call 400620 <strlen@plt> 40095d: 48 83 f8 1c cmp rax,0x1c [...] 400983: b8 00 00 00 00 mov eax,0x0 400988: e8 97 fe ff ff call 400824 <wrong>
Zunächst wird die Funktion strlen() aufgerufen um die Länge des von uns eingegebenen Passwortes zu bestimmen. Anschließend wird das Ergebnis mit 0x1c (28) verglichen und bei Misserfolg, das Programm mit der <wrong> Funktion beendet. Wir wissen also, dass das Passwort 28 Zeichen lang sein muss.
Continue reading