comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

ShellCode Kernel32

  • 11 Respuestas
  • 5892 Vistas

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

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« en: Abril 15, 2013, 09:31:29 am »
Código: C
  1. // ShellCode que obtiene la direccion de Kernel32.DLL en el proceso
  2. // Programada por Juan fary (mDrinky)
  3. // drinky.94@hotmail.com
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <windows.h>
  8.  
  9. char code[] = "\x31\xFF\x64\x03\x7F\x30\x8B\x7F\x0C\x8B\x7F\x1C\x8B\x3F\x8B\x57"\
  10.               "\x20\x8B\x4F\x08\x52\x51\x57\x56\xE8\x00\x00\x00\x00\x5B\x81\xEB"\
  11.               "\x1D\x10\x40\x00\x53\x59\x81\xC1\x8A\x10\x40\x00\x53\x81\xC3\x46"\
  12.               "\x10\x40\x00\x51\x52\xFF\xD3\x5B\x5E\x5F\x59\x5A\x8B\x3F\x83\xF8"\
  13.               "\x01\x75\xCB\x89\xC8\xC3\xE8\x00\x00\x00\x00\x5B\x81\xEB\x4B\x10"\
  14.               "\x40\x00\x81\xC3\x62\x10\x40\x00\x55\x89\xE5\x8B\x75\x08\x8B\x4D"\
  15.               "\x0C\x49\x41\xAC\x38\x01\x75\x0D\x3C\x00\x74\x02\xFF\xE3\x80\x39"\
  16.               "\x00\x74\x0B\x75\x00\xB8\x00\x00\x00\x00\x5D\xC2\x08\x00\xB8\x01"\
  17.               "\x00\x00\x00\x5D\xC2\x08\x00\x0A\x0D\x00\x6B\x00\x65\x00\x72\x00"\
  18.               "\x6E\x00\x65\x00\x6C\x00\x33\x00\x32\x00\x2E\x00\x64\x00\x6C\x00\x6C\x00";
  19.  
  20. int main()
  21. {
  22.         int (*func)();
  23.         func = (int (*)()) code;
  24.         printf("Kernel32 Shellcode: 0x%x\n",(int)(*func)());
  25.         printf("KernelGetModuleHandle: 0x%x\n",GetModuleHandle("KERNEL32.DLL"));
  26.         system("PAUSE");
  27.        
  28.         return 0;
  29. }
  30.  

Código: ASM
  1. ; mDrinky
  2.  
  3. format PE Console
  4.  
  5. include 'win32ax.inc'
  6. entry start
  7.  
  8. section '.text' code readable executable
  9. start:
  10. ;db 0x31,0xFF,0x64,0x03,0x7F,0x30,0x8B,0x7F,0x0C,0x8B,0x7F,0x1C,0x8B,0x3F,0x8B,0x57
  11. ;db 0x20,0x8B,0x4F,0x08,0x52,0x51,0x57,0x56,0xE8,0x00,0x00,0x00,0x00,0x5B,0x81,0xEB
  12. ;db 0x1D,0x10,0x40,0x00,0x53,0x59,0x81,0xC1,0x88,0x10,0x40,0x00,0x53,0x81,0xC3,0x44
  13. ;db 0x10,0x40,0x00,0x51,0x52,0xFF,0xD3,0x5B,0x5E,0x5F,0x59,0x5A,0x8B,0x3F,0x83,0xF8
  14. ;db 0x01,0x75,0xCB,0xC3,0xE8,0x00,0x00,0x00,0x00,0x5B,0x81,0xEB,0x49,0x10,0x40,0x00
  15. ;db 0x81,0xC3,0x60,0x10,0x40,0x00,0x55,0x89,0xE5,0x8B,0x75,0x08,0x8B,0x4D,0x0C,0x49
  16. ;db 0x41,0xAC,0x38,0x01,0x75,0x0D,0x3C,0x00,0x74,0x02,0xFF,0xE3,0x80,0x39,0x00,0x74
  17. ;db 0x0B,0x75,0x00,0xB8,0x00,0x00,0x00,0x00,0x5D,0xC2,0x08,0x00,0xB8,0x01,0x00,0x00
  18. ;db 0x00,0x5D,0xC2,0x08,0x00,0x0A,0x0D,0x00,0x6B,0x00,0x65,0x00,0x72,0x00,0x6E,0x00
  19. ;db 0x65,0x00,0x6C,0x00,0x33,0x00,0x32,0x00,0x2E,0x00,0x64,0x00,0x6C,0x00,0x6C,0x00
  20. ;db 0x00
  21.  
  22.        xor edi,edi
  23.        add edi,[fs:edi+30h]
  24.        mov edi,[edi+0ch]
  25.        mov edi,[edi+1ch]
  26.        mov edi,[edi]
  27.  
  28.        next_module:
  29.  
  30.        mov edx,[edi+0x20]
  31.        mov ecx,[edi+0x8]
  32.  
  33.        push edx
  34.        push ecx
  35.        push edi ;..
  36.        push esi ;..
  37.  
  38.        call offset1
  39.        offset1:
  40.        pop ebx
  41.        sub ebx,offset1
  42.  
  43.        push ebx
  44.        pop ecx  ; Para calcular kernel
  45.        add ecx,Kernel
  46.  
  47.        push ebx ; guardamos delta
  48.  
  49.        add ebx,CompararCadenas
  50.  
  51.        push ecx
  52.        push edx
  53.        call ebx ; Funcion comparar
  54.  
  55.        ;stdcall ebx,edx,ecx
  56.  
  57.        pop ebx  ; salvamos el delta
  58.  
  59.        pop esi ;..
  60.        pop edi ;..
  61.        pop ecx
  62.        pop edx
  63.  
  64.        mov edi,[edi]
  65.  
  66.        ;add ebx,next_module
  67.  
  68.        cmp eax,1
  69.        jne next_module
  70.  
  71.        mov eax,ecx   ; EAX = KERNEL32.DLL
  72.  
  73.  
  74.        cinvoke printf,"Mediante el PEB: %x",eax;ecx
  75.        cinvoke printf,salto
  76.  
  77.        cinvoke GetModuleHandleW,Kernel
  78.        cinvoke printf,"Mediante GetModuleHandle: %x",eax
  79.        cinvoke printf,salto
  80.  
  81.  
  82.        ret
  83.  
  84. CompararCadenas:
  85.         ; registros que usa EAX, ECX, ESI, EDI, EBX
  86.  
  87.         call offset2   ; delta offset
  88.         offset2:
  89.         pop ebx
  90.         sub ebx,offset2
  91.  
  92.         add ebx, bucle   ; delta para la etiquta bucle
  93.  
  94.         push ebp
  95.         mov ebp, esp
  96.  
  97.         mov esi,dword[ebp+8]
  98.         mov ecx,dword[ebp+12]
  99.         dec ecx
  100.         bucle:
  101.             inc ecx
  102.             lodsb
  103.             cmp byte[ecx],al
  104.             jne diferentes
  105.             cmp al,0
  106.             je comprobar
  107.             jmp ebx
  108.         comprobar:
  109.             cmp byte[ecx],0
  110.             je iguales
  111.             jne diferentes
  112.         diferentes:
  113.             mov eax,0
  114.             pop ebp
  115.             ret 8
  116.         iguales:
  117.             mov eax,1
  118.             pop ebp
  119.             ret 8
  120.  
  121.        salto              db 10,13,0
  122.        Kernel             db 0x6B,0x00,0x65,0x00,0x72,0x00,0x6E,0x00,0x65,0x00,0x6C,0x00,0x33,0x00,0x32,0x00,0x2E,0x00,0x64,0x00,0x6C,0x00,0x6C,0x00,0x00,0x00
  123.  
  124. section '.idata' import data readable writeable
  125.         library MSVCRT,'msvcrt.dll',\
  126.                 KERNEL32,'KERNEL32.DLL'
  127.  
  128.         import MSVCRT,printf,'printf'
  129.  
  130.         import KERNEL32,lstrcmpW,'lstrcmpW',\
  131.                GetModuleHandleW,'GetModuleHandleW'        

saludos.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5406
  • Actividad:
    11.67%
  • Reputación 33
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Abril 15, 2013, 10:10:03 am »
Pedazo de codigo!
Muchisimas gracias bro!
Te dare tu primer karma!


Desconectado Danyfirex

  • *
  • Underc0der
  • Mensajes: 22
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Abril 19, 2013, 10:08:05 am »
Excelente mDrinky. me podrias decir porque en W7 x64 el código en FASM se cuelga. osea muestra los datos bien pero deja de funcionar.
con  C funciona perfecto.


Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #3 en: Abril 19, 2013, 03:14:41 pm »
Excelente mDrinky. me podrias decir porque en W7 x64 el código en FASM se cuelga. osea muestra los datos bien pero deja de funcionar.
con  C funciona perfecto.

Hola, no tengo x64 y no lo puedo probar bien pero vamos así mirando por encima he he dado cuenta de que aqui:

Código: ASM
  1. cinvoke GetModuleHandleW,Kernel

No sería con cinvoke sino con invoke

Código: ASM
  1. invoke GetModuleHandleW,Kernel

Ya que es una llamada stdcall y no _cdecl

Prueba haber si es eso y me comentas ;)

un saludo!

Desconectado Danyfirex

  • *
  • Underc0der
  • Mensajes: 22
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Abril 19, 2013, 05:22:18 pm »
Como no me di cuenta  >:(  Excelente Capo era eso.  ;D gracias

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #5 en: Abril 19, 2013, 11:55:47 pm »
Como no me di cuenta  >:(  Excelente Capo era eso.  ;D gracias

El fallo era mio, nada de gracias.

Un saludo. ;)
« Última modificación: Abril 19, 2013, 11:58:10 pm por mDrinky »

Desconectado -Nox-

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #6 en: Mayo 15, 2013, 05:58:52 pm »
Funciona en wVista para arriba? Si no mal recuerdo en el orden de inicialización que se cargan los módulos es ntdl.dll, kernelbase.dll, kernel32.dll y tú estás cogiendo el segundo módulo, dando por entendido que es kernel32.dll sin tener en cuenta que kernelbase se carga antes...

Saludos,
Nox.

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #7 en: Mayo 15, 2013, 07:22:27 pm »
Hola iNox, si lees el código completo, vas a ver que va comparando todos los modulos con la cadena "KERNEL32.DLL", hasta que encuentra la cadena verdadera y a apartir de ahí obtiene el modulo.

Creo que funciona en todas las versiones de windows incluso en windows 8.

un saludo!

Desconectado -Nox-

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #8 en: Mayo 16, 2013, 01:25:03 pm »
uh! tienes razón, no le di al scroll para bajar jeje, sin embargo el código se puede reducir bastante, yo hice hace tiempo un escrito acerca del peb y como obtener los módulos:

http://www.noxsoft.net/2012/06/undocumented-peb-accediendo-los-modulos/


Saludos,
Nox.

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #9 en: Mayo 16, 2013, 04:12:04 pm »
Muy bueno iNox, me lo voy a leer sin duda  :)

un saludo!

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #10 en: Mayo 17, 2013, 09:05:37 am »
La verdad es que la shellcode sale 3 veces mas reducida, lo que nose es hasta que punto puede ser fiable comprobar el '3' en la posición 12  :-\

Para FASM.

Código: ASM
  1. db 0x64,0x8B,0x40,0x30,0x8B,0x40,0x0C,0x8D,0x40,0x14,0x31,0xC0,0x64,0x8B,0x40,0x30
  2. db 0x8B,0x40,0x0C,0x8B,0x40,0x14,0x8B,0x00,0x89,0xC2,0x8B,0x52,0x28,0x80,0x7A,0x0C
  3. db 0x33,0x75,0xF3,0x8B,0x40,0x10 ;,0xC3
  4.  
  5. ; eax = Kernel32.dll
  6.  



Muy interesante tu web!!  ;D

Desconectado -Nox-

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #11 en: Junio 17, 2013, 03:07:45 pm »
Es muy fiable :D, no me ha dado problemas hasta ahora ;)

 

¿Te gustó el post? COMPARTILO!



[MASM] Shellcode RunPE

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3353
Último mensaje Junio 05, 2012, 04:44:43 pm
por ANTRAX
[MASM] Shellcode example

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2222
Último mensaje Abril 12, 2012, 10:57:54 am
por ANTRAX