L'ambiente è Windows XP SP3 a 32 bit e i programmi sono stati compilati con Visual C ++ 2008 Express Edition senza DEP, ASLR, SafeSEH e SEHOP.
Ho provato a sfruttare il SEH. Vedo in WinDBG che il programma salta allo shellcode iniettato (che esegue calc.exe) e controllo il puntatore dell'istruzione:
0012fb5c fc cld
0012fb5d e889000000 call 0012fbeb
0012fb62 60 pushad
0012fb63 89e5 mov ebp,esp
0012fb65 31d2 xor edx,edx
:
Quando EIP = 12fb5c
che è l'indirizzo del buffer.
Per qualche ragione, quando premo go
, lo shellcode viene eseguito senza eseguire calc.exe e vedo il messaggio:
0:000> g
eax=00000000 ebx=00000000 ecx=7c800000 edx=00340608 esi=7c90de50 edi=0012f890
eip=7c90e4f4 esp=0012f680 ebp=0012f77c iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!KiFastSystemCallRet:
7c90e4f4 c3 ret
Qualcuno può tentare di spiegare perché non posso eseguire lo shellcode iniettato?
Ho fatto in modo che lo shellcode funzioni e ho anche provato un codice shell diverso. Sono persino riuscito a far passare il programma a un'altra funzione nel codice ed eseguirlo.
Nota che ho avuto lo stesso problema con un altro programma in cui provo a sfruttare il vtable di C ++.
Grazie mille in anticipo.