3.20.2019

Exploiting 101: Que son los Badchars? Generando Badchars desde Python y Mona

Hoy estaremos con los badchars, teniendo una breve introducción de que son y como generarlos, desde Python y con Inmmunity Debugger utlizando el script !mona, si deseas instalar la herramienta y lo que necesitaremos posteriormente puedes ver la entrada anterior Montando un entorno para iniciar en el Exploiting


¿Que son los Badchars?


Los badchars son caracteres inválidos o “malos” los cuales el programa a explotar no los acepta, por lo consiguiente el atacante cuando genere su shellcode la misma no sirve, ya que estos caracteres no fueron identificados y hace que el programa se rompa. Tranquilo al final de la entrada tenemos un breve ejemplo.
Puedes tener el listado de los badchars a mano en un fichero de texto y listo nos olvidamos de los mismos, tambien podemos generarlos y tener a nuestro disposición con un par de comandos desde el mismo Inmunity Debugger con !mona o desde Python ambos lo veremos a continuación.

Listado de Badchars


Un punto a considerar es que el 0 - Null no es utilizado ya que este llegar a ser un badchar de cajon "\x00" en todas las pruebas que estuve realizando en ninguna fue un valor admitido.

badchars = ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")

Generando Badchars desde Inmunity con Mona


Tenemos como primera opción utilizar Mona desde Inmunity para que nos genere todos los badchars que necesitamos para el proceso en el cual posteriormente podemos realizar la detección de los mismos este proceso se explicara en la siguiente entrada totalmente aparte para luego realizar el proceso completo en una sola entrada.

Para tener los badchars nos dirigimos a la parte inferior de Inmunity y ejecutamos:

!mona bytearray

Badchars desde Mona (Inmmunity Debugger)

El resultado del comando tras ser ejecutado es el siguiente, si no configuramos previamente donde queremos que se almacene el log lo tendremos en el mismo directorio donde se encuentra Inmunity Instalado.

================================================================================
  Output generated by mona.py v2.0, rev 583 - Immunity Debugger
  Corelan Team - https://www.corelan.be
================================================================================
  OS : 7, release 6.1.7601
  Process being debugged : SLmail (pid 340)
  Current mona arguments: bytearray
================================================================================
  2019-03-04 09:04:37
================================================================================
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
"\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"

Generando Badchars desde Python


Desde python tambien llegamos a generar los badchars permitiendonos tenerlo a mano y desde la terminal de manera rápida.

import sys
for x in range(0,256):
        sys.stdout.write ("\\x" + '{:02x}'.format(x))

El resultado al ejecutar desde python es el siguiente:

Obteniendo Badchars desde Python

Breve Ejemplo.


Mandamos un array con todos los badchars y en inmmunity en el Stack tenemos la siguiente secuencia.

 Como un breve ejemplo enviamos lo siguiente:

\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\



Identificamos que se tiene 01 02 03 04 05 06 07 08 09 29

El que deberia de seguir en dicha secuencia es 0a pero como no lo tenemos presente este llega  a ser nuestro primer badchar (valor no aceptado) retiramos  del array y se vuelve a enviar.


Este proceso llega a ser un poco moroso para la creación de exploits si fallas en identificar es muy probable que no llegues a obtener el resultado esperado, al decir moroso me refiero cuando uno esta empezado a dar sus primeros pinos hay maneras rápidas de identificar por ejemplo con ayuda de !mona o scripts externos, pero las entradas el objetivo inicial es aprender a mano y luego explicar la automatización.

En proximas entradas iremos ya con la parte práctica, alguna duda en los comentarios.

Es difícil mostrarte confiable cuando la gente tiene que esperarte. - Wes Fessler

Regards,
Snifer
Compartir:

3.11.2019

Exploiting 101: Montando un entorno para iniciar en el Exploiting.

Esta nueva serie de entradas que vienen de la mano del exploiting 101 tendremos un inicio lento con lo que es un Stack Buffer OverFlow, e iremos de a poco avanzando con cosas mas elaboradas, ya que este lado será mi bitacora de inicio en este mundo y en las entradas que tengan relación con el OSCP estara el tag de #RoadToOSCP, para el que quiera tener una referencia.



Para este entorno de prueba necesitamos contar con algunas maquinas virtuales entre ellas tendremos:

  1. Windows XP SP1 - Descarga Mega Password: yisustuto
  2. Windows 7 y superiores: Para ello necesitaremos únicamente descargar la maquina virtual desde el servicio gratuito que nos brinda Microsoft, con un tiempo de prueba https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
  3. Maquina Linux: (No interesa el sabor que elijas solo necesistamos contar con Metasploit y Python)

El desarrollo de los scripts para esta parte de exploiting lo haremos con librerias propias de Python en primera instancia luego veremos a detalle algunos frameworks en específico para migrar los códigos iniciales siendo esto gradual.


Software a tener por ahora instalado en las maquinas virtuales.

1. Inmunity Debugger - Página Oficial para Descargar
2. Mona - Descarga desde el Github
3. Software a Explotar  (Puedes descargarlo para tener todo listo)


Primero tenemos que tener instalados los sistemas operativos a utilizar para las pruebas iniciales que lleguemos a realizar contaremos con  una vez tengamos la máquina virtual es suficiente importar la misma o realizar la instalación en el caso de Windows XP.


Importando Máquina Virtual Windows 7

Instalación de Windows XP

El siguiente paso es descargar Immunity Debugger, Mona además del primer software vulnerable que utilizaremos en el Windows 7 de 32 bits, en las siguientes entradas.

Descarga de Inmmunity Debugger
La instalación de Inmmunity es de una manera tradicional siguiente siguiente siguiente, dar el permiso de instalación de Python2.7 y tendremos listo el entorno la forma de validar la veremos con la configuración de Mona. 

Software a tener instalado

El siguiente paso es la instalación de Mona una vez lo descargamos copiamos el script en el directorio de Inmmunity Debugger PyCommands no hacemos ningún otro proceso adicional. 

Instalación de Mona
Para el que no sepa Mona es un script creado por Corelan para la ayuda de escritura de exploits el mismo esta desarrollado en Python y como veran la instalación es simple.

Validamos la instalación de Mona accediendo a Inmmunity y en la parte inferior !mona una vez realizo tenemos que tener el siguiente mensaje. 

Verificación de instalación de Mona

Contando con este pequeño entorno ya estamos listos para nuestra primera toma de contacto para el tema de exploiting y como hacer la explotación de un Stack Buffer OverFlow, que será nuestro primer objetivo,

"El principio es la mitad del todo" - Pitágoras de Samos


Regards,
Snifer
Compartir: