Stavo leggendo questo articolo dall'istituto di InfoSec:
Ed è stato in grado di seguire fino a quando ha fatto la catena ROP.
Trova che l'offset di printf e execve sia 328160
Quindi trova i seguenti gadget ROP:
0x804886eL: add eax [ebx-0xb8a0008] ; add esp 0x4 ; pop ebx
0x804861fL: call eax ; leave ;;
0x804849cL: pop eax ; pop ebx ; leave ;;
Comprendo che l'idea è di caricare l'indirizzo assoluto di execve in eax e poi chiamare eax, ma dove mi perdo è il modo in cui lo fa.
Il gadget:
0x804886eL: add eax [ebx-0xb8a0008] ; add esp 0x4 ; pop ebx
Aggiunge eax e [ebx - 0xb8a0008] e poi lo memorizza in eax per il prossimo gadget da chiamare.
L'obiettivo ora sembra essere quello di ottenere ebx per contenere l'indirizzo assoluto di printf @ ottenuto, ma invece carica 0x138e9ff4 in ebx, dice il suo perché:
printf @ ha ottenuto + 0xb8a0008 = 0x138e9ff4
Non ho idea di come calcoli il valore 0x138e9ff4, dato che ASLR è abilitato e printf @ got dovrebbe essere diverso ogni volta, e quindi anche il valore caricato in ebx dovrebbe.
Gradirei qualsiasi input che hai