Estaba leyendo este artículo en el instituto InfoSec:
Y fue capaz de seguirlo hasta que hizo la Cadena ROP.
Encuentra el offset de printf y execve en 328160
Luego encuentra los siguientes artilugios de ROP:
0x804886eL: add eax [ebx-0xb8a0008] ; add esp 0x4 ; pop ebx
0x804861fL: call eax ; leave ;;
0x804849cL: pop eax ; pop ebx ; leave ;;
Entiendo que la idea es cargar la dirección absoluta de execve en eax y luego llamar a eax, pero donde me pierdo es la forma en que lo hace.
El gadget:
0x804886eL: add eax [ebx-0xb8a0008] ; add esp 0x4 ; pop ebx
Agrega eax y [ebx - 0xb8a0008] y luego lo almacena en eax para que llame el siguiente gadget.
El objetivo ahora parece ser conseguir que ebx contenga la dirección absoluta de printf @ got, pero en su lugar, carga 0x138e9ff4 en ebx, dice que es porque:
printf @ got + 0xb8a0008 = 0x138e9ff4
Simplemente no tengo idea de cómo calcula el valor 0x138e9ff4, ya que ASLR está habilitado y printf @ got debería ser diferente cada vez, y por lo tanto, el valor cargado en ebx también debería.
Apreciaría cualquier entrada que tenga