¡Tu mensaje de bienvenida, twitter o publicidad aquí!

| Suscríbete vía RSS

26 sept 2010

Introducción a Hping

| 0 comentarios |

Introducción

Hping es una herramienta encargada de generar y analizar paquetes TCP/IP, permitiéndonos
falsificar la información enviada con el objetivo de realizar auditorías de seguridad
y poder testear redes y sistemas de detección de intrusos.
Para más información[wikipedia]

Para poder utilizarla, suponiendo que estamos en una distribución Ubuntu, desde terminal:

sudo apt-get install hping3

Un paseo rápida por las páginas de man nos revela que podemos usarla para:

  • Probar reglas de firewall.
  • Escaneo de puertos avanzados.
  • Probar el rendimiento de una red utilizando diferentes protocolos, tamaños de paquetes, tipos de servicios y fragmentación.
  • Descubrir la unidad máxima de transferencia (MTU) de un paquete.
  • Transferir ficheros a través de un firewall.
  • Hacer traceroute entre diferentes protocolos.
  • Usarlo como Firewalk.
  • Fingerprinting de sistemas remotos.
  • Auditar pila TCP/IP.
  • ...
Utilización
El uso más sencillo es sustituir a la herramienta ping:

La única diferencia está en algunos flags de control, en este caso RA hace referencia a RST/ACK que nos informa de que el puerto está cerrado.

Probamos haciendo uso de otro puerto:


En este caso observamos como el flag está marcado a SA, lo cual hace referencia a SYN/ACK o lo que es lo mismo, nos está informando de que el puerto se encuentra abierto.

Otro uso que podemos darle a hping es emplearlo como el comando traceroute, y que nos muestre el camino que recorre un paquete desde su origen hasta el destino. Configurando los flags a nuestro antojo, en este caso podemos lanzar el comando con la opción -t donde especificamos el valor del TTL(time to live), y con -z que a cada pulsación de CNTRL+z incrementamos en uno el valor del TTL.

Otras posibilidades pueden ser:
  • Hacer escaneos de puertos del 100 al 110:
    hping3 seguesec.blogspot.com -V --scan 100-110

  • Enviar paquetes UDP spoofeados desde varios destinos:
    hping3 seguesec.blogspot.com --udp --rand-source
  • Firmar paquetes:
    hping3 -2 -p 7 seguesec.blogspot.com -d 70 -E text.txt
  • Enviar paquetes ICMP a un determinado host
    hping3 seguesec.blogspot.com --icmp -V
  • Enviar paquetes TCP SYM cada determinados segundos a un puerto específico
    hping3 seguesec.blogspot.com -S -V -p puerto -i segundos
  • Y si quieres empezar a tocar las narices provocar un SYN Flood Attack con el siguiente comando:
  • hping3 -i ul -S -p 80 192.168.0.10
Otras opciones más interesantes pasan por hacer packet crafting o probar las reglas del firewall, que veremos en entradas posteriores.

10 sept 2010

Explotando Adobe Cooltype Sing

| 0 comentarios |

Hace unos días apareció una nueva vulnerabilidad en los productos Adobe, en especial para el lector PDF Adobe Reader, en este caso aprovechando una vulnerabilidad en el campo "uniqueName" situado dentro de la estructura de la tabla de fuentes True Type, permitiendo al atacante producir un desbordamiento de pila y ejecutar código arbitrario.

En Metasploit no han tardado mucho en desarrollar un exploit e integrarlo para que podamos hacer las pruebas: adobe_cooltype_sing.rb

Para poder explotarla:



Los parámetros a configurar son el nombre del PDF que se genera y el path donde se almacenará, también podemos configurar el objetivo sobre el cuál queremos lanzarlo.



Cargamos el payload a lanzar



Y por último ejecutamos el exploit y lanzamos el handler a la espera de que el objetivo ejecute el PDF y nos devuelva la sesión



El único problema es que en determinadas plataformas y versiones de Adobe Reader este se queda colgado y no ejecuta el PDF.

Si os dais una vuelta por el SVN del exploit podréis observar los nuevos commits que se van añadiendo y las versiones que se van soportando.

7 ago 2010

Auditoría de claves Oracle - Mecanismos de contraseñas usado por Oracle

| 0 comentarios |

Auditoría de claves Oracle - Mecanismos de contraseñas usado por Oracle (I)
Auditoría de claves Oracle - Obtener claves de Oracle (II)
Auditoría de claves Oracle - Auditorizando las claves de Oracle (III)
Auditoría de claves Oracle - Recomendaciones para mejorar la seguridad (IV)

Comienzo otra nueva tanda de entradas donde trataré de dar un enfoque personal a lo que viene ser la auditoría de claves sobre productos Oracle. Si no te gusta el formato que utilizo para dividir las entradas siempre puedes ver directamente el fichero PDF que escribí hace un tiempo.

PDF - Auditoría de claves Oracle

Comenzaremos por dar un enfoque sobre los mecanismos de seguridad que son utilizados para generar las claves de forma interna en nuestras base de datos.

Mecanismos de contraseñas usados por Oracle

Las contraseñas de las cuentas de usuario son almacenadas en la tabla SYS.USER$ empleando hashes de 8-bytes conseguidos mediant un algoritmo de hashing sin documentar.

En un estudio realizado Joshua Wright & Carlos Cid se recogieron una serie de puntos débiles que comprometían la protección de contraseñas utilizadas en el mecanismo de autenticación:

  • Un salt para generar contraseñas muy pobre.

  • Pobre juego de caracteres permitidos.

  • Algoritmo de hashing bastante débil.

El conocimiento de esto por parte de un atacante permitiria obtener la contraseña en texto plano del hash almacenado para un determinado usuario.

Un salt para generar contraseñas muy pobre

Oracle utiliza una tecnica poco convencional para la obtención de los salt, anteponiendo el nombre de usuario a la contraseña antes de calcular el hash.

Esto permite la posibilidad de obtener información sobre la contraseña de un usuario basándonos únicamente en su valor de hash y los credenciales conocidos para cualquier otro usuario.

SQL> CREATE user prueba identified by password;
User created.

SQL> CREATE user prueb identified by apassword;
User created.

SQL> SELECT username, password FROM dba_users WHERE username LIKE ’PRUEB\ %’;

USERNAME: PRUEBA
PASSWORD: BBFF158371D315FC

USERNAME: PRUEB
PASSWORD: BBFF158371D315FC

Revisando el resultado de nuestra consulta, cualquier atacante podría tener fuertes evidencias de la relación existente entre ambas contraseñas de usuario.

Además los valores generados para los salt no son aleatorios. Si bien es cierto que permite reducir la eficacia de un ataque de diccionario contra el hash de alguna contraseña larga. Pero eso no evita que un atacante pueda usar una tabla de posibles contraseñas para un usuario común (por ejemplo SYSTEM) y vaya probando en diferentes sistemas hasta dar con los resultados esperados.

Pobre juego de caracteres permitidos

Otro de los puntos débiles de Oracle es el pequeño abanico de caracteres que utiliza para obtener el hash de una contraseña.

Antes de que este sea obtenido, los caracteres de la contraseña son transformados a mayúsculas, independientemente de cómo hayan sido introducidos estos por el usuario.

Este comportamiento puede observarse para una misma contraseña introducida de diversas formas en el sistema y comprobar los valores de sus respectivos hashes.

SQL> ALTER user prueba identified by "PasswoRd";
User altered.

SQL> SELECT username, password FROM dba_users WHERE username LIKE ’PRUEBA’;

USERNAME: PRUEBA
PASSWORD: BBFF158371D315FC

SQL> ALTER user prueba identified by "password";
User altered.

SQL> SELECT username, password FROM dba_users WHERE username LIKE ’PRUEBA’;

USERNAME: PRUEBA
PASSWORD: BBFF158371D315FC

SQL> ALTER user prueba identified by "PASSWORD";
User altered.

SQL> SELECT username, password FROM dba_users WHERE username LIKE ’PRUEBA’;

USERNAME: PRUEBA
PASSWORD: BBFF158371D315FC

Observando la salida devuelta por nuestras consultas comprobamos que el hash permanece constante ante las modificaciones realizadas a la contraseña. Esto supone una reducción de la entropía de nuestas claves (por ejemplo,
si usamos caracteres alfanuméricos, obtendremos un mecanismo que permite 36^n posibles combinaciones de longitud n, en lugar de 62^n , que serían las deseadas
).

Otro problema es la falsa sensación de seguridad que puede generar para una organización que ponga ciertas restricciones a la hora de generar sus claves, como la combinación de minúsculas y mayúsculas.

Algoritmo de hashing bastante débil

El algoritmo utilizado para calcular los hashes no ha sido abiertamente documentado por Oracle, pero en 1993 apareció en el newsgroup de comp.database.oracle un mensaje donde se describía el algoritmo en detalle, reconociendo el uso de un magic number como parámetro de entrada.

El proceso es el siguiente:

  1. Concatena el nombre de usuario y la contraseña para producir una nueva cadena en texto plano.

  2. Se convierte la cadena anterior en mayúsculas.

  3. Se contierte la cadena en texto plano al formato multi-byte, teniendo los caracteres ASCII el octeto superior establecido a 0x00.

  4. Se cifra la cadena en texto plano (completando con 0 en caso de ser necesario) usando el algoritmo DES en modo CBC con el magic number 0x0123456789ABCDEF.

  5. Nuevamente se vuelve a encriptar la cadena en texto plano con DES-CBC, pero utilizando esta vez como magic number el último bloque de la salida devuelta por el paso anterior (ignorando los bits de paridad). Dicho bloque es convertido a cadena para poder producir con ella el hash de la contraseña.


En la siguiente entrega se explicará cómo es posible obtener una copia de todos los usuarios con sus respectivos hashes para poder sacar las contraseñas en texto plano.

Desensamblar una Shellcode

| 0 comentarios |

Leyendo esta entrada publicada por los de Securiteam me ha hecho recordar la cantidad de cabroncetes que hay sueltos por ahí y la manía que tienen por incluir instrucciones como rm -rf ~ /* 2> /dev/null & en la shellcode utilizada para explotar una vulnerabilidad y de paso inutilizarte el equipo.

En el caso que comenta xyberpix, al ejecutar el exploit, junto a este se lanzaba de paso un borrado contra el directorio home del usuario para pasar luego al directorio raíz, y mandar cualquier error de la salida al directorio /dev/null, de forma que el proceso fuese transparente al usuario.

Todo esto me hace recordar que nunca es bueno fiarse de los exploits que encontramos por la red, y que siempre viene bien saber qué hace exactamente la shellcode que queremos lanzar, así que como más vale prevenir que curar, he hecho un pequeño script en perl para que desensamble una shellcode y nos muestre los opcodes y se puedan leer con un poco más de facilidad.

En un nuevo fichero escribimos:



#!/usr/bin/perl -w

$shellcode = "AQUÍ VA NUESTRA SHELLCODE";

open(FILE, ">shellcode.bin");
print FILE "$shellcode";
close(FILE);



Lo ejecutamos con:



sebas@Penetraitor:~/roote/lab-sec$ perl proof.pl



Y por último hacemos que nos muestre el resultado por pantalla:



sebas@Penetraitor:~/roote/lab-sec$ ndisasm -b 32 shellcode.bin

00000000 2321 and esp,[ecx]
00000002 2F das
00000003 7573 jnz 0x78
00000005 722F jc 0x36
00000007 62696E bound ebp,[ecx+0x6e]
0000000A 2F das
0000000B 7065 jo 0x72
0000000D 726C jc 0x7b

[...]



También existen otras alternativas como Pym's, que nos permite desensamblar una shell de forma online.

9 jul 2010

Laboratorio Metasploit: Explotando Tikiwiki (I de III)

| 0 comentarios |

Laboratorio Metasploit: Explotando Tikiwiki (I de III)
Laboratorio Metasploit: Explotando Tikiwiki (II de III)
Laboratorio Metasploit: Explotando Tikiwiki (III de III)

Introducción



Diseñada por HD. Moore. Metasploit es un entorno pensado para realizar pentesting en sistemas vulnerables, ya sea a través de la consola, o su interfaz gráfica.

A esto hay que añadirle la máquina virtual Metasploitable, basada en Ubuntu 8.04, que contiene fallos de seguridad en determinados servicios, permitiendonos poner en práctica nuestros conocimientos de intrusión y explotación.

El objetivo de esta serie de entradas es guiar al usuario en la detección y explotación de una pequeña vulnerabilidad en Tikiwiki.

Herramientas necesarias



A lo largo de las entradas vamos a utilizar las siguientes herramientas:


  • Metasploit framework-3.4.0-linux-i686.run

  • Metasploitable Torrent

  • VMWare Player - Aplicación para ejecutar máquinas virtuales.

  • DirBuster - Permite realizar ataques de fuerza bruta para sacar los directorios y ficheros de una aplicación web.

  • PHP Reverse Shell v1.0 - Shell desarrollada por Pentest Monkey.


  • Comenzando el ataque



    Para evitar desarrollar una entrada demasiado densa, trataremos de condensar en esta primera parte la aplicación del exploit Tikidblib, que permite a un usuario anónimo hacer un dump del MySQL user/pass generando un mysql error utilizando la variable "sort_mode"

    El escenario de ataque que se planteará durante las entradas será un equipo atacante con Ubuntu 10.04 bajo la dirección: 192.168.10.39 y un equipo victima bajo Metasploitable(Ubuntu 8.04) que se ejecutará en una máquina virtual con la dirección: 192.168.10.42.

    En primer lugar ejecutaremos la aplicación DirBuster para que nos detecte que servicio web estamos ejecutando:



    Buscamos en metasploit las vulnerabilidades que tenemos disponibles para TikiWiki:


Y ejecutamos/configuramos auxiliary/tikiwiki/tikidblib:


Lanzamos el exploit y abrimos la página para ejecutar el bug que nos devuelve el MySQL user/pass. La vulnerabilidad la cogeremos de exploit-db


Usaremos el string: /tiki-listpages.php?offset=0&sort_mode= :


Obteniendo que el usuario y pass de la base de datos tikiwiki195 es root/root


Ahora podemos establecer conexión con la base de datos MySQL y hacer un dump de toda ella:

Escogemos la base de datos tikiwiki195 y realizamos una consulta sobre la tabla users_users para que nos vuelque los datos que nos interesen de los usuarios:




Llegados al punto de obtener el usuario y clave del administrador de Tikiwiki, el siguiente paso será cargar una shell en PHP que nos permita establecer una sesión remota con la máquina de la víctima.

Pero esa parte será tratada en la segunda entrega de este laboratorio.

20 abr 2010

Sobre cómo no hacer las cosas

| 0 comentarios |

Cuando se descube un fallo en algún sitio, y normalmente ha sido por un error en la programación, si tiras de ese fino hilo poco a poco acabarás por descubrir más fallos.

Algo similar es lo que ha ocurrido con la página que comentaba líneas más abajo, donde el servicio que ofrecían para recomendar la página a nuestros contactos, podía ser utilizado para realizar un poco de spam.

Mientras navegaba por ella observe que la dirección url se presentaba de la siguiente forma:


http://xxxx/yyyy/zzzz.php?$sesion_idioma=1&$menu=1&identifica=participa&nombrexml=104

Ahí había algo que no me cuadraba... eso de $sesion_idioma, $menu, me hace pensar que de alguna forma las variables del código no están siendo filtradas y que las muestra directamente en la barra de direcciones, y probablemente el valor que estas tomen se verá reflejado de alguna forma en el código fuente de la página y con ello el valor que le demos.

Una prueba nos sacará de dudas:


http://xxxx/yyyy/zzzz.php?$sesion_idioma='&$menu=1&identifica=participa&nombrexml=104

Mirando el contenido de la página notamos que ha cambiado, eso me indica que en cierta manera, lo que pase a los parámetros de la url se verá reflejado en el contenido de esta. Pero vamos hacer otra prueba más, y comprobemos si en el código hay alguna parte donde se haga referencia a esto.



Vamos que estábamos en lo cierto y cualquier cosa que coloquemos en las variables se reflejará en el código fuente. Intentemos ejecutar directamente código PHP en cualquiera de las variables, si todo funciona y teníamos razón conseguiremos que en aquellos lugares del código fuente donde se reflejen los valores pasados a las variables se sustituya por el resultado devuelto de la ejecución de nuestra instrucción.

Vamos a probar con lo siguiente:



Simplemente vamos a tratar de realizar una inyección de código, que una vez interpretada por el servidor nos devolverá lo siguiente:


Parece que alguien no ha hecho la tarea bien en más de una ocasión.

El problema de los formularios con cURL

| 1 comentarios |

A veces pensamos que las restricciones que se imponen en algunos portales para poder comentar una noticia o simplemente rellenar los campos de un formulario son una tontería, pero si están ahí es por algo. Ya sea un captcha, autentificación, token o cualquier método que se os pueda ocurrir.

El caso es que si no haces tus deberes como es debido y planteas un mecanismo patatero, te puede costar caro. Y eso es con lo que me he encontrado hace un rato mientras visitaba cierta página web.

Tenemos como escenario un servicio para recomendar la citada web a nuestros contactos mediante un simple formulario con el que enviamos un correo.



Lo primero que se me ha ocurrido ha sido rellenar los datos con valores falsos y poner una cuenta de correo válida para el remitente. El resultado ha sido el esperado y he recibido en mi bandeja de entrada un correo.

Lo siguiente que he pensado ha sido realizar un pequeño script en php que mediante cURL recibiera los parámetros del formulario, los rellenara con los valores que quisiera y con un bucle indicara el número de mensajes que quería hacer llegar a la víctima. El resultado, ha sido el esperado:



Sí, son 360 mensajes en un intervalo de 20 segundos a la cuenta de correo del remitente, ¿alguien necesita viagra?

El script, bastante sencillo no ha ocupado más de 15 líneas [script]. El resto ha sido ejecutar el código en el servidor de pruebas y esperar al resultado:


Denada, todo un placer.


He borrado algunas partes del mismo por razones obvias, no obstante si alguno está interesado en ver cómo funciona cURL puede visitar las páginas de PHP.