Mostrando entradas con la etiqueta Herramientas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Herramientas. Mostrar todas las entradas

16 de enero de 2013

Recuperando contraseñas de red Windows con mimikatz

Los que me conocen, saben que mimikatz es una de mis herramientas favoritas a la hora de sacar contraseñas y otra información útil de un sistema Windows. Y esto es debido a que Gentil Kiwi (el autor) no para de mejorarla, investigando nuevas "funcionalidades" que Microsoft no reconoce como vulnerabilidades pero que son un riesgo para la seguridad de los usuarios.

Hasta hace poco, mimikatz tan sólo mostraba en texto claro las contraseñas de los usuarios que hubieran iniciado una sesión interactiva en el equipo (iniciando sesión localmente, a través de escritorio remoto...). Hace una semana, se publicó una nueva versión que permitía recuperar las contraseñas que se han utilizado para crear alguna tarea programada y cualquier contraseña de tipo CRED_TYPE_DOMAIN_PASSWORD, esto incluye contraseñas que se hayan utilizado para crear tareas programadas, sesiones guardadas de RDP..., y hoy he podido probar una última versión, que permite obtener las contraseñas que se utilizan al conectarse a un sistema remoto sin llegar a iniciar sesión, por ejemplo, si nos conectamos a una unidad de red remota.

Ésta es una funcionalidad muy esperada porque puede servir para recuperar más credenciales de un sistema una vez comprometido. El problema que le he visto, es que se recuperan las credenciales de los sistemas a los que nos conectamos desde el equipo comprometido, pero no la de las cuentas que se conectan a dicho equipo. Es decir, que si se comprometiera un servidor de ficheros, no podríamos recuperar las contraseñas de todos los usuarios conectados al mismo. Pero por el contrario, si se compromete una estación de trabajo de un administrador que tiene diferentes contraseñas con las que conectarse a diferentes recursos de red, podremos recuperar todas esas contraseñas.

De momento habrá que aprovechar la nueva funcionalidad mientras esperamos algo que nos permita recuperar las credenciales de las cuentas conectadas a un equipo.

La prueba que he hecho ha sido conectarme desde un sistema Windows (TEST) a un segundo (PRUEBAS01) y ejecutar después mimikatz en TEST. Éste ha sido el resultado:

C:\>mimikatz.exe
mimikatz 1.0 x86 (RC)   /* Traitement du Kiwi (Jan 15 2013 06:20:17) */
// http://blog.gentilkiwi.com/mimikatz

mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK

mimikatz # sekurlsa::ssp

Authentification Id         : 0;997
Package d'authentification  : Negotiate
Utilisateur principal       : SERVICIO LOCAL
Domaine d'authentification  : NT AUTHORITY
        ssp :

Authentification Id         : 0;38685
Package d'authentification  : NTLM
Utilisateur principal       : TEST
Domaine d'authentification  : TEST-863C3D4E8A
        ssp :
         [0] { admin ; PRUEBAS01 ; EstaEsMiPassword123 }

Authentification Id         : 0;996
Package d'authentification  : Negotiate
Utilisateur principal       : Servicio de red
Domaine d'authentification  : NT AUTHORITY
        ssp :

Authentification Id         : 0;31314
Package d'authentification  : NTLM
Utilisateur principal       :
Domaine d'authentification  :
        ssp :

Authentification Id         : 0;999
Package d'authentification  : NTLM
Utilisateur principal       : TEST-863C3D4E8A$
Domaine d'authentification  : GRUPO_TRABAJO
        ssp :

mimikatz #

Como se puede ver, mimikatz lista los recursos externos en los que hay una sesión iniciada y las credenciales que se han utilizado para conectarse.

¡Ojo! Ahora mismo, esta nueva funcionalidad tan sólo obtiene las credenciales utilizadas para conectarse a otros sistemas en los procesos de autenticación que se haya utilizado NTLM como protocolo. Es decir, que si en una red local, las conexiones remotas se negocian a través de Kerberos, mimikatz no podrá sacar las credenciales en claro.

Interesante, ¿no?

2 de agosto de 2012

Publicado el código fuente de mimikatz

Hace ya un tiempo que descubrí la herramienta mimikatz pero no había nunca escrito sobre ella porque ya lo hicismos desde aquí y no quería repetir la noticia. También la gente de SbD habló hace muy poco de ella.

El caso, es que a día de hoy la herramienta no es muy conocida. En parte porque su autor, que es un investigador francés, no ha querido traducirla a otro idioma, pero quizá también porque otra gente que ya tiene cierta influencia en este tipo de herramientas se ha dedicado a copiarla y a publicar sus propios derivados por los siete mares, dejando la original en el anonimato.

La herramienta, para quien no la conozca, permite recuperar las contraseñas en claro de todos los usuarios que hayan iniciado sesión en una máquina Windows. Esto significa que no hace falta recurrir al crackeo de los hashes o al Pass-the-Hash para acceder a otros sistemas.

Tiene más funcionalidades como exportar certificados digitales que están marcados con el flag de "No exportables", extraer el hash de los usuarios locales, realizar Pass-the-Hash, hacer trampas en el buscaminas sabiendo dónde están las minas antes de jugar (una de mis favoritas :D), etc. Recuerdo que para que pueda extraer las contraseñas en claro el usuario debe haber iniciado sesión, así que para el resto de usuarios serán necesarios los hashes y el resto del procedimiento que esto implica.

La buena noticia es, que depués de varias entradas en su blog explicando resumidamente cómo accedía a las contraseñas cifradas a través de WDigest y las descifraba utilizando la API de Windows, Gentilkiwi ha acabado publicando el código fuente de la herramienta:

https://code.google.com/p/mimikatz/

Desde luego es una buena noticia ya que nos permitirá adaptar la herramienta y utilizar sus técnicas en otros proyectos además de aprender su funcionamiento interno.

¿Qué os parece, ya tenéis alguna idea?

25 de junio de 2012

OAuzz, el fuzzer de OAuth

Después de todo este tiempo que he estado "desaparecido" por diversos motivos, he querido volver a lo grande, así que os presento en lo que he estado trabajando últimamente: OAuzz.

Hace ya un tiempo os presenté el protocolo de autenticación OAuth [1][2][3][4] y cómo de necesario era en la época actual, donde gran parte de las aplicaciones que podemos encontrar en markets usan servicios de otras grandes empresas (Google, Facebook, Twitter...) para ofrecer su servicio.

El acceso a los servicios finales suele llevarse a cabo por medio de APIs que los proveedores de servicio ofrecen y es ahí donde se exige OAuth para llevar a cabo la autenticación.

A la hora de tratar de analizar la seguridad de dichas APIs, nos encontramos un problema ya que cada petición tiene que ser firmada y hacerlo manualmente es realmente tedioso aunque existen herramientas que te ayudan a hacerlo... Creedme, pasar unos 3 minutos para generar cada petición hace que se te quiten las ganas de realizarlo de manera manual (lo he vivido).

Por ello me vi obligado a desarrollar OAuzz, un fuzzer que permite auditar aplicaciones basadas en OAuth, ya que ella sola se encarga de firmar todas las peticiones que va realizando.

Interfaz de OAuzz.

OAuzz proporciona una consola desde la que se van introduciendo los diversos comandos o se puede llamar haciendo referencia a un script en donde ya estén definidos dichos comandos:

Llamando a OAuzz con un script.

Al principio puede resultar un poco compleja, pero esto se debe a que hay que familiarizarse con los concepto de OAuth. Una vez se tenga claro cómo funciona el protocolo, OAuzz es muy sencilla de utilizar.

Realizando el fuzzing sobre una URL.

Podéis encontrar la herramienta y un pequeño manual de cómo utilizarla en su sitio de Google Code:

http://code.google.com/p/oauzz/

En las próximas semanas iré publicando más información sobre esta herramienta y su funcionamiento.

24 de noviembre de 2011

Jugando con la Wi-Fi desde Android (II)

En la entrada anterior estuvimos viendo cómo la configuración de fábrica de los routers que venden los ISP españoles no tiene nada de segura. En esta entrada os vamos a mostrar, desde un punto de vista práctico, lo importante que es el uso de canales cifrados cuando estemos trabajando con datos confidenciales o sensibles.

B.E.A.S.T hizo que nos empezáramos a plantear la seguridad del uso de canales cifrados por medio de SSL y TLS, aunque la realidad es que para su explotación en la práctica hacen falta una serie de requisitos que lo hacen relativamente complejo. Además, la vulnerabilidad publicada que explota B.E.A.S.T. tan sólo afecta a algoritmos de cifrado por bloques, por lo que bastaría con definir el conjunto de algoritmos soportados por el servidor a únicamente los algoritmos de cifrado por flujo que soportan tanto SSL como TLS (versión 1).

Dejando a parte el tema de B.E.A.S.T., la realidad es que a día de hoy el uso de SSL y TLS es una necesidad básica en Internet. Gracias a estos protocolos podemos confiar que transacciones bancarias, acceso a datos personales o confidenciales, conexiones a servidores que almacenan información sensible... son "seguras".

No obstante, aunque ya todos los bancos y la mayoría de comercios electrónicos implementan estos protocolos para realizar las transacciones comerciales, existen multitud de sitios web que todavía no los utilizan o dan a elegir al usuario. De los que usamos a diario yo destacaría algunas redes sociales como Facebook, Twitter o tuenti.

Teniendo en cuenta que en estas redes sociales tendemos a publicar toda nuestra vida "con pelos y señales", el hecho de que alguien pudiera entrar en nuestra cuenta para hacerse pasar por nosotros, además de un delito podría significar un DESASTRE en nuestra vida social (en la de unos más que en la de otros...).

Lo que vengo a decir es que muy pocos usuarios están concienciados de lo importante que es marcar la casilla "Activar navegación segura" una vez que hemos creado nuestros perfiles en estos servicios. Y si tenemos en cuenta lo fácil que nos resultó acceder a la red del amigo que no nos quería dar la clave de su Wi-Fi en la entrada anterior, el robo de sesiones de alguno de estos servicios es igual de trivial y tan sólo nos llevará un par de minutos.

En el siguiente vídeo vamos a ver cómo utilizando la herramienta para Android DroidSheep, tardamos menos de un par de minutos en robar la sesión de un usuario de Facebook que está conectado a la misma red Wi-Fi que nosotros.

Para los que no conocen la herramienta, os la comento un poco por encima antes de que veáis lo fácil que es utilizarla. Lo que hace es ejecutar un ARP Spoofing para interponerse entre la puerta de enlace (el router) y los usuarios de una Wi-Fi, es decir, un ataque MitM. A partir de ese momento, comienza a capturar todo el tráfico rescatando cookies de sesión en servicios conocidos (y no conocidos) que va mostrando por pantalla conforme las va analizando. Después proporciona diferentes opciones para enviar la cookie a una cuenta de correo electrónico o, directamente, acceder a la cuenta capturada desde el navegador del móvil.


Conozco a más de una persona que se configuró la navegación segura después de que le enseñara lo que podía hacer desde el móvil... Espero que esta entrada sirva para concienciar a más usuarios de lo importante que es fijarnos en que las páginas en las que introducimos nuestros datos comienzan por https en lugar de por http.

Entradas anteriores:
Jugando con la Wi-Fi desde Android (I) 
Otras entradas relacionadas:
Firesheep bajo Linux
FireSheep vs FireSheperd

14 de noviembre de 2011

Jugando con la Wi-Fi desde Android (I)

Las nuevas tecnologías han conseguido que prácticamente todos llevemos en el bolsillo un teléfono que sea más potente que los ordenadores de hace unos pocos años. Además de la potencia de cálculo, los nuevos smartphones nos permiten transmitir información por medio de diversas tecnologías.

En esta serie de entradas, voy a hablaros de algunas cosas básicas que podemos hacer con nuestro teléfono Android a través de Wi-Fi y sin apenas esfuerzo.

Lo primero de todo es conectarnos a una red. Pero si estamos en la calle o en casa de alguien que no nos quiera decir su clave de la Wi-Fi porque no se fíe de nosotros... podríamos tener un problema. Por suerte, los ISPs españoles distribuyen routers Wi-Fi con contraseñas por defecto y que son fácilmente predecibles conociendo el BSSID (MAC del punto de acceso) y el ESSID de la red (el nombre).

Para obtener la clave de alguno de los puntos de acceso que nos rodean, podemos utilizar muchas herramientas. Yo voy a pasar a describir las que, por uno u otro motivo, a mí más me gustan...

La primera de ellas es pulWifi, cuya pantalla principal tiene el siguiente aspecto:


Como vemos la aplicación, divide las redes que detecta en dos colores: verde, que se corresponde con aquellas redes que están abiertas o de las que podemos obtener la clave fácilmente; y rojo, las redes de las que no puede recuperar la clave. También nos indica con un diagrama la potencia de la señal para que sepamos a cuál nos interesa más conectarnos.

Si pulsamos sobre cualquiera de las redes de las que queremos recuperar la clave nos aparece la siguiente ventana. En ella nos da la opción de ver cuál es la clave (útil si necesitas copiarla en algún lado) y de copiarla directamente en el portapapeles.


Si optamos por la opción de copiar la clave, nos abre directamente el panel de Ajustes Wi-Fi de Android, en donde tan sólo nos quedaría buscar cuál es la red a la que estamos intentando conectarnos y pegar la clave desde el portapapeles:


Cuando le demos tiempo para que se autentique comprobaremos que nos hemos conectado sin ningún problema:


Dependiendo del tipo de red que sea, es posible que no nos indique una sola clave sino un repertorio de las posibles (suelen ser 10). En este caso tendremos que ir probando con cada una de ellas hasta que demos con la correcta.


En general, pulWifi es capaz de recuperar la clave de redes WLAN_XXXX, WLANXXXXXX, YACOMXXXXXX, WIFIXXXXXX y JAZZTEL_XXXX (aunque de esta última no siempre es cierto, como vamos a ver un poco más adelante...).

Otra herramienta tan útil como la anterior es WLANAudit.

Algunas diferencias con pulWifi es que en WLANAudit no podemos saber de una manera rápida de qué redes podemos recuperar la clave, sino que tenemos que ir mirando red por red cuáles es capaz de romper:


Este problema no lo tiene, por ejemplo, Auditfi. En este caso, se nos permite mostrar tan sólo las redes vulnerables y nos las lista con toda la información que nos interesa: ESSID, clave, potencia y BSSID.


Como podéis ver en las imágenes, una de las redes vulnerables es del tipo JAZZTEL_XXXX, que es de la que se muestra la segunda captura con la clave. Aunque, por motivos evidentes, he tapado el nombre de la red, si volvéis a la primera captura de pulWifi y os fijáis en la primera de las que aparecen en rojo (de las que no puede recuperar la clave) veréis que se trata de la misma red.

Es por ello que os comentaba que pulWifi no siempre funciona con las redes JAZZTEL_XXXX. Sin embargo tanto Auditfi, como wifiPass las soportan a la perfección.

Esta última herramienta de las que os voy a hablar (wifiPass) es muy parecida a Auditfi. Aunque en este caso directamente sólo muestra las redes vulnerables sin ninguna más información. Pulsando sobre cada una de las redes vamos viendo las claves y copiándolas al portapapeles:


Éstas son, tan sólo, algunas de las muchas herramientas para Android que nos permiten auditar la seguridad de NUESTRA red Wi-Fi. Otros ejemplos son HHG5XX WEP scanner o Penetrate Pro, de la que no hace mucho hablaron en Seguridad Wireless.

Como veis, aunque los ISPs nos vendan que la seguridad de nuestra Wi-Fi es la correcta por estar utilizando WPA2, no tenemos que dejad de cambiar las contraseñas y ESSID por defecto que vienen con los routers.

Espero que os haya resultado interesante la entrada y os animo a que os pongáis en contacto con nosotros si conocéis alguna herramienta parecida.

30 de septiembre de 2011

New version of findmyhash


We have published findmyhash version 1.1.0. It adds two new online services and it supports 7 new algorithms.

New online services are:


List of complete supported algorithms is:

  • MD4
  • MD5
  • SHA1
  • SHA224
  • SHA256
  • SHA384
  • SHA512
  • RMD160
  • GOST
  • WHIRLPOOL
  • LM
  • NTLM
  • MYSQL (3, 4 y 5)
  • CISCO7
  • JUNIPER
  • LDAP_MD5
  • LDAP_SHA1


The project URL is:
http://code.google.com/p/findmyhash/

You can download the application from here:
http://code.google.com/p/findmyhash/downloads/list

Nueva versión de findmyhash

Hemos publicado la versión 1.1.0 de findmyhash en la que añadimos dos nuevos servicios online y soporte para 7 nuevos algoritmos.

Los nuevos servicios online son:


El listado completo de los algoritmos soportados es:

  • MD4
  • MD5
  • SHA1
  • SHA224
  • SHA256
  • SHA384
  • SHA512
  • RMD160
  • GOST
  • WHIRLPOOL
  • LM
  • NTLM
  • MYSQL (3, 4 y 5)
  • CISCO7
  • JUNIPER
  • LDAP_MD5
  • LDAP_SHA1


Podéis acceder al proyecto en la URL:
http://code.google.com/p/findmyhash/

Podéis descargar directamente la nueva versión desde:
http://code.google.com/p/findmyhash/downloads/list

23 de septiembre de 2011

"Cracking" hashes with findmyhash

findmyhash is a Python script which has been developed to "crack" different types of password hashes using multiple cracking online services.

The goal of this application is to increase cracking chances when you don't have the correct Rainbow Table. So you only have to use findmyhash which will search in several online databases automatically.

Right now, it supports nine different hash algorithms: MD4, MD5, SHA1, SHA256, RMD160, MYSQL, CISCO7, LM and NTLM.

We have mainly test it with MD5, LM and NTLM hashes because they are the most common ones. The results are very good and we can say that with LM / NTLM, findmyhash can crack between 60 and 70% of the hashes if you specify both values. 

We have conducted these tests with 100 actual password hashes (extracted from real Active Directories) and we could crack passwords like "Dba$23.8-J", "Jua!gar8012", "$3St4P4$_0rDd3" or "7:23^Xl0|aY.6=".

We encourage you to test findmyhash and to give us your feedback.

The project URL is:

You can download the application from here:

"Crackeando" hashes con findmyhash

findmyhash es un script (¿aplicación?) desarrollado en Python que utiliza un total de 49 servicios online de crackeo de contraseñas.

El objetivo con el que hemos desarrollado esta aplicación es aumentar las posibilidades de romper un hash en aquellas situaciones en las que no disponemos de las Rainbow Tables necesarias. De esta manera, basta con introducir nuestros hashes en la aplicación y ella se encarga de buscarla en diferentes bases de datos online mostrando el resultado final.

Actualmente soporta diez tipos de hashes (algoritmos) diferentes: MD4, MD5, SHA1, SHA256, RMD160, LM, NTLM, MYSQL, CISCO7 y JUNIPER.

Hasta ahora, hemos realizado pruebas principalmente con MD5, LM y NTLM, por ser los más habituales, con unos resultados bastantes satisfactorios. En el caso de LM / NTLM, por ejemplo, existe un porcentaje de acierto de entre el 60 y el 70% (siempre y cuando se disponga del hash LM).

Para realizar estas pruebas hemos utilizado un total de 100 hashes de contraseñas reales (que se están/estaban utilizando en algún directorio activo) con ejemplos como: "Dba$23.8-J", "Jua!gar8012", "$3St4P4$_0rDd3" ó "7:23^Xl0|aY.6=".

Os animamos a que la probéis y nos digáis si os gusta y qué modificaríais / añadiríais.

La URL del proyecto es:
http://code.google.com/p/findmyhash/

Y podéis descargar la aplicación directamente desde aquí:
http://code.google.com/p/findmyhash/downloads/list

12 de septiembre de 2011

Nessus y CentOS - Resolviendo algunos problemas

Resulta que estábamos en cierta ocasión realizando una auditoría de caja blanca a un sistema operativo CentOS 5.3, con tan mala suerte que lo habían securizado.

Al iniciar la auditoría, a pesar de que teníamos credenciales como root en el sistema a analizar, Nessus nos devolvía la siguiente pantalla:


Aunque las credenciales sean válidas, si el plugin de Nessus no es capaz de identificar qué tipo de sistema es, nos va a responder diciendo que las credenciales son inválidas o que el sistema no está soportado, como se puede observar.

Buscando cómo realizaba Nessus este tipo de comprobación, llegamos a localizar el plugin con el cual realizaba la autenticación. Para el caso de nuestra instalación el plugin es: /opt/nessus/lib/nessus/plugins/ssh_get_info.nasl.

Analizando el fichero (ssh_get_info.nasl), llegamos a un punto en el que observamos que analizaba el contenido del fichero /etc/redhat-releases (entre otros) de la máquina objetivo del análisis para tratar de identificar con qué sistema estaba trabajando.

Hay un punto concreto en el que realiza lo siguiente:

[...]
(524) buf = info_send_cmd(cmd: "cat /etc/redhat-release");
[...]
(580) else if ( "CentOS" >< buf )
[...]

La línea 524 lo que hace es leer el contenido del fichero /etc/redhat-release del sistema objetivo, mientras que la línea 580 comprueba si la cadena "CentOS" está contenida en la variable 'buf' (que almacena el contenido del fichero).

La forma fácil de solucionar nuestro problema es modificar el contenido original del fichero /etc/redhat-release de la máquina a auditar añadiendo una línea con la cadena "CentOS release 5 (Final)" para que el plugin de Nessus, al pasar por la línea 580, detecte el sistema. Y efectivamente, al realizar de nuevo el análisis con esto modificado, el resultado es lo que se muestra a continuación:


Es decir, nos permite loguearnos por ssh en el sistema analizado y sacar los resultados que esperábamos.

PD: Mis agradecimientos a Fernando Saavedra, compañero y colega que siempre está dispuesto a ponerse a investigar todo lo que va surgiendo.

8 de septiembre de 2011

CrypTool, un acercamiento a la criptografía

Hoy voy a hablaros de una herramienta que, aunque tenga un objetivo docente, puede llegar a ser muy útil para tratar temas de cifrado y criptoanálisis.

La herramienta en cuestión es CrypTool. En la actualidad existen diferentes cuatro ramas de desarrollo: 1.x (la rama principal), 2.0 (que cambia completamente respecto a la anterior, siendo ésta más orientada a la docencia), JCrypTool (multiplataforma al estar desarrollada en Java) y CrypTool online (más pobre que las anteriores, pero también merece darse un paseo por la web).

Yo voy a hablaros de la que, en mi opinión y por mi profesión, considero más útil y es la de la rama principal, que va por la versión 1.4.30.

¿Qué nos ofrece CrypTool?

Pues prácticamente nos permite realizar cualquier operación relacionada con la criptografía. Por un lado existe la posibilidad de utilizar cifrados clásicos (César, Vigenère, Vernam, Solitario...) así como algunos de los actuales, tanto simétricos (DES, Triple DES, Rijndael...) como asimétricos (RSA y otros cifrados híbridos).


También se pueden calcular diferentes hashes, firmar digitalmente documentos a partir de claves que se pueden crear directamente desde la aplicación o incluso importando tus certificados externos, aplicar diferentes algoritmos de codificación...


Por otro lado, nos ofrece algunas herramientas que pueden ayudar durante un criptoanálisis. Así, se puede calcular la entropía de un texto, realizar un análisis de frecuencias de los caracteres utilizados así como de n-gramas, calcular la autocorrelación, la periodicidad...

También tiene algunos métodos de criptoanálisis automáticos implementados para casos de los que sólo se disponga del texto cifrado o con texto claro conocido. Para los algoritmos más complejos, presenta asistentes que automatiza algunas partes del procedimiento.

Resultado de criptoanálisis automático a alg. César

¿"Sólo" esto?

Como dije al principio, el objetivo principal de la herramienta es formar a la gente sobre criptografía. De este modo, tiene módulos que explican de una manera muy visual e interactiva conceptos que pueden resultar complejos al principio como diferentes tipos de ataques (MitM, Side Channel Attack...), algoritmos de firma o de autenticación, etc.


Os recomiendo que le echéis un vistazo porque puede llegar a ser bastante útil en muchas situaciones en las que necesitamos cifrar un determinado texto o utilizar cierto algoritmo; además de para refrescar conceptos que tengamos un poco oxidados por no haberlos utilizado mucho.

La web principal del proyecto es:

http://www.cryptool.org/

20 de agosto de 2011

Nueva versión beta de "googler"

Todo cambia con el paso del tiempo y tanto Google como Bing lo han hecho desde que publicamos la primera versión beta de "googler".

Los cambios que habían realizado en sus páginas de resultados había hecho que googler no mostrara los resultados de Bing ni la descripción de los resultados de Google.

Por ello he actualizado esta extensión de Chrome para que siga funcionando y muestre todos los resultados de ambos motores de búsqueda.

Todavía es una versión beta, debido a que Google pide un captcha tras varias consultas. Estoy trabajando en ello y cuando lo tenga resuelto publicaremos la primera versión ¿estable?. También prometo subirla a los repositorios de Chrome para que las actualizaciones sean automáticas y no haya que desinstalar la versión anterior e instalar la nueva.

Hasta entonces os dejo el enlace desde donde podéis descargar la nueva versión:
https://googler-extension.googlecode.com/files/googler_v0.2.crx

Os recuerdo que podéis seguir la evolución del proyecto en :
https://code.google.com/p/googler-extension/

Y os animo a sugerir funcionalidades y mejoras que os gustaría que incluyera en la próxima versión, además de comunicarme los posibles bugs que hayáis detectado:
https://code.google.com/p/googler-extension/issues/list

¡¡Hasta la próxima entrada!!

24 de abril de 2011

Firesheep bajo Linux

Mucho se ha hablado de Firesheep, esa pequeña extension de Firefox que nos permite capturar las sesiones HTTP que estén presentes en nuestro mismo dominio de colisión.
Cierto es que este tipo de ataques se conocen desde hace bastante tiempo, como se puede ver en http://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-perry.pdf

En este artículo no se va a tratar de aspectos técnicos de la implementación de Firesheep, ni de session sidejacking, eso lo haremos en artículos posteriores.
Por ahora, nos vamos a concentrar en la compilación y ejecución de Firesheep sobre Linux.

El código de Firesheep está disponible en https://github.com/codebutler/firesheep
La extensión está programada en C++ y JavaScript usando como backend de captura las libpcap (winpcap en el caso de Windows).

En principio, esta extensión estaba disponible sólo para Windows y MAC, pero el 5 de Noviembre de 2010 se realizó el commit con el código de Linux como se puede ver aquí https://github.com/codebutler/firesheep/commit/f6ced0af100df60d472f760bc9b47fa05f4ebfb1

Si nos fijamos en los comentarios de los commits, podemos leer:

* Added linux support using Michajlo Matijkiw's work with various fixes
* Needs policykit installed (no need to manualy set permissions on backend)

Para bajar y compilar Firesheep, usamos git & autotools:


git clone git://github.com/mickflemm/firesheep.git
cd firesheep
git submodule update --init
./autogen.sh --with-xulrunner-sdk=/usr/lib/xulrunner-devel-1.9.2.13
make
firefox build/firesheep.xpi
cd ~/.mozilla/firefox/iquftp6a.default/extensions/firesheep@codebutler.com/platform/Linux_x86_64-gcc3sudo
./firesheep-backend --fix-permissions
airmon-ng wlan0 start


Como se puede intuir, Firesheep usa un binario de backend, el cual le hace de interfaz con las libpcap y los dispositivos de captura de la máquina. Este binario se suele encontrar en ~/.mozilla/firefox/xxxXXXxXX.default/extensions/firesheep@codebutler.com/platform/Linux_x86_64-gcc3/firesheep-backend en las máquinas de 64bits una vez instalada la extensión en el navegador Firefox.


usuario@studio:~/.mozilla/firefox/asddas.default/extensions/firesheep@codebutler.com/platform/Linux_x86_64-gcc3$ ./firesheep-backend --help
Syntax: ./firesheep-backend <iface> <capture filter>


Si miramos el código que procesa los *argv[] del backend en backend/src/main.cpp, allí podemos ver los parámetros que le podemos pasar al binario, justo a partir de la línea 52:


53 if (argc > 1) {
54 if (argv[1] == string("--fix-permissions")) {
55 if (platform.is_root()) {
56 if (platform.check_permissions()) {
57 /* Nothing to do */
58 return EXIT_SUCCESS;
59 } else {
60 platform.fix_permissions();
61 return EXIT_SUCCESS;
62 }
63 } else {
64 bool success = platform.run_privileged();
65 return (success) ? EXIT_SUCCESS : EXIT_FAILURE;
66 }
67 } else if (argv[1] == string("--list-interfaces")) {
68 list_interfaces(&platform);
69 return EXIT_SUCCESS;
70 }
71 }
72
73 if (!platform.is_root()) {
74 cerr << "Run --fix-permissions first." << endl;
75 return EXIT_FAILURE;
76 }
77
78 if (argc < 3) {
79 cerr << "Syntax: " << argv[0] << " <iface> <capture filter>" << endl;
80 return EXIT_FAILURE;
81 }


Tras ver el código, comprobamos que las opciones que podemos usar son: --fix-permissions --list-interfacesy los parámetros son los necesarios para que el backend haga su tarea.Si observamos las líneas 73 a 76 del archivo main.cpp, podemos ver cómo es necesario ejecutar --fix-permissions:


73 if (!platform.is_root()) {
74 cerr << "Run --fix-permissions first." << endl;
75 return EXIT_FAILURE;
76 }


Vamos a probar si Firesheep detecta bien las interfaces de nuestra máquina. Para esto, usamos la opción --list-interfaces del backend:


firesheep-backend --list-interfacesterminate called after throwing an instance of 'std::runtime_error'
what(): libhal_device_get_property_string failed: org.freedesktop.Hal.NoSuchProperty
No property info.vendor on device with id /org/freedesktop/Hal/devices/net_0a_00_27_00_00_00
Abortado


Uf, parece que ha petado bien! Si nos fijamos en el error que nos da, dice que lo que ha fallado ha sido justamente libhal_device_get_property_string. Vamos a buscar ese método get en el código del backend del Firesheep:


usuario@studio:~/firesheep/backend/src$ grep -n libhal_device_get_property_string *
linux_platform.cpp:44: char *buf = libhal_device_get_property_string(context, device.c_str(), key.c_str(), error);
linux_platform.cpp:46: runtime_error ex(str(format("libhal_device_get_property_string failed: %s %s") % error->name % error->message));
usuario@studio:~/firesheep/backend/src$


Vemos que en el archivo linux_platform.cpp hay coincidencias, así que le echamos un vistazo:


41
42 string device_get_property_string(LibHalContext *context, string device, string key, DBusError *error)
43 {
44 char *buf = libhal_device_get_property_string(context, device.c_str(), key.c_str(), error);
45 if (dbus_error_is_set(error)) {
46 runtime_error ex(str(format("libhal_device_get_property_string failed: %s %s") % error->name % error->message));
47 dbus_error_free(error);
48 throw ex;
49 }
50 return string(buf);
51 }


Éste es el código que lanza el error, justo en la línea 46.Como esto no nos aclara mucho, vamos a buscar el string device_get_property_string en el código del backend, a ver si encontramos algo más interesante:


usuario@studio:~/firesheep/backend/src$ grep device_get_property_string *
linux_platform.cpp:string device_get_property_string(LibHalContext *context, string device, string key, DBusError *error)
linux_platform.cpp: char *buf = libhal_device_get_property_string(context, device.c_str(), key.c_str(), error);
linux_platform.cpp: runtime_error ex(str(format("libhal_device_get_property_string failed: %s %s") % error->name % error->message));
linux_platform.cpp: string iface = device_get_property_string(context, devices[i], "net.interface", &error);
linux_platform.cpp: string category = device_get_property_string(context, devices[i], "info.category", &error);
linux_platform.cpp: string parent = device_get_property_string(context, device, "net.originating_device", &error);
linux_platform.cpp: string parent_subsystem = device_get_property_string(context, parent, "info.subsystem", &error);
linux_platform.cpp: parent = device_get_property_string(context, parent, "info.parent", &error);
linux_platform.cpp: string vendor = device_get_property_string(context, parent, "info.vendor", &error);
linux_platform.cpp: string product = device_get_property_string(context, parent, "info.product", &error);
usuario@studio:~/firesheep/backend/src$


Bingo! Editamos el archivo linux_platform.cpp a partir de la línea 123. Ahí comentamos las dos llamadas a device_get_property_string que son las que fallan, y ponemos las string vendor y product que nosotros queramos:


121 /* Get device properties */
122
123 //string vendor = device_get_property_string(context, parent, "info.vendor", &error);
124 //string product = device_get_property_string(context, parent, "info.product", &error);
125 string vendor = "Surmano Fumano";
126 string product = "FireDev";
127 string description(str(format("%s %s") % vendor % product));


Por último, recompilamos e instalamos de nuevo la extensión.Perfecto! Podemos ver en las opciones de interface de Firesheep, cómo las interfaces aparecen con el vendor y product que hemos harcodeado en el archivo linux_platform.cppYa no falla Firesheep al ejecutarse y podemos usarlo justo para lo que fue creado: hacer sidejacking

24 de febrero de 2011

Búscalo en 'googler'

Os presentamos una extensión para Chrome que estamos aún desarrollando pero de la que ya tenemos una primera versión beta.



googler nos permite buscar en varios motores de búsqueda al mismo tiempo (ahora mismo tan sólo en Google y Bing, pero iremos añadiendo más...) y mostrar todos los resultados de golpe para no tener que estar visualizándolos de 10 en 10, 100 en 100...

También nos permite organizar los resultados de diferentes maneras; aplicarles filtros para quedarnos, por ejemplo, con sólo los .aspx que tengan parámetros de entrada, etc.

La finalidad con la que la estamos desarrollando es orientarla a Google Hacking. De este modo, puede ser muy útil a la hora de dar los primeros pasos de una auditoría Web con consultas como:

  • site:dominio_a_auditar.com
  • site:dominio_a_auditar.com intitle:index.of
  • site:dominio_a_auditar.com (filetype:xls | filetype:doc | filetype:txt | filetype:docx | filetype:xlsx)
  • [...]

Algunas de las funcionalidades que le iremos añadiendo, además de más buscadores, son Google dorks, ayudas (operadores) de cada buscador, opciones de configuración...

No obstante, el objetivo de sacar la beta ahora es que podáis ir probándola y que nos hagáis sugerencias sobre qué le añadiríais/modificaríais vosotros.

La podéis descargar desde aquí:

http://code.google.com/p/googler-extension/

Esperamos que os sea útil!!