Mi primer shellcode en Windows . Ayuda

Iniciado por Init, 18 Febrero 2018, 01:16 AM

0 Miembros y 1 Visitante están viendo este tema.

Init

Me gustaria que me respondan varias dudas que tengo de este trozo de codigo ... Quiero crear mi primer shellcode para windows pero me he encontrado con una gran obstaculo al empezar y eso es encontrar la dirección de memoria de kernel32.dll. Hasta ahora he probado solo un shellcode que me funciono y es este:

Me parece que ya es muy conocida esta forma de encontrar kernel32:

Syntax NASM

xor     dword    edx, edx
mov    byte      dl, 0x30
mov    dword   edx, [fs:edx]     => (1) A que direccion o a que estructura apunta fs ?? Siempre he visto que cambia de valor. Viendolo con Ollydbg.
mov    dword   edx, [edx + 0xc]     => ? (2)
mov    dword   edx, [edx + 0x1c]   => ? (3)

SEARCH_KERNEL:
       mov  eax, [edx + 0x8], eax    => Busca la cadena KERNEL32.dll
       mov  esi,  [edx + 0x20]          =>
       mov  edx, [edx]                                                         |¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨|
       cmp byte [esi], 0x33             => Espera encontrar el "3" de la cadena kernel 3 2.dll
       jne SEARCH_KERNEL

     ....  Esta es la parte que no entiendo :::

Bueno una vez que lo encuentra la dirección de kernel32 se encuentra en el registro "eax"

(1)(2)(3)  Mi primera duda es que dirección esta el "fs" ?? y luego hay alguna estructura en C que me diga el tamaño de cada dato que hay ahí (RESUMIENDO QUIERO QUE ME EXPLIQUEN QUE ESTA HACIENDO LAS 5 PRIMERAS LINEAS)... Me parece que hay mas formas de encontrar esa dirección ... Si podrían pasarme link donde pueda ver como obtener . Y bueno GRACIAS a los que se han dado la molestia de leer hasta aquí.   (Disculpen mis faltas ortográficas T_T).

MCKSys Argentina

Hola!

Básicamente el códgio usa FS:0x30 (1) para sacar la addr de la PEB.
Luego, en PEB+0xc (2) saca el puntero a PPEB_LDR_DATA.
Después, en PPEB_LDR_DATA+0x1c (3) accede a puntero a FullDllName de la estructura.

Te dejo info para que leas:

FS: https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
PEB: https://msdn.microsoft.com/es-es/library/windows/desktop/aa813706(v=vs.85).aspx
PEB_LDR_DATA: https://msdn.microsoft.com/es-es/library/windows/desktop/aa813708(v=vs.85).aspx

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Init

#2
Cita de: MCKSys Argentina en 18 Febrero 2018, 02:07 AM
Hola!

Básicamente el códgio usa FS:0x30 (1) para sacar la addr de la PEB.
Luego, en PEB+0xc (2) saca el puntero a PPEB_LDR_DATA.
Después, en PPEB_LDR_DATA+0x1c (3) accede a puntero a FullDllName de la estructura.

Te dejo info para que leas:

FS: https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
PEB: https://msdn.microsoft.com/es-es/library/windows/desktop/aa813706(v=vs.85).aspx
PEB_LDR_DATA: https://msdn.microsoft.com/es-es/library/windows/desktop/aa813708(v=vs.85).aspx

Saludos!

Gracias por darte la molestia de leer mi PROBLEMA y darme una respuesta n_n ... Revisare los links que me brindaste . GRACIAS.