miércoles, 30 de octubre de 2013

Asaltando "sombras" con python



  En esta entrada vamos a realizar un ataque de fuerza bruta basado en diccionario sobre el fichero /etc/shadow que utilizan las distribuciones de GNU/Linux.

Este fichero contiene la contraseña cifrada de cada usuario del sistema (los que la tengan) y se complementa con otro fichero como es /etc/passwd.

Dicho archivo esta formado por numerosas líneas como la que sigue:
     usuario:password:último:pueda:vida:aviso:caduca:duración:reserv

 Donde:
    [-] usuario es el nombre del usuario.
    [-] password es la contraseña cifrada correspondiente al usuario.
    [-] último  son los días transcurridos desde la última vez que se cambió la
          clave, cuenta desde el día 1/1/1970.
    [-] pueda son los días que deben pasar antes de que la clave pueda ser
          cambiada.
    [-] vida es el tiempo de vida de la clave antes de que tenga que ser
          cambiada.
    [-] aviso es el número de días de aviso al usuario antes que expire la clave.
    [-] caduca son los días en que la clave quedara deshabilitada tras caducar.
    [-] duración son los días de duración de la cuenta desde 1/1/1970.
    [-] reserv pertenece a un campo reservado.

 El anterior ejemplo es un caso genérico, veamos ahora los valores de un usuario "real":
usuario:$6$3oNSayeE$Cqe3MB4N/oHgEJw6JTXGIg3oNmDhvgBMSf/rNm2Hab0cn28psM1htq3TFebQJ4At1LkQKuu5/T/LocYYtjZMP0:16003:0:99999:7:::

En esta ocasión el campo que llama nuestra atención es password que a su vez se subdivide en varias secciones:
$6$3oNSayeE$Cqe3MB4N/oH....
Es decir:
$algoritmo_cifrado$salt$password_cifrado
Donde:
  [-] algoritmo_cifrado representa en función del numero el cifrado utilizado, siendo 1 md5, 2a blowfish, 5 SHA-256 y 6 SHA-512. Este último es el utilizado por las distribuciones actuales.
  [-] salt es un valor generado al azar utilizado junto con la contraseña para generar el password cifrado que vemos en el campo contiguo. Es útil para evitar ataques mediante tablas hash ya preparadas como son las conocidas rainbow tables.
  [-] password_cifrado es la contraseña del usuario cifrada con el algoritmo especificado junto con el salt.

Una vez ya conocemos la estructura podemos programar nuestro propio código para realizar ataques de diccionario a ficheros shadow y obtener las contraseñas de los usuarios.




 Para la prueba hemos utilizado la librería crypt de python (versión 2.7.x) que junto con la función del mismo nombre nos permite descifrar las contraseñas de los usuarios contenidos en el fichero.

El código está alojado en la sección de herramientas de 0verl0ad, concretamente aquí, donde podéis encontrar el código junto con una carpeta llamada test que contiene un fichero shadow y un diccionario breve para hacer las pruebas.

Por último comentar que la aplicación no es multiproceso, por tanto es lenta, pero nos permite ver como podemos hacer nuestro propio script para realizar ataques de diccionario a ficheros de este tipo. En siguientes entradas solucionaremos esto ;)


Si queréis ampliar información aquí tenéis un par de entradas que me han resultado útiles:


Nos leemos en breve :D




5 0verl0ad Labs: octubre 2013   En esta entrada vamos a realizar un ataque de fuerza bruta basado en diccionario sobre el fich...

martes, 22 de octubre de 2013

Bugtroid, un arsenal en tu dispositivo Android


Bugtroid es una aplicación para sistemas operativos Android desarrollada por el equipo de  Bugtraq que reúne unas 200 aplicaciones relacionadas con temas de auditoria de seguridad, ya sea anonimato, auditoria web, de redes o temas forenses entre otras muchas categorías.

Como condición indispensable para exprimirla al máximo, es necesario ser root en el terminal. En cuanto a sus versiones, podemos acceder a ella de dos formas, una gratuita y otra de pago. La primera nos permite probar algunas aplicaciones y poco más, es principalmente una lista de todas las aplicaciones disponibles para hacernos una idea de la cantidad de herramientas que la componen. La potencia de la aplicación viene si compramos la versión PRO de ésta, por  apenas 1,85€ disponemos de todas las posibilidades.

Su funcionamiento es sencillo, se trata de una lista de aplicaciones organizadas por categorías, cuando seleccionamos una, ésta se instala en nuestro dispositivo. Esto nos ayuda a tener solo instaladas las aplicaciones que queramos y no "ensuciar" nuestro dispositivo de herramientas que no vayamos a utilizar o que no sean compatibles.
En este último punto aparece la principal queja que tengo de la aplicación, y es que no sabes si la aplicación que estas instalando es compatible con tu dispositivo. Entiendo que la solución no es sencilla ya que ni los mismos desarrolladores de las aplicaciones muchas veces saben todos los dispositivos compatibles con ellas, pero si se implementara o si apareciera una lista con los dispositivos probados seria interesante.

Sin contar el anterior detalle, la aplicación recoge un completísimo catálogo y nos permite descubrir muchas aplicaciones que de otra forma ignoraríamos.





En cuanto a la aplicación, el primer menú que nos encontramos cuando la abrimos nos permite escoger entre aplicaciones de Android o de GNU/Linux junto con un menú de opciones que nos permite instalar los interpretes de Python, perl y ruby además de ajustar algunos parámetros.
 

Como he comentado antes, en su menú encontramos todo tipo de aplicaciones clasificadas por categorías, estas aplicaciones son por ejemplo WifiKill o Intercepter-ng por comentar algunas tratadas en este blog (mas adelante analizaré más ;) ). Para su utilización basta con seleccionarla e instalarla, después veremos un acceso directo en el escritorio o en la versión PRO podemos ejecutarlas desde la misma Bugtroid.








Para descargar la versión gratuita:
https://play.google.com/store/apps/details?id=com.bugtroid.free.es
En cuanto a la versión de pago:
https://play.google.com/store/apps/details?id=com.bugtroid


En resumen, un completo catalogo de aplicaciones disponible para nuestros dispositivos que el equipo de Bugtraq se ha encargado de recoger para nosotros.


Nos leemos en breve ;)

5 0verl0ad Labs: octubre 2013 Bugtroid es una aplicación para sistemas operativos Android desarrollada por el equipo de  Bugtr...

viernes, 18 de octubre de 2013

Buffer Overflow : The lazy way

¡Saludos!

    Hace mil que no dedico un poco de tiempo para el blog, pero es que me han estado liado en un par de cosas (como el pasado Navajas Negras... del cual saqué la conclusión de que en realidad las mejores charlas empezaban a partir de las 3 de la madrugada ... animo a todos a que vayais el año que viene, es una experiencia cojonuda), que próximamente comentaremos por aquí.

   La cuestión es que estos últimos días me estoy pasando por el canal de IRC de los chicos de Highsec, y allí @ShellShockLabs me lió para ir haciendo algunos "Exploit me" entre todos. Lo cual agradezco mucho, porque nunca me había puesto "manos a la obra" con el tema de las vulnerabilidades en binarios, más allá de la teoría (lo mío es la seguridad a nivel web). De este "hagamos esto entre todos" (que entre todos significó que sólo nosotros dos lo hicimos).

   Era un Exploit Me! bastante sencillo, el cual su resolución (y explicación for dummies de lo que es un buffer overflow, altamente recomendado si empiezas) podeis encontrar aquí . En apenas unos minutos conseguimos hacerlo, pero algo nos escamaba. Lo que debería de haber sido (leed primero su post en Highsec antes de seguir leyendo) un simple "metemos los 64 bytes para rellenar el buffer, despues otros cuatro para pasarnos por la piedra EBP, y los 4 con la dirección de go_shell que se meriendan lo que había en EIP", se quedó en un:...¿Porqué cojones hemos necesitado 76 bytes para pisar EBP y otros 4 para meter la direccion de go_shell en EIP?

  Tras divagar buscando las más exóticas respuestas por diversos foros de reversing, nos contestaron. El alineamiento de la pila, el "padding".

  Resulta que el compilador mete su propia basura para poder alinear la memoria, aquí teneis la explicación for dummies   No quiero entrar en detalle sobre este aspecto, porque creo que @ShellShockLabs lo hará más en profundidad en Highsec, con este mismo ejemplo, y no quiero chafarle el post.

   Por mi parte,  para saber cuanta basura había que meter para poder sobreescribir EIP utilicé una estrategia de divide y vencerás: primero le metí 100 "A" y 100 "B", al ver que en EIP habia 0x41414141, necesitábamos meter entre 64 (que era el espacio reservado para el buffer) y 100. Despues metí 70 A y 30 B, como seguía viendo "A"s en EIP, fui haciendo 75 A y 10 B, así hasta que llegué a que se necesitaban 76 + 4.

   Yo, amante de la ley del mínimo esfuerzo y los scripts en perl, me sentía frustrado por perder el tiempo en esta tarea (pues fue lo que más tiempo me consumió), asi que opté por hacerme algunas herramientas para próximas veces. Dichas herramientas las podeis ver en nuestro repositorio de GitHub, justo el botón que pone "Herramientas" en la parte superior derecha.

    Para saber cuantos bytes son necesarios podemos usar "seekHdestroy.pl". Con el argumento --seek te devuelve una cadena bastante larga de caracteres que deberemos de pasarle como argumento a nuestro programa vulnerable:

   Hacemos un "GDB simple_login" para cargar el exploit me y "run". Cuando nos pida el password le pasamos la cadena.

   Si hemos leido el post de Highsec, ya sabeis que hemos sobreescrito de forma brutal más allá de los 64 bytes y que por eso peta. Comprobemos los registers (info registers):





   Como podemos ver en la parte señalada EIP está escrito con 5a5a5a4c. Vale, ahora se lo pasamos a seekHdestroy usando como argumento --destroy:


  En menos de 20 segundos ya sabemos cuantos bytes necesitamos para sobreescribir EIP: 76 + 4 con la dirección de donde queramos que apunte. Para sacar donde está go_shell, usamos pr0lapso.pl que es un pequeño parser para objdump que estoy haciendo (todavía está en pañales, el objetivo final es que te saque directamente la shellcode incluyendo los NOPs necesarios):

  Ya sabemos donde: 0804851c. Ahora, para explotarlo, necesitaríamos meterle los 76 de basura (que calculemos con seekHdestroy) y estos 4 de la dirección pero expresada del revés. Tiramos de perl (esta parte es igual que en el post de Highsec):


Explotado en 5 minutos. Ahora, el siguiente paso es terminar pr0lapso para que me genere las shellcodes directamente, pero poco a poco. Como he dicho más arriba, todas estas herramientas las puedes encontrar en nuestro repo de github ( https://github.com/0verl0adLABS ).

Byt3z!

5 0verl0ad Labs: octubre 2013 ¡Saludos!     Hace mil que no dedico un poco de tiempo para el blog, pero es que me han estado lia...

miércoles, 9 de octubre de 2013

OWASP Mantra, un framework de seguridad web en nuestro navegador


Mantra es un framework en forma de navegador web compuesto por gran cantidad de extensiones y centrado en temas de auditorias web. Se presenta en dos versiones, una a partir de Firefox (en versión beta) y otra a partir de Chromium (en versión alpha), además está disponible para Windows, GNU/Linux y OSX.



Posee más de 40 extensiones, como pueden ser Hackbar, Firebug, Tamper Data o PassiveRecon (analizado en este mismo blog hace unas semanas) entre muchas otras.
 

Su instalación en el caso de kali no puede ser más simple, basta con descargarla desde la web de Mantra (en función de la arquitectura), extraer el archivo (tar xzvf <comprimido>) y ejecutar el binario restante:


Una vez realizado esto ya tendremos veremos la presentación del navegador con complementos por todas las partes (cantidad que puede abrumar xD):






En mi caso me es muy útil porque me permite separar el navegador que uso normalmente (Firefox) del que uso para otros menesteres como auditorias. Aunque, existe en Firefox una opción (bastante escondida) que nos permite tener varios perfiles con muy distintas configuraciones, para acceder a este menú basta con abrir una terminal y escribir:
firefox -P
o
iceweasel -P
para que nos aparezca el selector de perfiles:



Con esto cierro la entrada, y si el tiempo me lo permite, nos leemos en breve ;)



5 0verl0ad Labs: octubre 2013 Mantra es un framework en forma de navegador web compuesto por gran cantidad de extensiones y ce...
< >