Explotacin con Metasploit Framework
Csar Cuadra Pacheco, CISSP, CEH, CompTIA Security+ Senior Security Consultant & Penetration Tester [email protected]
www.Open-Sec.com
Metasploit Framework
Metasploit Framework
El Metasploit Framework, es una herramienta para desarrollar y ejecutar exploits contra una mquina remota. Fue creado utilizando el lenguaje de programacin de scripting Perl, aunque actualmente el Metasploit Framework ha sido escrito de nuevo completamente en el lenguaje Ruby.
Open-Sec
Metasploit Framework
El Metasploit Framework, tiene varios componentes y utilidades entre las cuales destacan:
Msfcli (Cliente de Metasploit) Msfconsole (Consola de Metasploit) Msfweb (Servidor e Interfaz web de Metasploit) Msfgui (Interfaz grfica de Metasploit) Msfopcode (Cliente de la base de datos de OPCODES de Metasploit)
Open-Sec
Metasploit Framework
Continuacin
de lista de Metasploit Framework:
utilidades
de
Mspayload (Generador de PAYLOADS de Metasploit) Pattern_create (Genera una cadena con cierto patrn, utilizada para encontrar las direcciones offset) Pattern_offset (Calcula el offset de una cadena especfica)
Open-Sec
Demo: Uso Bsico de Metasploit
Creando Exploits...
ADVERTENCIAS
Practicar esto en la casa es peligroso, practicarlo en la oficina es peor an! Se dar cuenta que su red no esta segura !!
Open-Sec muestra estas tcnicas y herramientas unicamente con fines educativos.
Open-Sec
Cmo se descubren los fallos de Seguridad?
Open-Sec
Cmo se descubren los fallos de Seguridad?
Mientras que para algunos un cuelgue del sistema es slo eso, para otros es un fallo de seguridad que podran aprovechar. En la actualidad se ha hecho muy extendido el uso de fuzzers para descubrir vulnerabilidades. Se pueden descubrir fallos de seguridad mediante la revisin de cdigo fuente. Sometiendo a las aplicaciones a pruebas de intrusin. Muchas veces se descubren fallos de seguridad simplemente utilizando el sistema.
Open-Sec
DEMO: Descubriendo una vulnerabilidad
DEMO: Descubriendo una Vulnerabilidad
Cdigo Fuente de Fuzzer Sencillo en Python Como resultado de la ejecucin del script podemos observar una excepcin en ollydbg, es importante notar los registros ESP y EIP, donde EIP tiene el valor 41414141 el cual esta representado en hexadecimal, en ASCII sera AAAA (que hemos enviado en nuestra peticin), de igual modo el registro ESP tiene valor AAA.......A
Ejecucin del script
Open-Sec
Qu es un Exploit?
Es un programa, sentencia o similar que aprovecha una vulnerabilidad para comprometer la confidencialidad, integridad y/o disponibilidad
Qu es Buffer Overflow?
Qu es Buffer Overflow?
Segn Wikipedia, un desbordamiento de buffer es un error de software que se produce cuando se copia una cantidad de datos sobre un rea que no es lo suficientemente grande para contenerlos, sobrescribiendo de esta manera otras zonas de memoria. Un desbordamiento de buffer ocurre cuando los datos que se escriben en un buffer corrompen aquellos datos en direcciones de memoria adyacentes a los destinados para el buffer, debido a una falta de validacin de los datos de entrada. Esto se da comnmente al copiar cadenas de caracteres de un buffer a otro.
Open-Sec
Cmo crear un exploit?
A continuacin crearemos un exploit para una vulnerabilidad de buffer overflow.
Algunos Conceptos Bsicos
Registros del CPU
EBP (extended base pointer) ESI (extended source index) EDI (extended destination index) ESP (extended stack pointer) EIP (enhanced instruction pointer) Apunta a la siguiente instruccin a se ejecutada.
Open-Sec
Controlando los registros
Para examinar los registros y la ejecucin del programa vulnerable usaremos ollydbg (puede usar algn otro debugger) Debemos encontrar la forma de escribir el registro EIP, para encontrar el offset vamos a hacer uso de pattern_create.rb y pattern_offset.rb de Metasploit.
Open-Sec
DEMO: Controlando los Registros
DEMO: Controlando los Registros
Creando un patrn de caracteres con pattern_create de Metasploit, para ubicar las direcciones (desplazamientos) de los registros del CPU. Enviamos el patrn de caracteres generado al servidor a travs de nuestro buffer.
Revisamos los valores de los registros ESP y EIP en OllyDbg, para luego ingresarlos en pattern_offset y calcular el desplazamiento. Calculamos el desplazamiento con pattern_offset de Metasploit utilizando los datos proporcionados en OllyDbg. Podemos observar que a partir del carcter nro 485 se inicia la escritura en el registro EIP, y que a patir del carcter 493 se inicia la escritura en el registro ESP. Entonces nuestro buffer ser: A*485 + EIP (son 4 bytes) + 4 bytes + ESP (aca va el payload)
Open-Sec
Creando un Exploit sencillo
Utilizaremos un PAYLOAD de Metasploit, debemos tener en cuenta los badchars(caracteres no permitidos) y el espacio disponible para el Exploit. Buscaremos la forma de indicar en el EIP que ejecute nuestro PAYLOAD (que se encuentra en ESP), para esto asignamos a EIP una direccin de memoria que apunte a una instruccin JMP ESP, esto lo podemos ubicar en la base de datos de OPCODES de Metasploit, buscando con OllyDbg o con findjmp2.exe
Open-Sec
Creando un Exploit sencillo
Utilizaremos NOPs(No Operation Command), para indicar al CPU que contine con la secuencia de ejecucin. Para este sencillo ejemplo utilizaremos Python como lenguaje de programacin.
Open-Sec
DEMO: Creando un Exploit Sencillo
Seleccionamos el PAYLOAD deseado en la interfaz web de Metasploit, en este caso utilizaremos Windows Command Shell, Reverse TCP Inline, debido a que nuestra vctima tiene su firewall activado
Por tratarse de una shell reversa (la vctima se conecta con el atacante), necesitamos indicar al PAYLOAD la direccin IP del atacante y el puerto al cua se conectar la vctima, adems en esta parte establecemos los badchars.
DEMO: Creando un Exploit Sencillo
Ahora tenemos nuestro PAYLAOD generado, procedemos a fijarnos en el tamao, que no exceda el tamao que tenemos disponible para nuestro exploit, y copiamos el PAYLOAD para utilizarlo en nuestro exploit.
DEMO: Creando un Exploit Sencillo
Podemos utilizar la aplicacin Findjmp2.exe para ubicar las direcciones de memoria que contienen una llamada al registro ESP (en nuestro caso) para escribirlas en el registro EIP. Con la direccin encontrada, vamos a crear nuestro buffer, de modo tal que el registro EIP se escriba 7C82385D y en el registro ESP se escriba nuestro payload, los espacios intermedios sern llenados con NOPs (0x90)
Open-Sec
DEMO: Creando un Exploit Sencillo
Ponemos en escucha el puerto 4444 en el equipo del atacante. Ejecutamos el exploit
As se ve la aplicacin en la vctima luego de ejecutar el exploit, pueden fijarse en la parte del log donde se enva un string bastante largo lleno de A.
Obtenemos una shell de la vctima.
Open-Sec
Cmo crearlo en Metasploit?
Estructura bsica de un exploit de Metasploit:
Comentario Dependencia Definicin de la clase inclusiones mtodo constructor
Nombre del exploit Descripcin del exploit Ms datos sobre el exploit
Open-Sec
Estructura bsica de un exploit de Metasploit (Cont.)
Informacin para generar el Payload
Espacio disponible Caracteres no vlidos
Plataforma Objetivos Mtodo Exploit
Open-Sec
Demo: Creando un exploit con Metasploit Framework
EXPLOIT en
Metasploit
En el mtodo exploit, primero establecemos conexin con la vctima.
Luego creamos un buffer y llenamos los 485 primeros bytes con caracteres alfanumricos (rand_text_alphanumeric(485)).
Luego aadimos la direccin ret (EIP) al buffer ([target.ret].pack('V')).
A continuacin agregamos 4 NOPs (make_nops(4)).
Finalizamos nuestro buffer agregando el payload seleccionado (payload.encoded).
Ejecutamos el manejador (hadler) Y finalmente desconectamos.
Es importante sealar que en Targets nosotros podemos agregar otros objetivos que no se encuentren actualmente listados, por ejemplo Windows 2003, Windows XP SP3 Spanish, etc, para esto debemos buscar las direcciones de retorno ya sea con un debugger, con findjmp2, con metasploit o en alguna base de datos de opcodes. Open-Sec