Como hacer un DIRB simple con bash scripting (DIRBASH)

Hola a todos, el anterior post se hablo sobre una herramienta interesante que permite descubrir contenido web “oculto”, en esta ocación se va explicar con información técnica de como realizar un dirb utilizando bash scripting

Requerimientos

  • Linux
  • Bash
  • Curl
  • Diccionario

Como instalar curl

Este comando permite enviar o recibir información de un servidor

sudo apt update
sudo apt install curl -y

Código HTTP 200

Una explicación simple del significado del código 200 de HTTP es: La solicitud tuvo éxito.

DirBash

A continuación se mostrara un simple script que se escribió para realizar el mismo mecanismo de dirb

#!/bin/bash

TARGET=$1
WORDLIST=$2

if [ -z "$TARGET" ]; then
    echo "La variable TARGET está vacía."
    exit 1
fi

if [ ! -f "$WORDLIST" ]; then
    echo "El archivo $WORDLIST no existe."
    exit 1
fi

while IFS= read -r WORD
do 
    STATUS_CODE=$(curl -o /dev/null -L -s -w "%{http_code}\n" "${TARGET}/${WORD}")
    if [ "$STATUS_CODE" -eq 200 ];then 
        echo "(CODE: 200) ${TARGET}/${WORD}"
    fi
done < "$WORDLIST"

Explicación

Shebang

Indica que el script debe ser ejecutado con el intérprete de Bash.

#!/bin/bash

Asignación de Variables

  • TARGET=$1: Asigna el primer argumento de la línea de comandos a la variable TARGET.
  • WORDLIST=$2: Asigna el segundo argumento de la línea de comandos a la variable WORDLIST.

Verificación de la Variables

if [ -z "$TARGET" ]; then: Verifica si la variable TARGET está vacía.

  • echo "La variable TARGET está vacía.": Imprime un mensaje si TARGET está vacía.
  • exit 1: Termina el script con un código de salida 1 si TARGET está vacía.

if [ ! -f "$WORDLIST" ]; then: Verifica si el archivo WORDLIST no existe.

  • echo "El archivo $WORDLIST no existe.": Imprime un mensaje si el archivo WORDLIST no existe.
  • exit 1: Termina el script con un código de salida 1 si el archivo WORDLIST no existe.

Lectura del Archivo WORDLIST

while IFS= read -r WORD: Lee el archivo WORDLIST línea por línea, asignando cada línea a la variable WORD.

  • IFS=: Establece el Internal Field Separator (IFS) a una cadena vacía para preservar los espacios en blanco.
  • read -r WORD: Lee cada línea del archivo, asignándola a la variable WORD.

Nota.- Se va reutilizar el diccionario de “dirb”

Construcción de la URL y Verificación del Código de Estado HTTP

STATUS_CODE=$(curl -o /dev/null -L -s -w "%{http_code}\n" "${TARGET}/${WORD}"):

  • curl: Utiliza curl para realizar una solicitud HTTP.
  • -o /dev/null: Descarta el contenido de la respuesta.
  • -L: Sigue las redirecciones.
  • -s: Ejecuta curl en modo silencioso, sin mostrar el progreso.
  • -w "%{http_code}\n": Muestra el código de estado HTTP de la respuesta.
  • "${TARGET}/${WORD}": Construye la URL combinando TARGET y WORD.

Verificación del Código de Estado HTTP

  • if [ "$STATUS_CODE" -eq 200 ]; then: Verifica si el código de estado HTTP es 200.
    • echo "(CODE: 200) ${TARGET}/${WORD}": Imprime un mensaje indicando que la URL existe y tiene un código de estado 200.

Como usar

Sintaxis:

  bash dirbash [TARGET] [WORDLIST]

ej:

  bash dirbash http://localhost /ruta/del/diccionario/wordlist.txt 
prueba practica de la herramienta
Se observa la existencia del directorio .git aun cuando no se ve en la anterior imagen

Resumen

Este script en Bash emula la funcionalidad de dirb al verificar la existencia de diferentes rutas en un servidor web. Toma una URL base y una lista de palabras, construye URLs combinando ambos, y utiliza curl para identificar aquellas rutas que existen (código HTTP 200). Es una herramienta sencilla y efectiva para pruebas de seguridad web.

Fuente

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#successful_responses

https://nucleolinux.org/2024/06/25/dirb-herramienta-para-descubrimiento-de-contenido-web/

Comments are closed.