Las pruebas de penetración sin la recopilación de información (information gathering) son incompletas. La información es necesaria para acotar los vectores de ataque. En el caso de las pruebas de penetración web, los hackers éticos necesitan comprender la topología del diseño web para enumerar y atacar el servidor web o la aplicación objetivo. Esto incluye el contenido web del backend y los enlaces que forman el frontend del servidor web.
La recopilación y validación manual de toda esta información es un trabajo de remolque. Sin embargo, hay herramientas disponibles para automatizar el proceso. Existen fuzzers web como wfuzz o herramientas tradicionales de traversal web, como Dirsearch para recoger el contenido o los enlaces deseados de los servicios web objetivo.
Este artículo trata sobre Dirsearch, una herramienta de línea de comandos que ayuda a los probadores de penetración a extraer los archivos ocultos de los directorios y subdirectorios del servidor web objetivo. La herramienta viene con una larga lista predefinida de extensiones de archivos almacenada en forma de lista de palabras en el paquete fuente de Dirsearch. Aplica la técnica de fuerza bruta para recorrer cada directorio, subdirectorio y enlaces del servidor de destino. Las extensiones .php, .htm, .xml, .tar, .zip, .txt y .pdf son algunos ejemplos comunes de la lista de palabras precompilada. La herramienta tiene la capacidad de ignorar archivos o directorios específicos durante el proceso de escaneo.
Tabla de Contenido
- Qué es Dirsearch
- Configuración e Instalación
- URL Objetivo
- URL completa
- Excluir el código de estado
- Incluir código de estado
- Guardar los resultados en diferentes formatos
- Sin colores
- Modo silencioso
- Escaneo normal vs escaneo recursivo
- Método POST
- Retraso en la petición
- Tamaño mínimo
- Tamaño máximo
- Agente aleatorio
- Sufijos
- Prefijos
- Hilos
- Sólo seleccionado
- Eliminar la extensión
- Directorios en mayúsculas
- Directorios en minúsculas
- Directorios capitalizados
- Excluir texto
- Excluir tamaños
- Escaneo de versiones
- Qué es Dirsearch
- Configuración e Instalación
- URL Objetivo
- URL completa
- Excluir el código de estado
- Incluir código de estado
- Guardar los resultados en diferentes formatos
- Sin colores
- Modo silencioso
- Escaneo normal vs escaneo recursivo
- Método POST
- Retraso en la petición
- Tamaño mínimo
- Tamaño máximo
- Agente aleatorio
- Sufijos
- Prefijos
- Hilos
- Sólo seleccionado
- Eliminar la extensión
- Directorios en mayúsculas
- Directorios en minúsculas
- Directorios capitalizados
- Excluir texto
- Excluir tamaños
- Escaneo de versiones
Qué es Dirsearch
Dirsearch es un método profesional de línea de comandos para la fuerza bruta de carpetas y archivos del servidor web. Se ha convertido en el principal explorador de contenido web con más de 6 años de éxito.
Ofrece a los usuarios la posibilidad de explorar contenidos web complejos como una herramienta rica en características, con muchos vectores de listas de palabras, alta precisión, rendimiento impresionante, ajustes avanzados de conexión/solicitud, técnicas modernas de fuerza bruta y resultados agradables.
Es un fuerte competidor en el ámbito de los escáneres de directorios, con características como el multihilo, el soporte de proxy, la latencia de las peticiones, la aleatorización del agente de usuario y el soporte de múltiples extensiones.
Está siendo desarrollado activamente por @maurosoria and @shelld3v.
https://github.com/shelld3v
Configuración e Instalación
Esta herramienta puede ejecutarse en Windows, Linux y macOS, y proporciona una interfaz sencilla, pero potente para la línea de comandos.
Vamos a instalar esta herramienta en nuestro Kali, utilizando el comando git-clone
:
git clone https://github.com/maurosoria/dirsearch.git

Después de clonar esta herramienta, cambia el directorio raíz a /dirsearch y busca el archivo dirsearch.py
. Ahora, todo lo que necesitamos es ejecutar esta herramienta con el parámetro -h
a través de esto podemos ver todos sus parámetros con sus funciones.
./dirsearch.py -h

Comencemos.
URL Objetivo
Podemos utilizar nuestro escáner de contenido web en una URL específica con la ayuda del parámetro -u
. Para obtener los resultados apropiados tenemos que asegurarnos de que se trata de una URL autentificada y seguir este comando para obtener los resultados deseados.
./dirsearch.py -u http://testphp.vulnweb.com/

En esta captura de pantalla, vemos algunas cosas interesantes. Como las extensiones por defecto [php, aspx, jsp, html, js], el método HTTP por defecto [GET], los Threads por defecto y el tamaño de la lista de palabras por defecto . Estas cosas actúan de manera muy crucial en nuestro ataque a los directorios y las estamos abordando como una referencia de vez en cuando en nuestro ataque.
En resumen, podemos ver tenemos algunos directorios y páginas web. El sitio web anterior es una plataforma de ejemplo para realizar pruebas de penetración. Puedes revisar nuestra lista TOP Sitios Web Vulnerables para Pruebas de Penetración
URL completa
A veces los resultados del ataque a los directorios pueden ser confusos. Para resolver estas confusiones, tenemos un parámetro separado llamado -full-url
. Este parámetro nos ayuda a recorrer estos resultados con facilidad.
./dirsearch.py -u http://testphp.vulnweb.com/ --full-url

Excluir el código de estado
Sabemos que, en cinco grupos o divisiones, todos los códigos de estado de respuesta HTTP están segregados. El primer dígito del código de estado determina la clase de respuesta, mientras que no existe una función clasificatoria o de categorización para los dos últimos dígitos.
Hay cinco clases definidas por sus estándares.
CÓDIGO | CATEGORÍA | DEFINICIÓN |
---|---|---|
1xx | Informativo | Se recibió la solicitud, continua el proceso. |
2xx | Exitoso | La solicitud fue satisfactoria, comprendida y aceptada. |
3xx | Redirección | Se deben tomar más medidas para completar la solicitud. |
4xx | Error de cliente | La solicitud contiene una sintaxis incorrecta o no se puede cumplir. |
5xx | Error del servidor | El servidor no cumplió con un informe aparentemente válido. |
Podemos excluir este código de estado con nuestro parámetro llamado -x
. A través de esta característica, podemos eliminar los códigos no deseados y obtener nuestros resultados deseados, obtener sólo aquellos estados que queríamos en nuestro programa de ataque.
./dirsearch.py -u http://testphp.vulnweb.com/ -x 301
También podemos excluir más de un código de estado separándolos con una coma ,
.
./dirsearch.py -u http://testphp.vulnweb.com/ -x 301,302,403
Como podemos ver en nuestros resultados para este ataque, sólo obtenemos uno exitoso debido a nuestro parámetro.

Incluir código de estado
Como ya hemos hecho anteriormente, excluir el código de estado es eliminar el código de estado no deseado. Incluir código de estado es todo lo contrario: incluimos cualquier código de estado que queremos en nuestros resultados.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200
Podemos incluir más de un código de estado, simplemente siguiendo este comando:
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200,301,302

Como podemos observar estos resultados sólo muestran estos códigos .
Guardar los resultados en diferentes formatos
Podemos guardar la salida que obtenemos del ataque en diferentes formatos para aprender más de ellos. Este parámetro nos ayuda a conocer los detalles de estos formatos. Vamos a explorarlos uno por uno.
Guardar el resultado en formato simple
Podemos guardar nuestro resultado en el formato simple con la ayuda del parámetro -simple-report
. Gracias a esta función, podemos analizar mejor los resultados que hemos obtenido de este ataque. Sigue este comando para continuar.
./dirsearch.py -u http://testphp.vulnweb.com/ --simple-report=reporte

Después de crear este informe, podemos verificar su ubicación en el sistema. Ahora utiliza el comando nano
para ver este informe.

Como podemos ver claramente que nuestro resultado de formato simple se ha creado con éxito. Ahora, podemos analizar nuestros resultados fácilmente.

Guardar la salida en formato JSON
JSON es un formato de archivo y de intercambio de datos de estándar abierto que almacena y transmite objetos de datos consistentes en pares de atributos-valores y tipos de datos de matrices utilizando texto legible por humanos. Es un formato de datos muy común con una gran variedad de usos, como por ejemplo ser utilizado en sistemas AJAX como sustituto de XML. Con este método, podemos construir este tipo de formato de resultado de salida con sólo seguir estos comandos.
./dirsearch.py -u http://testphp.vulnweb.com/ --json-report=reporte

Del mismo modo, como en el caso anterior, estamos utilizando el comando nano
para empezar a analizar nuestro resultado.

Guardar la salida en formato XML
El Lenguaje de Marcado Extensible (XML, Extensible Markup Language) es un lenguaje de marcado que especifica una colección de reglas que son tanto legibles por humanos como por máquinas para codificar documentos en un formato. Utilizando algunos comandos, podemos construir nuestra copia de resultados en formato XML con esta herramienta.
./dirsearch.py -u http://testphp.vulnweb.com/ --xml-report=reporte

Del mismo modo, como en el caso anterior, estamos utilizando el comando nano
para empezar a analizar nuestro resultado.

Guardar el resultado en formato Markdown
Markdown es un lenguaje de marcado ligero que permite crear texto con formato utilizando un editor de texto plano. En 2004, John Gruber y Aaron Swartz crearon Markdown como un lenguaje de marcado que, en su forma de código fuente, resulta atractivo para los lectores humanos. Podemos construir nuestra copia de resultados en formato Markdown utilizando este comando con esta herramienta.
./dirsearch.py -u http://testphp.vulnweb.com/ --markdown-report=reporte

Del mismo modo, como en el caso anterior, estamos utilizando el comando nano
para empezar a analizar nuestro resultado.

Guardar la salida en formato CSV
Un archivo de valores separados por comas es un archivo de texto delimitado que separa los valores mediante una coma. Un registro de datos es cualquier línea del archivo. Cada registro, separado por comas, consta de uno o más campos. Utilizando algunos comandos, podemos construir nuestra copia de resultados CSV con este método.
./dirsearch.py -u http://testphp.vulnweb.com/ --csv-report=reporte

Del mismo modo, como en el caso anterior, estamos utilizando el comando nano
para empezar a analizar nuestro resultado.

Guardar la salida en formato simple
Texto simple es un término poco preciso para designar el conocimiento en informática que sólo representa caracteres de contenido legible, pero no su representación gráfica u otros artefactos. También puede incluir un número limitado de caracteres de espacio en blanco, como espacios, saltos de línea o caracteres de tabulación, que afectan a la disposición simple del texto. Utilizando algunos comandos, podemos crear una copia de resultados en texto plano con este método.
./dirsearch.py -u http://testphp.vulnweb.com/ --plain-text-report=reporte

Del mismo modo, como en el caso anterior, estamos utilizando el comando nano
para empezar a analizar nuestro resultado.

Sin colores
Si los colores nos molestan para concentrarnos en nuestro análisis o resultados. Podemos eliminar todos los colores que aparecen en nuestros resultados del ataque, utilizando el parámetro -no-colour
podemos lograr esta función. Sigue este comando para obtener estos resultados.
./dirsearch.py -u http://testphp.vulnweb.com/ --no-color

Modo silencioso
El modo Quite se utiliza de forma más discreta para ejecutar dirsearch. Si eres del tipo de persona que no quiere que un enorme banner le diga a todo el mundo lo que estás haciendo en tu sistema, te gustará esta opción. Básicamente, esto permite una pantalla más limpia mientras ejecutas los comandos que le envías, sin que aparezca la graciosa vaca en la parte superior.
Sólo tienes que usar este parámetro -q
con este comando para ver los resultados:
./dirsearch.py -u http://testphp.vulnweb.com/ -q

Escaneo normal vs escaneo recursivo
El método de escanear todo lo que hay en una carpeta, incluyendo las subcarpetas, es conocido por todos nosotros. En esta sección comparamos un escaneo normal con un escaneo recursivo.
En primer lugar, en el escaneo normal sólo utilizamos el parámetro -u
para pasar por las URLs de las víctimas. Para iniciar este escaneo, sigue esta instrucción.
./dirsearch.py -u http://testphp.vulnweb.com/

Ahora, en segundo lugar, en el mismo comando, cuando usamos el parámetro -r
junto con él. Con sólo iniciar este ataque en la víctima, nos ayudará a ir a través de cada carpeta y sus subcarpetas.
./dirsearch.py -u http://testphp.vulnweb.com/ -r

Método POST
Sabemos que, para un determinado recurso, HTTP define un conjunto de métodos de petición para indicar la acción que se debe realizar.
POST es un método de petición soportado por HTTP y utilizado por la World Wide Web. El método de solicitud POST, por su diseño, requiere que un servidor web acepte los datos incluidos en el cuerpo del mensaje de solicitud, muy probablemente para almacenarlos. Normalmente funciona con el método HTTP GET, que se utiliza en el par nombre o valor para añadir los datos del formulario a la URL. Si se utiliza GET, la longitud de la URL permanecerá restringida. Esto permite a los usuarios enviar el resultado del marcador.
Ahora, estamos explorando este otro lado con la ayuda del parámetro -m
con este comando.
./dirsearch.py -u http://testphp.vulnweb.com/ -m POST

Veremos que estos resultados son diferentes y únicos en comparación con el método de solicitud GET que realizamos anteriormente. Muestra algunas páginas web y directorios web diferentes.
Retraso en la petición
Es otro escaneo normal con algún retraso específico entre cada una de las peticiones de nuestro ataque. Este tipo de cosas proporcionan una exposición adecuada de una solicitud particular. Podemos lograr esta característica con la ayuda del parámetro -s
con el tiempo especificado en segundos.
./dirsearch.py -u http://testphp.vulnweb.com/ -s 10

Tamaño mínimo
A veces algunas páginas web tienen muchos archivos de pequeño tamaño. Estos archivos no nos sirven para fines ofensivos, por lo que esta herramienta nos proporciona el poder de eliminarlos con el parámetro -minimal
. Sólo tenemos que especificar el tamaño en bytes que no queremos en nuestros resultados.
./dirsearch.py -u http://testphp.vulnweb.com/ -x 301,302,403 --minimal=2048
Como podemos ver en los resultados sólo muestra los resultados exitosos (debido al parámetro -x) con el tamaño mínimo establecido por nosotros que es de 2kb o 2048 bytes.

Tamaño máximo
Al igual que el tamaño mínimo, el tamaño máximo se utiliza para establecer el límite superior de los resultados. El parámetro que utilizamos para conseguirlo es -maximal
. Sólo tenemos que especificar el tamaño en bytes, que no queremos en nuestros resultados.
./dirsearch.py -u http://testphp.vulnweb.com/ -x 301,302,403 --maximal=5120
También podemos proporcionar tanto el tamaño mínimo como el máximo juntos, esto nos proporciona un rango adecuado a través del cual podemos obtener un alcance adecuado encontrando un archivo de tamaño particular.
./dirsearch.py -u http://testphp.vulnweb.com/ -x 301,302,403 --minimal=2048 --maximal=5120

Agente aleatorio
Todos reconocemos que un agente de usuario en informática es un programa (un agente de software) que opera en nombre de un usuario, como un navegador web que “recupera, representa y facilita la interacción con el contenido web por parte de los usuarios finales“.
Podemos utilizar el agente de usuario aleatorio para romper los horarios por defecto y obtener los resultados de nuestros datos en el nuevo orden.
./dirsearch.py -u http://testphp.vulnweb.com/ -x 301,302,403 --random-agent

Sufijos
El significado gramatical de un sufijo: una letra o grupo de letras que se inserta al final de una palabra y que crea una nueva palabra. Este parámetro nos ayuda a buscar sólo aquellos resultados específicos, que coincidan con nuestro sufijo proporcionado al ataque. Para obtener estos resultados en nuestro ataque, la sintaxis es algo similar a lo siguiente:
./dirsearch.py -u http://testphp.vulnweb.com/ --suffixes=.php

Como podemos ver estos resultados, obtuvimos con éxito todos los resultados relacionados a través de nuestro sufijo proporcionado.
Prefijos
El significado gramatical de un prefijo: Se trata de una letra o grupo de letras insertadas al principio de una palabra que crea una nueva palabra. Este parámetro nos ayuda a buscar sólo aquellos resultados específicos, que coincidan con nuestro prefijo proporcionado para el ataque. Para obtener estos resultados en nuestro ataque, hacemos lo siguiente:
./dirsearch.py -u http://testphp.vulnweb.com/ --prefixes=index

Como podemos ver estos resultados, sólo muestra los que tienen nuestros prefijos.
Hilos
Podemos aumentar o disminuir el número de hilos. Esto aumentará o disminuirá la velocidad de nuestro ataque dependiendo del número de hilos que proporcionemos. Como hemos visto anteriormente en el ataque de URLs el número de hilos por defecto está fijado en 30.
Como queremos aumentar la velocidad del ataque lo cambiamos a 100 con la ayuda del parámetro -t
.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 -t 100

Sólo seleccionado
En este parámetro llamado -only-selected
, obtenemos una lista de palabras de directorios enfocada a través de la cual sólo se obtienen páginas web y directorios seleccionados. Esto puede ser muy útil para encontrar algunos grandes resultados a través del ataque.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 --only-selected

Como podemos ver en el banner de esta herramienta nuestra lista de palabras se redujo de 10861 a 7633.
Eliminar la extensión
Todos conocemos la definición de extensión, una extensión de archivo (o simplemente “extensión”) es el sufijo al final de un nombre de archivo que especifica qué tipo de archivo es. Podemos eliminar los archivos con extensión de nuestros resultados. Para obtener este tipo de resultados podemos utilizar nuestro parámetro llamado -remove-extensions
.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 --remove-extensions

Como podemos ver elimina todas las extensiones.
Directorios en mayúsculas
Actúa como un filtro, que sólo permite ir a los directorios en mayúsculas. Con la ayuda del parámetro -U
podemos aplicar este filtro:
./dirsearch.py -u http://testphp.vulnweb.com/ -U

Directorios en minúsculas
Al igual que el anterior es como un filtro. Sólo vamos a obtener los directorios con nombre en minúsculas. Con la ayuda del parámetro -L
podemos aplicar este filtro.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 -L

Directorios capitalizados
Actúa como un filtro, que sólo permite ir a los directorios en letras capitales. Con la ayuda del parámetro -C
podemos aplicar este filtro.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 -C

Excluir texto
Como antes hemos eliminado o excluido los códigos de estado no deseados, también podemos excluir algún texto de nuestros resultados según nuestra necesidad. Utilizando este parámetro llamado –exclude-texts.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 --exclude-texts=index

Al ver este resultado y compararlo sin los resultados filtrados, podemos observar que ha excluido el texto con “index” de sus resultados.
Excluir tamaños
Al igual que antes hemos eliminado o excluido el texto no deseado, también podemos excluir algunos tamaños de archivos de nuestros resultados según nuestra necesidad. Utilizando este parámetro llamado –exclude-sizes
.
./dirsearch.py -u http://testphp.vulnweb.com/ -i 200 --exclude-sizes=5KB

Como podemos ver este resultado y compararlo sin los resultados filtrados, podemos observar que ha excluido los tamaños de archivos tienen 5KB de los resultados.
Escaneo de versiones
Como todos sabemos que nuestro escáner de contenido web dirsearch se actualiza constantemente con el tiempo. Algunas características se añadirán con la demanda de tiempo. Podemos utilizar el parámetro -version
para ver si nuestra herramienta está actualizada o no.
./dirsearch.py --version

Este artículo fue inspirado en Shubham Sharma, un apasionado de la investigación en ciberseguridad, contacta con él en LinkedIn y Twitter.