Esta técnica de conseguir el PEB está basada en el paper que escribió corelan en donde explica multiples formas
de obtener el kernel base(para hacer shellcodes) adaptandolas a tantas versiones de windows como sea posible,
ami me resultó y de hecho fue una ayuda para crear mis propias shellcodes, esta es mi versión de la fórmula
escrita en AT&T para C, espero en un futuro hablar de como conseguir el kernel base para hacer/editar shellcodes.
/*
Autor : NvK
Creditos : Corelancod3r & SkyLined : http://www.corelan.be || skypher.com
Descripción: Obtener el PEB
*/
long get_PEB(void)
{
    long ptr_peb_base;
    __asm(" \
          xor %ecx, %ecx; \
          mov %fs:0x30(%ecx), %esi; \
          mov 0xc(%esi), %esi; \
          mov 0x1c(%esi), %esi; \
          next_module:; \
          mov 0x8(%esi),%eax; \
          mov 0x20(%esi),%edi; \
          mov (%esi),%esi; \
          cmp %cl, 0x12*2(%edi); \
          jne next_module; \
          ");
    register long *rg_peb_base __asm__("ebx");
    ptr_peb_base= rg_peb_base;
    return(*&ptr_peb_base);
}
Test:
printf("PEB: %p",  get_PEB());
Imagen
Me parece un poco larga. creo, se podrías hacer algo mas corto así:

xor eax,eax
mov eax,[fs:30]


Saludos feo
Imagen
Responder

Volver a “Fuentes”