Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
subcrawl — Marco modular para el descubrimiento y análisis de directorios abiertos en la web. Rastrea URLs, extrae contenido, aplica escaneo con YARA/ClamAV y envía los resultados a MISP, SQLite o la consola para inteligencia de amenazas. | Kitploit
Herramientas/GitHubGitHub/hpthreatresearch/subcrawl
OSINT (Inteligencia de Fuentes Abiertas)Análisis de VulnerabilidadesRecopilación de InformaciónSeguridad WebInteligencia de AmenazasCrawler
GitHubhpthreatresearch/subcrawl

subcrawl

Marco modular para el descubrimiento y análisis de directorios abiertos en la web. Rastrea URLs, extrae contenido, aplica escaneo con YARA/ClamAV y envía los resultados a MISP, SQLite o la consola para inteligencia de amenazas.

Ver Repositorio
15036hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

SubCrawl

SubCrawl es un framework desarrollado por Patrick Schläpfer, Josh Stroschein y Alex Holland del equipo de Threat Research de HP Inc. SubCrawl está diseñado para encontrar, escanear y analizar directorios abiertos. El framework es modular, compuesto por cuatro componentes: módulos de entrada, módulos de procesamiento, módulos de salida y el motor de rastreo principal. Las URL son los valores de entrada primarios, que el framework analiza y añade a un sistema de colas antes de rastrearlas. El análisis de las URL es un primer paso importante, ya que toma una URL enviada y genera URLs adicionales para rastrear eliminando subdirectorios, uno a la vez, hasta que no quede ninguno. Este proceso garantiza un intento de escaneo más completo de un servidor web y puede llevar al descubrimiento de contenido adicional. Cabe destacar que SubCrawl no utiliza un método de fuerza bruta para descubrir URLs. Todo el contenido escaneado proviene de las URLs de entrada, el proceso de análisis de la URL y el descubrimiento durante el rastreo. Cuando se descubre un directorio abierto, el motor de rastreo extrae enlaces del directorio para su evaluación. El motor de rastreo determina si el enlace es otro directorio o un archivo. Los directorios se añaden a la cola de rastreo, mientras que los archivos son sometidos a un análisis adicional por los módulos de procesamiento. Se generan y almacenan resultados para cada URL escaneada, como los hashes SHA256 y difusos del contenido, si se encontró un directorio abierto, o coincidencias con reglas YARA. Finalmente, los datos de resultado se procesan según uno o más módulos de salida, de los cuales actualmente hay tres. El primero proporciona integración con MISP, el segundo simplemente imprime los datos en la consola, y el tercero almacena los datos en una base de datos SQLite. Dado que el framework es modular, no solo es fácil configurar qué módulos de entrada, procesamiento y salida se desean, sino también desarrollar nuevos módulos de manera sencilla.

Arquitectura del Framework Figura 1 - Arquitectura de SubCrawl

SubCrawl admite dos modos de operación diferentes. Primero, SubCrawl puede iniciarse en modo de ejecución única. En este modo, el usuario proporciona las URLs a escanear en un archivo donde cada valor de entrada está separado por un salto de línea. El segundo modo de operación es el modo servicio. En este modo, SubCrawl se ejecuta en segundo plano y depende de los módulos de entrada para suministrar las URLs a escanear. La Figura 1 muestra una visión general de la arquitectura de SubCrawl. Los componentes que se utilizan en ambos modos de operación son azules, los componentes del modo de ejecución única son amarillos y los del modo servicio son verdes.

Requisitos

Según el modo de ejecución elegido, deben cumplirse otras condiciones previas.

Requisitos del modo de ejecución única

SubCrawl está escrito en Python3. Además, hay varios paquetes necesarios antes de ejecutar SubCrawl. El siguiente comando puede usarse para instalar todos los paquetes requeridos antes de ejecutar SubCrawl. Desde el directorio crawler, ejecute el siguiente comando:

root@kitploit:~
$ sudo apt install build-essential
$ pip3 install -r requirements.txt

Requisitos del modo servicio

Si SubCrawl se inicia en modo servicio, esto se puede hacer mediante Docker. Por esta razón, se requiere la instalación de Docker y Docker Compose. Se pueden encontrar buenas instrucciones de instalación directamente en el sitio web de Docker.com.

  • Instalación de Docker Engine
  • Instalación de Docker Compose

Obteniendo Ayuda

SubCrawl tiene ayuda incorporada a través del argumento -h/--help o simplemente ejecutando el script sin ningún argumento.

root@kitploit:~
  ********         **        ******                               **
 **//////         /**       **////**                             /**
/**        **   **/**      **    //  ******  ******   ***     ** /**
/*********/**  /**/****** /**       //**//* //////** //**  * /** /**
////////**/**  /**/**///**/**        /** /   *******  /** ***/** /**
       /**/**  /**/**  /**//**    ** /**    **////**  /****/**** /**
 ******** //******/******  //****** /***   //******** ***/ ///** ***
////////   ////// /////     //////  ///     //////// ///    /// /// 
~~ Cosechando la Web Abierta ~~

usage: subcrawl.py [-h] [-f FILE_PATH] [-k] [-p PROCESSING_MODULES] [-s STORAGE_MODULES]

optional arguments:
  -h, --help            show this help message and exit
  -f FILE_PATH, --file FILE_PATH
                        Path of input URL file
  -k, --kafka           Use Kafka Queue as input
  -p PROCESSING_MODULES, --processing PROCESSING_MODULES
                        Processing modules to be executed comma separated.
  -s STORAGE_MODULES, --storage STORAGE_MODULES
                        Storage modules to be executed comma separated.

  Available processing modules: 
  - ClamAVProcessing
  - JARMProcessing
  - PayloadProcessing
  - TLSHProcessing
  - YARAProcessing

  Available storage modules: 
  - ConsoleStorage
  - MISPStorage
  - SqliteStorage

Modo de ejecución única

Este modo es adecuado si desea escanear rápidamente una cantidad manejable de dominios. Para ello, las URLs a escanear deben guardarse en un archivo, que luego sirve como entrada para el rastreador. A continuación se muestra un ejemplo de ejecución en modo de ejecución única, notar que el argumento -f se usa con una ruta a un archivo.

root@kitploit:~
python3 subcrawl.py -f urls.txt -p YARAProcessing,PayloadProcessing -s ConsoleStorage

Modo servicio

Con el modo servicio, se puede escanear una mayor cantidad de dominios y guardar los resultados. Según el módulo de almacenamiento seleccionado, los datos pueden analizarse y evaluarse con más detalle. Para que la ejecución del modo servicio sea lo más fácil posible para el usuario, incorporamos todas las funcionalidades en una imagen Docker. En modo servicio, los dominios a escanear se obtienen a través de módulos de entrada. De forma predeterminada, se descargan nuevas URL de malware y phishing desde URLhaus y PhishTank y se ponen en cola para su escaneo. Los módulos de procesamiento y almacenamiento deseados se pueden ingresar directamente en config.yml. Por defecto, los siguientes módulos de procesamiento están activados, utilizando el almacenamiento SQLite:

  • ClamAVProcessing
  • JARMProcessing
  • TLSHProcessing
  • YARAProcessing

Además del módulo de almacenamiento SQLite, se desarrolló una interfaz web simple que permite ver y gestionar los dominios y URLs escaneados.

Interfaz web para el módulo de almacenamiento SQLite

Sin embargo, si esta interfaz no es suficiente para la evaluación posterior de los datos, se puede activar el módulo de almacenamiento MISP de forma alternativa o adicional. La configuración correspondiente debe realizarse en config.yml en la sección MISP.

Los siguientes dos comandos son suficientes para clonar el repositorio GIT, crear el contenedor Docker e iniciarlo directamente. Luego, la interfaz web se puede alcanzar en la dirección https://localhost:8000/. Tenga en cuenta que una vez que los contenedores se hayan iniciado, los módulos de entrada comenzarán a agregar URLs a la cola de procesamiento y el motor comenzará a rastrear hosts.

root@kitploit:~
git clone https://github.com/hpthreatresearch/subcrawl.git

docker-compose up --build 

Módulos de SubCrawl

Módulos de entrada

Los módulos de entrada solo se utilizan en modo servicio. Si SubCrawl se inicia usando el modo de ejecución única, se debe proporcionar un archivo que contenga las URLs a escanear. Se han implementado los siguientes dos módulos de entrada.

URLhaus

URLhaus es un servicio web prominente que rastrea URLs maliciosas. El servicio web también proporciona exportaciones que contienen nuevas URLs detectadas. Estas URLs de malware sirven como entrada perfecta para nuestro rastreador, ya que principalmente queremos analizar dominios maliciosos. Se recuperan las URLs enviadas recientemente y los resultados de búsqueda no se refinan a través de la solicitud API (es decir, mediante etiquetas u otros parámetros disponibles). La solicitud HTTP realizada en este módulo de entrada a la API de URLHaus se puede modificar para refinar aún más los resultados obtenidos.

PhishTank

PhishTank es un sitio web que recopila URLs de phishing. Los usuarios tienen la posibilidad de enviar nuevas páginas de phishing encontradas. Se puede generar y descargar una exportación con URLs de phishing activas desde este servicio web a través de la API. Así que esta también es una colección ideal para nuestro rastreador.

Módulos de procesamiento

SubCrawl incluye varios módulos de procesamiento. Los módulos de procesamiento siguen un comportamiento similar en cuanto a cómo proporcionan resultados al motor central. Si se encuentran coincidencias, los resultados se devuelven al motor central y posteriormente se proporcionan a los módulos de almacenamiento. A continuación se muestra una lista de módulos de procesamiento.

SDHash

El módulo de procesamiento SDHash se utiliza para calcular un hash de similitud de la respuesta HTTP. El tamaño mínimo del contenido debe ser de 512 bytes para poder calcular exitosamente un hash. Este es probablemente el módulo de procesamiento más complicado de instalar, ya que requiere Protobuf y dependiendo del host de destino debe ser recompilado. Por lo tanto, este módulo de procesamiento está desactivado por defecto. Una versión ya compilada se puede encontrar en crawler/processing/minisdhash/ que requiere protobuf-2.5.0 y python3.6. Esos binarios fueron compilados en un Ubuntu 18.04.5 LTS x64. Siguiendo las instrucciones de instalación:

root@kitploit:~
# Instalación de Protobuf
> apt-get update
> apt-get -y install libssl-dev libevent-pthreads-2.1-6 libomp-dev g++
> apt-get -y install autoconf automake libtool curl make g++ unzip
> wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.zip
> unzip protobuf-2.5.0.zip
> cd protobuf-2.5.0
> ./configure
> make
> sudo make install

# Instalación de Python3.6
> apt-get install python3.6-dev
> sudo ldconfig

# Instalación de SDHash
> git clone https://github.com/sdhash/sdhash.git
> cd sdhash
> make
> make install
> ldconfig

JARM

JARM es una herramienta que genera huellas digitales de conexiones TLS desarrollada por Salesforce. El módulo de procesamiento JARM realiza un escaneo del dominio y devuelve un hash JARM con el dominio al motor central. Dependiendo de la configuración de un servidor web, el handshake TLS tiene diferentes propiedades. Al calcular un hash de los atributos de este handshake, estas diferencias se pueden utilizar para rastrear configuraciones de servidores web.

TLSH

El módulo de procesamiento TLSH es similar al módulo de procesamiento SDHash, utilizado para calcular un hash de similitud. La ventaja de TLSH es que la instalación es mucho más simple y el mínimo de entrada es más pequeño, de 50 bytes. Como la mayoría de los inicios de sesión de webshell son bastante pequeños y fueron el foco de nuestra investigación, activamos este módulo de procesamiento por defecto.

YARA

El módulo de procesamiento YARA se utiliza para escanear el contenido de la respuesta HTTP con reglas YARA. Para invocar este módulo de procesamiento, proporcione el valor YARAProcessing como argumento del módulo de procesamiento. Por ejemplo, el siguiente comando cargará el módulo de procesamiento YARA y producirá salida en la consola a través del módulo de almacenamiento ConsoleStorage.

root@kitploit:~
python3 subcrawl.py -p YARAProcessing -s ConsoleStorage

Actualmente, el módulo de procesamiento YARA se utiliza para identificar inicios de sesión de webshell y otro contenido interesante. Las reglas YARA incluidas con este proyecto:

  • protected_webshell: Identifica páginas de inicio de sesión de webshells protegidas por contraseña
  • js_webshell_tracking_script: Identifica plugins/temas con puerta trasera que usan JavaScript para notificar al atacante cuando el webshell se activa
  • open_webshell: Identifica webshells abiertos (es decir, webshells que no están protegidos por inicio de sesión)
  • php_webshell_backend: Identifica el backend PHP de webshell utilizado por el atacante

Salida de muestra: Salida del procesamiento YARA

Para agregar reglas YARA adicionales, puede agregar archivos .YAR a la carpeta yara-rules, y luego incluir el archivo de reglas agregando una declaración include en combined-rules.yar.

ClamAV

El módulo de procesamiento ClamAV se utiliza para escanear el contenido de la respuesta HTTP durante el escaneo con ClamAV. Si se encuentra una coincidencia, se proporciona a los diversos módulos de salida. Para invocar este módulo de procesamiento, proporcione el valor ClamAVProcessing como argumento del módulo de procesamiento. Por ejemplo, el siguiente comando cargará el módulo de procesamiento ClamAV y producirá salida en la consola a través del módulo de almacenamiento ConsoleStorage.

root@kitploit:~
python3 subcrawl.py -p ClamAVProcessing -s ConsoleStorage

Salida de muestra: Módulo de procesamiento ClamAV

Para utilizar este módulo, ClamAV debe estar instalado. Desde una terminal, instale ClamAV usando el administrador de paquetes APT:

root@kitploit:~
$ sudo apt-get install clamav-daemon clamav-freshclam clamav-unofficial-sigs

Una vez instalado, el servicio de actualización de ClamAV ya debería estar en ejecución. Sin embargo, si desea actualizar manualmente usando freshclam, asegúrese de que el servicio esté detenido:

root@kitploit:~
sudo systemctl stop clamav-freshclam.service

Y luego ejecute freshclam manualmente:

root@kitploit:~
$ sudo freshclam

Finalmente, verifique el estado del servicio ClamAV:

root@kitploit:~
$ sudo systemctl status clamav-daemon.service

Si el servicio no se está ejecutando, puede usar systemctl para iniciarlo:

root@kitploit:~
$ sudo systemctl start clamav-daemon.service

Payload

El módulo de procesamiento Payload se utiliza para identificar el contenido de la respuesta HTTP utilizando la biblioteca libmagic. Además, SubCrawl se puede configurar para guardar contenido de interés, como archivos PE o archivos comprimidos. Para invocar este módulo de procesamiento, proporcione el valor PayloadProcessing como argumento del módulo de procesamiento. Por ejemplo, el siguiente comando cargará el módulo de procesamiento Payload y producirá salida en la consola:

root@kitploit:~
python3 subcrawl.py -p PayloadProcessing -s ConsoleStorage

No hay dependencias adicionales para este módulo.

Salida de muestra: Salida del procesamiento Payload

Módulos de almacenamiento

Los módulos de almacenamiento son llamados por el motor de SubCrawl después de que todas las URLs de la cola han sido escaneadas. Fueron diseñados con dos objetivos: primero, obtener los resultados del escaneo inmediatamente después de finalizar la cola de escaneo y segundo, permitir el almacenamiento y análisis a largo plazo. Por lo tanto, no solo implementamos un módulo ConsoleStorage, sino también una integración para MISP y un módulo de almacenamiento SQLite.

Console

Para analizar rápidamente los resultados directamente después de escanear URLs, se imprime una salida bien formateada en la consola. Esta salida es más adecuada cuando SubCrawl se usa en modo de ejecución única. Si bien este enfoque funcionó bien para escanear dominios individuales o generar resultados rápidos, es engorroso para la investigación y análisis a largo plazo.

Interfaz de almacenamiento Console

Elastic

También está disponible la integración con un clúster Elastic. Cada URL junto con sus datos se indexarán como un evento, esto incluirá la salida de otros módulos como Yara. También se ha agregado un panel de control predeterminado para ayudar a comenzar a usar este módulo. Serán necesarias actualizaciones en la sección elasticsearch, que incluirán:

  • Host de Elastic search (por defecto localhost)
  • Puerto para encontrar Elastic (por defecto 9200)
  • Nombre del índice (por defecto subcrawl)
  • Archivar contenido de respuesta: guarda el cuerpo de la respuesta HTTP en disco (por defecto False)
  • Ubicación del registro de archivo: ubicación para guardar el contenido de la respuesta (por defecto log/)

Para usar este módulo de salida, proporcione el valor ElasticStorage con el argumento -s.

SQLite

Dado que la instalación y configuración de MISP puede llevar mucho tiempo, implementamos otro módulo que almacena los datos en una base de datos SQLite. Para presentar los datos al usuario de la manera más simple y clara posible, también desarrollamos una interfaz gráfica web simple. Usando esta aplicación web, los dominios y URLs escaneados se pueden ver y buscar con todos sus atributos. Dado que esta es solo una versión temprana, aún no se han implementado características complejas de comparación.

Interfaz SQLite

MISP

MISP es una plataforma de inteligencia de amenazas de código abierto con un modelo de datos flexible y API para almacenar y analizar datos de amenazas. SubCrawl almacena los datos rastreados en eventos MISP, publicando un evento por dominio y agregando cualquier directorio abierto identificado como atributos. MISP también permite a los usuarios definir etiquetas para eventos y atributos. Esto es útil para la comparación de eventos y análisis de enlaces. Dado que este era uno de nuestros objetivos de investigación principales, enriquecemos los datos de URLHaus al exportar la salida de SubCrawl a MISP. URLHaus anota sus datos usando etiquetas que pueden usarse para identificar una familia de malware o actor de amenaza asociado con una URL. Para cada URL de directorio abierto, el módulo consulta los datos de URLHaus almacenados localmente y agrega etiquetas de URLHaus al evento MISP si coinciden. Para evitar tener una colección de atributos no relacionados para cada evento MISP, creamos un nuevo objeto MISP para URLs escaneadas, llamado opendir-url. Esto asegura que los atributos relacionados se mantengan juntos, facilitando la obtención de una visión general de los datos.

Interfaz MISP

Construyendo sus propios Módulos

Se proporcionan plantillas para módulos de procesamiento y almacenamiento como parte del framework.

Módulos de procesamiento

Los módulos de procesamiento se pueden encontrar en crawler->processing y un archivo de módulo de ejemplo example_processing.py se encuentra en este directorio. La plantilla proporciona la herencia e importaciones necesarias para garantizar la ejecución por parte del framework. La función init proporciona la inicialización del módulo y recibe una instancia del registrador (logger) y la configuración global. El registrador se utiliza para proporcionar información de registro desde los módulos de procesamiento, así como en todo el framework.

La función process se implementa para procesar cada respuesta HTTP. Con este fin, recibe la URL y el contenido de la respuesta en bruto. Aquí es donde se implementa el trabajo del módulo. Esta función debe devolver un diccionario con los siguientes campos:

  • hash: el sha256 del contenido
  • url: la URL de la que se obtuvo el contenido
  • matches: cualquier resultado coincidente en el módulo, por ejemplo, resultados de libmagic o YARA.

Se debe definir un nombre de clase único y se utiliza para definir este módulo al incluirlo a través del argumento -p o como módulo de procesamiento predeterminado en el archivo de configuración.

Finalmente, añada una declaración de importación en __init__.py, usando su nombre de clase:

root@kitploit:~
from .<REEMPLAZAR>_processing import <REEMPLAZAR>Processing

Módulos de almacenamiento

Los módulos de almacenamiento se pueden encontrar en crawler->storage y un archivo de módulo de ejemplo example_storage.py se encuentra en este directorio. De manera similar a los módulos de procesamiento, la función init proporciona la inicialización del módulo y recibe una instancia del registrador y la configuración global. La función store_results recibe datos estructurados del motor en intervalos definidos por el tamaño del lote en el archivo de configuración.

Se debe definir un nombre de clase único y se utiliza para cargar el módulo al incluirlo a través del argumento -s o como módulo de procesamiento predeterminado en el archivo de configuración.

Presentaciones y otros recursos

2021:

  • BlackHat Arsenal USA
  • VirusBulletin Localhost - Próximamente

Licencia

SubCrawl está licenciado bajo la licencia MIT.

Descargar herramienta