Ret2syscall
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Informazioni di base
Questo è simile a Ret2lib, tuttavia, in questo caso non chiameremo una funzione da una libreria. In questo caso, tutto sarà preparato per chiamare la syscall sys_execve
con alcuni argomenti per eseguire /bin/sh
. Questa tecnica viene solitamente eseguita su binari compilati staticamente, quindi potrebbero esserci molti gadget e istruzioni syscall.
Per preparare la chiamata per la syscall è necessaria la seguente configurazione:
rax: 59 Specifica sys_execve
rdi: ptr a "/bin/sh" specifica il file da eseguire
rsi: 0 specifica nessun argomento passato
rdx: 0 specifica nessuna variabile d'ambiente passata
Quindi, fondamentalmente è necessario scrivere la stringa /bin/sh
da qualche parte e poi eseguire la syscall
(essendo consapevoli del padding necessario per controllare lo stack). Per questo, abbiamo bisogno di un gadget per scrivere /bin/sh
in un'area conosciuta.
Un'altra syscall interessante da chiamare è mprotect
che permetterebbe a un attaccante di modificare i permessi di una pagina in memoria. Questo può essere combinato con ret2shellcode.
Gadget di registrazione
Iniziamo a trovare come controllare quei registri:
Con questi indirizzi è possibile scrivere il contenuto nello stack e caricarlo nei registri.
Scrivere stringa
Memoria scrivibile
Prima devi trovare un luogo scrivibile nella memoria
Scrivere una stringa in memoria
Poi devi trovare un modo per scrivere contenuti arbitrari in questo indirizzo
Automatizzare la catena ROP
Il seguente comando crea una catena ROP completa sys_execve
dato un binario statico quando ci sono gadget write-what-where e istruzioni syscall:
32 bit
64 bit
Mancanza di Gadget
Se ti mancano gadget, ad esempio per scrivere /bin/sh
in memoria, puoi utilizzare la tecnica SROP per controllare tutti i valori dei registri (inclusi RIP e registri dei parametri) dallo stack:
Esempio di Exploit
Altri Esempi & Riferimenti
64 bit, no PIE, nx, scrivere in qualche memoria un ROP per chiamare
execve
e saltare lì.64 bit, nx, no PIE, scrivere in qualche memoria un ROP per chiamare
execve
e saltare lì. Per scrivere nello stack viene abusata una funzione che esegue operazioni matematiche.64 bit, no PIE, nx, BF canary, scrivere in qualche memoria un ROP per chiamare
execve
e saltare lì.
Impara e pratica il Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated