El entorno es Windows XP SP3 de 32 bits y los programas se compilaron con Visual C ++ 2008 Express Edition sin DEP, ASLR, SafeSEH y SEHOP.
Intenté explotar el SEH. Veo en WinDBG que el programa salta al shellcode inyectado (que ejecuta calc.exe) y controlo el indicador de instrucción:
0012fb5c fc cld
0012fb5d e889000000 call 0012fbeb
0012fb62 60 pushad
0012fb63 89e5 mov ebp,esp
0012fb65 31d2 xor edx,edx
:
Cuando EIP = 12fb5c
, que es la dirección del búfer.
Por alguna razón, cuando presiono go
, el shellcode se ejecuta sin ejecutar calc.exe y veo el mensaje:
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
¿Alguien puede intentar explicar por qué no puedo ejecutar el Shellcode inyectado?
Me aseguré de que el código shell funcione y también probé un código shell diferente. Incluso logré que el programa saltara a otra función en el código y lo ejecutara.
Tenga en cuenta que tuve el mismo problema con otro programa en el que trato de explotar la versión de C ++.
Muchas gracias de antemano.