jueves, septiembre 22, 2016

Análisis de todos los robots.txt del Top 1 Millón del ranking de Alexa #pentesting #Python

Como ya se sabe hace tiempo, el fichero robots.txt es un auténtico incomprendido y lleva a que incluso sitios como Facebook, Gmail o WhatsApp tengan problemas con la indexación. Se ha hablado de la imposibilidad de utilizar comodines para prevenir la indexación de subrutas en determinados motores de búsqueda o ficheros con una determinada extensión, así como del poco sentido que tiene que el fichero robots.txt sea indexado por los buscadores, lo que habilita el uso de dorks para realizar hacking con buscadores.

Figura 1: Análisis de todos robots.txt del Top 1 Millón del ranking de Alexa

Si tienes un fichero robots.txt y quieres que nadie lo indexe tienes algunas alternativas pero el fichero seguirá ahí y lo que tienes que garantizar es que tu servidor esté correctamente configurado a nivel de permisos en todas las rutas, aparte de no se ofrecer ningún tipo de información confidencial bajo la premisa de que no se va a indexar o de que nadie lo va a encontrar.

Figura 2: Ficheros robots.txt prohibiendo la indexación de bases de datos

Las arañas que analizan el robots.txt pueden elegir hacer caso omiso del User-Agent: o pueden simplemente no ser arañas, sino simplemente un proceso automático curioseando para saber qué es lo que no quieres que te indexen. Durante cualquier pentest es básico mirar el robots.txt y el sitemap.xml, pero es igual de básico durante la fase de information gathering realizar pruebas de fuerza bruta contra los directorios más comunes en busca de rutas cuya seguridad se ha abandonado a la defensa por oscuridad.

Figura 3: Fichero robots.txt con mucha información jugosa

Hay muchas aplicaciones que disponen de sus propios diccionarios pero lo que realmente motiva es ir un paso más allá y tratar de encontrar tu propio diccionario para buscar Directory Index o información confidencial.

Alexa to Dictionary

AtoD (que viene de Alexa to Dictionary) es un script en Python que te permite crear tu propio diccionario basándote en qué es lo que las web más visitadas del mundo no quieren que se indexe }:F. Haciendo un barrido por todos los ficheros robots.txt de 1.000.000 de URLs y usando ambos esquemas HTTP y HTTPs, nos da como salida dos ficheros, un diccionario que contiene todas las rutas que se han encontrado como Disallowed dentro del robots.txt, ordenadas por número de apariciones, y un fichero de estadísticas para que puedas analizar lo que no quieren que veas.

Figura 4: Descarga AtoD de GitHub

Puedes modificar su configuración para decirle el número de URLs que quieres que analice tras descargar el fichero top1M desde Alexa. Inicialmente viene configurado para analizar las 1000 primeras pero te invito a que lo pruebes con diferentes configuraciones. Los resultados difieren mucho según el tamaño de la muestra va aumentando.

Figura 5: Ejecución completa de Alexa to Dictionary

Atod automatiza la siguiente secuencia:
- Descarga el fichero.
- Lo descomprime.
- Mete X procesos paralelos, ya que el sistema de multithreading en Python no es muy eficiente así que opté por usar mejor procesos.
- Cada proceso busca por el robots.txt en base a dos esquemas: HTTP y HTTPs.
- Se registra todo en un diccionario que luego es volcado a un fichero con todos los directorios no permitidos para indexación, previo postprocesado.
- Adicionalmente se construye otro fichero para estadísticas con el número de apariciones de cada una de las rutas no permitidas.
Como todo, esto toma su tiempo, analizar 2000 URLs llevará apenas un par de minutos pero si quieres intentarlo con más de 100K hay que tener paciencia.

El análisis del Millón de robots

Cómo no, yo he querido analizar todas y cada una de las URLs lo que ha resultado en 804.098 entradas después de postprocesado en mi nuevo diccionario. Y como para esto tenemos el fichero de estadísticas, aquí está mi análisis de lo que he podido encontrar como top 10 disallowed en el Top 1 millón de sitios más visitados en Internet.

Figura 6: Top 10 de URLs en los robots.txt del Top 1M de Alexa

Ya mirando el Top 10 te encuentras con cosas muy curiosas, como tecnologías que a día de hoy son poco comunes en una aplicación moderna (Common Gateway Interface), que además puede ser una puerta de entrada para ataques Shellshock, y mucho sitio con Wordpress (wp-admin, xmlrpc.php) que debería estar fortificado en Paranoid Mode. También hay muchos que no quieren que se indexe absolutamente nada (/).

La cuestión es averiguar qué tendrán realmente accesible para lo que podríamos usar nuestro nuevo diccionario quizá }:). Pero los resultados realmente curiosos llegan un poco más adelante y es que simplemente filtrando el Top 100 encontramos rutas como las siguientes:
- /user/password/
- /?q=user/password/
- /INSTALL.pgsql.txt
- /INSTALL.mysql.txt
- /installation/
- /update.php
- /profiles/
- /?q=admin/
- /api/
- /test/
Y esto es sólo por citar algunos de los que más llaman la atención. Repito de nuevo que AtoD está parametrizado inicialmente solo para las 1.000 primeras URLs de forma que si quieres ejecutarlo para más, las constantes NPROCESS y LIMIT regulan el número de procesos y las direcciones URLs a analizar respectivamente. El script no está parametrizado por línea de comandos así que  se lanza con ./atod y a correr sobre cualquier sistema que tenga Python instalado, como tu Kali Linux 2, por supuesto. El porqué no está parametrizado es sencillo, creo que no aporta nada más que complejidad al código añadir un parser para un script relativamente simple, pero si es importante para ti, tienes el código disponible para adaptarlo.

Figura 7: Configuración de parámetros en el script de AtoD

Estoy lejos de ser un experto en programación en Python por lo que soy consciente de que el código es muy mejorable pero para mí hizo bien su trabajo. Espero que te sea de utilidad. Si no lo es, no pasa nada, habrá una versión 2.0 con los códigos HTTP de respuesta, para tener mejor información de esos directorios y saber si está el documento, hay una redirección, o se produce un error en el servidor al acceder. Veremos qué sale en el siguiente artículo

Desde aquí puedes descargar la última versión de AtoD. Sólo necesitas el script. Los ficheros comprimidos son mis resultados contra el total de URLs pero te invito a que uses el script y obtengas los tuyos propios.

Autor: Miguel A. Hernández Ruiz
https://plusplussecurity.com

9 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Muy interesante el aporte, para contribuir al debate, en esta dirección: ¿Por qué los robots no te hacen caso? Échale la culpa a una lista de correos del año 1994. se incluyen algunos elementos de como se decidió y porque la existencia del archivo robots.txt.

    ResponderEliminar
  3. Muy interesante el artículo, gracias. Comentar tan solo que varios de los paths que te llaman la atención provienen de instalaciones de Drupal (https://www.drupal.com/robots.txt) y no representan ningún riesgo de seguridad ni de exposición de información, pues son urls bien conocidas en este CMS, y en una instalación standard todas están convenientemente protegidas.

    Bien es cierto que desvelan que la instalación es Drupal, pero intentar evitar el fingerprinting de los CMS (igual que de otras muchas cosas) es una guerra perdida de antemano...

    ResponderEliminar
  4. Oh cuidado no me jackees el robots chema jajaja. Has visto el robots de eleven? En casa del evanista cuchillo de plastico

    ResponderEliminar
  5. @nombre apellidos. No hombre, usamos un editor que convierte de WordPress a HTML y usamos robots.txt como se usa. ¿Sabes que es útil usar Robots.txt? No te enteras....

    ResponderEliminar
  6. @nombre apellidos. Eres luser, pero luser, luser. A ver, la web de ElevenPaths está maquetada con WordPress y luego se convierte a HTML. En el código puedes ver que se usa WP en 20 sitios distintos y en builtwith lo averiguas a la primera. Que tenga un robots.txt estándar para mejorar la indexación no es un fallo de seguridad. Léete el comentario de Interdruper a-Drupal-company que lo explica con sensatez antes de que vinieras a hacer tolling. Puedes entrar a las URLs del robots a ver que encuentras, hax0r. Si sigues con actitud de trollear, te borros los comentarios y listo, que este sito ya tiene edad y madurez en sus lectores como para perder el tiempo leyendo comentarios como los tuyos que aportan cero y además des-informan porque sabes muy poco de seguridad. Saludos!

    ResponderEliminar
  7. Pues tu comentario contradice la idea del articulo. Tu mismo

    ResponderEliminar
  8. A alguien se le ocurre como podria buscarse con shodan dentro de los robots.txt los que deshabiliten todo? seria el equivalente a buscar en la DeepWeb pero aqui.
    En google me lo imagino asi: "Disallow: /" -"todo" inurl:robots.txt
    obviamente -todo no existe, esa es la parte que no sabria como hacer

    ResponderEliminar