Guía Completa de Uso dirsearch con Comandos
Guía Completa de Uso dirsearch con Comandos

Guía Completa sobre el Uso de dirsearch

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.

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.

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
Clonar repositorio de dirsearch
Clonar repositorio de dirsearch

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
Comando ayuda de dirsearch
Comando ayuda de dirsearch

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/
dirsearch contra URL objetivo
dirsearch contra URL objetivo

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
dirsearch para URL completa
dirsearch para URL completa

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ÓDIGOCATEGORÍADEFINICIÓN
1xx InformativoSe recibió la solicitud, continua el proceso.
2xx ExitosoLa solicitud fue satisfactoria, comprendida y aceptada.
3xx RedirecciónSe deben tomar más medidas para completar la solicitud.
4xx Error de clienteLa solicitud contiene una sintaxis incorrecta o no se puede cumplir.
5xx Error del servidorEl 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.

Excluir código de estado en dirsearch
Excluir código de estado en dirsearch

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
Filtrar por código estado
Filtrar por código estado

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
Guardar reporte en formato simple
Guardar reporte en formato simple

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

Ver contenido con comando nano
Ver contenido con comando nano

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

Visualizar contenido de nano
Visualizar contenido de nano

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
Guardar reporte en formato JSON
Guardar reporte en formato JSON

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

Visualizar contenido de JSON
Visualizar contenido de JSON

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
Guardar reporte en formato XML
Guardar reporte en formato XML

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

Visualizar contenido de XML
Visualizar contenido de XML

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
Guardar reporte en formato Markdown
Guardar reporte en formato Markdown

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

Visualizar contenido en Markdown
Visualizar contenido en Markdown

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
Guardar reporte en formato CSV
Guardar reporte en formato CSV

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

Visualizar contenido en formato CSV
Visualizar contenido en formato CSV

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
Guardar reporte en formato de texto plano
Guardar reporte en formato de texto plano

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

Visualizar contenido en texto plano
Visualizar contenido en texto plano

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
ejecución de dirsearch sin colores
ejecución de dirsearch sin colores

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
Ejecutar dirsearch en modo silencioso
Ejecutar dirsearch en modo silencioso

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/
dirsearch con escaneo normal
dirsearch con escaneo normal

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
dirsearch con escaneo recursivo
dirsearch con escaneo recursivo

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
dirsearch con método POST
dirsearch con método 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
Retraso de petición en dirsearch
Retraso de petición en dirsearch

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.

Filtrar por tamaño mínimo
Filtrar por tamaño mínimo

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
Filtrar tamaño máximo y mínimo

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
Agente aleatorio en dirsearch
Agente aleatorio en dirsearch

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
Filtrar por sufijos en dirsearch
Filtrar por sufijos en dirsearch

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
Filtrar por prefijos en dirsearch
Filtrar por prefijos en dirsearch

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
Aumentar cantidad de hilos en dirsearch
Aumentar cantidad de hilos en dirsearch

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
Filtro por solo seleccionado
Filtro por solo seleccionado

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
Eliminar extensiones en dirsearch
Eliminar extensiones en dirsearch

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
Filtro de directorios con nombre mayúscula
Filtro de directorios con nombre mayúscula

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
Filtro de directorios con nombres en minúsculas
Filtro de directorios con nombres en minúsculas

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
Filtro de directorios por nombres capitales
Filtro de directorios por nombres capitales

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
Excluir textos de resultados en dirsearch
Excluir textos de resultados en dirsearch

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
Excluir tamaños personalizados de dirsearch
Excluir tamaños personalizados de dirsearch

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
Comprobar versión de dirsearch
Comprobar versión de dirsearch

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

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda
Más artículos
CyberScan Kit de herramientas forenses para Redes
CyberScan: Kit de Herramientas Forenses para Redes