Ret2plt
Grundlegende Informationen
Das Ziel dieser Technik wäre es, eine Adresse einer Funktion aus dem PLT zu leaken, um ASLR zu umgehen. Dies liegt daran, dass Sie beispielsweise, wenn Sie die Adresse der Funktion puts
aus der libc leaken, dann berechnen können, wo sich die Basis von libc
befindet und Offset berechnen können, um auf andere Funktionen wie system
zuzugreifen.
Dies kann mit einem pwntools
-Payload wie (von hier) erreicht werden:
Beachten Sie, wie puts
(unter Verwendung der Adresse aus dem PLT) mit der Adresse von puts
aufgerufen wird, die sich in der GOT (Global Offset Table) befindet. Dies liegt daran, dass zum Zeitpunkt des Drucks von puts
der GOT-Eintrag von puts die genaue Adresse von puts
im Speicher enthält.
Beachten Sie auch, wie die Adresse von main
im Exploit verwendet wird, damit beim Beenden von puts
das Binärprogramm main
erneut aufruft anstatt zu beenden (damit die durchgesickerte Adresse weiterhin gültig bleibt).
Beachten Sie, dass für das Funktionieren dieses Vorgangs das Binärprogramm nicht mit PIE kompiliert werden kann oder Sie müssen ein Leck gefunden haben, um PIE zu umgehen, um die Adresse des PLT, GOT und main zu kennen. Andernfalls müssen Sie zuerst PIE umgehen.
Sie können ein vollständiges Beispiel dieses Umgehungsmechanismus hier finden. Dies war der endgültige Exploit aus diesem Beispiel:
Weitere Beispiele & Referenzen
64 Bit, ASLR aktiviert, aber kein PIE, der erste Schritt besteht darin, einen Überlauf bis zum Byte 0x00 des Canary zu füllen und dann puts aufzurufen, um ihn preiszugeben. Mit dem Canary wird ein ROP-Gadget erstellt, um puts aufzurufen, um die Adresse von puts aus dem GOT preiszugeben, und dann ein ROP-Gadget, um
system('/bin/sh')
aufzurufen.64 Bit, ASLR aktiviert, kein Canary, Stack-Überlauf in main von einer Unterfunktion. ROP-Gadget, um puts aufzurufen, um die Adresse von puts aus dem GOT preiszugeben, und dann ein One-Gadget aufzurufen.
Last updated