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
  • 5406 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.         You are not allowed to view links. Register or Login("Kernel32 Shellcode: 0x%x\n",(int)(*func)());
  25.         You are not allowed to view links. Register or Login("KernelGetModuleHandle: 0x%x\n",GetModuleHandle("KERNEL32.DLL"));
  26.         You are not allowed to view links. Register or Login("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: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • 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 »
You are not allowed to view links. Register or Login
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 »
You are not allowed to view links. Register or Login
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:

You are not allowed to view links. Register or Login


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: 3003
Último mensaje Junio 05, 2012, 04:44:43 pm
por ANTRAX
[MASM] Shellcode example

Iniciado por ANTRAX

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