picoctf_2018_leak_me
Schritt
- Routineinspektion, 32-Bit, nx-Schutz ist aktiviert
- Führen Sie es lokal aus, um die allgemeine Situation anzuzeigen
Der ungefähre Ablauf des 32-Bit-IDA-Ladeprogramms besteht darin, zuerst den Namen und dann das Kennwort einzugeben. Auf dem Zielcomputer sollte eine password.txt vorhanden sein, um zu überprüfen, ob die Eingabe korrekt ist Die Flag-Funktion wird aufgerufen und die Flag-Funktion druckt das Flag aus
- Die Position des Parameters v5 (Speichername) und des Parameters s (Speicherflag) auf dem Stapel ist nicht weit entfernt, und wenn der Parameter v5 in Daten eingelesen wird, können die Parameter s überschrieben werden. Der
Unterschied zwischen ihnen0x154-0x54=0x100
und Die Länge der Daten, die wir für v5 eingeben, beträgt genau 0x100. Sie können v5 füllen, gefolgt von s. 34 Zeilen in der Hauptfunktion drucken v5, Puts werden gestoppt, wenn sie auf '\ x00' stoßen, und der Inhalt in v5 ist jetzt0x100*a+password+'\x00'*4c
, so dass das Passwort zusammen mit ihm gedruckt wird.
Hier verwende ich zyklisch, um die Zeichenfolge zum Lesen des Passworts zu generieren, um das Passwort zu
erhaltena_reAllY_s3cuRe_p4s$word_f85406
- Als nächstes erneut nc und geben Sie das Passwort ein
Sie müssen für diese Frage überhaupt keine exp schreiben, aber lassen Sie uns nach dem Lesen des Artikels darüber schreiben.
from pwn import *
p = remote("node3.buuoj.cn",28171)
password = "a_reAllY_s3cuRe_p4s$word_f85406"
p.sendlineafter("What is your name?\n","A")
p.sendlineafter("Please Enter the Password.\n",password)
p.interactive()