JoomScan - Escáner de Vulnerabilidades para Joomla
JoomScan - Escáner de Vulnerabilidades para Joomla
Section titled “JoomScan - Escáner de Vulnerabilidades para Joomla”Introducción
Section titled “Introducción”JoomScan es una herramienta de código abierto especializada en la detección de vulnerabilidades en sitios web que utilizan el CMS Joomla. Desarrollada en Perl, esta herramienta automatiza el proceso de reconocimiento y análisis de seguridad, identificando versiones, componentes vulnerables, archivos de configuración expuestos y posibles vectores de ataque.
¿Qué es Joomla?
Section titled “¿Qué es Joomla?”Joomla es un sistema de gestión de contenidos (CMS) de código abierto utilizado para crear sitios web y aplicaciones online. Es el segundo CMS más popular después de WordPress, con características como:
- Extensibilidad: Miles de extensiones, componentes y plantillas
- Multiidioma: Soporte nativo para múltiples idiomas
- Gestión de usuarios: Sistema robusto de roles y permisos
- SEO-friendly: Herramientas integradas para optimización
Importancia en Pentesting
Section titled “Importancia en Pentesting”JoomScan es crucial en auditorías de seguridad porque:
- Fingerprinting: Identifica versiones específicas de Joomla
- Detección de vulnerabilidades: Encuentra CVEs conocidos
- Análisis de componentes: Enumera extensiones y sus versiones
- Configuración insegura: Detecta archivos de backup y configuración expuestos
Instalación
Section titled “Instalación”Kali Linux
Section titled “Kali Linux”# JoomScan viene preinstalado en Kali Linuxjoomscan --help
# Si no está instalado:sudo apt updatesudo apt install joomscanUbuntu/Debian
Section titled “Ubuntu/Debian”# Instalar dependenciassudo apt updatesudo apt install git perl libwww-perl
# Clonar desde GitHubgit clone https://github.com/OWASP/joomscan.gitcd joomscanchmod +x joomscan.pl
# Crear enlace simbólico (opcional)sudo ln -s $(pwd)/joomscan.pl /usr/local/bin/joomscanDesde código fuente
Section titled “Desde código fuente”# Clonar repositorio oficialgit clone https://github.com/OWASP/joomscan.gitcd joomscan
# Instalar dependencias de Perlsudo cpan install LWP::UserAgentsudo cpan install HTTP::Requestsudo cpan install URI::URL
# Hacer ejecutablechmod +x joomscan.plSintaxis Básica
Section titled “Sintaxis Básica”# Sintaxis generaljoomscan [opciones] -u <URL>
# Escaneo básicojoomscan -u http://ejemplo.com
# Escaneo con todas las opcionesjoomscan -u http://ejemplo.com -ec -at -ar -ahParámetros Principales
Section titled “Parámetros Principales”Opciones de Escaneo
Section titled “Opciones de Escaneo”| Parámetro | Descripción | Ejemplo |
|---|---|---|
-u | URL objetivo | -u http://ejemplo.com |
-ec | Enumerar componentes | -ec |
-ep | Enumerar plugins | -ep |
-et | Enumerar templates | -et |
-el | Enumerar idiomas | -el |
-at | Buscar archivos de backup | -at |
-ar | Buscar robots.txt | -ar |
-ah | Buscar archivos .htaccess | -ah |
-as | Buscar archivos de configuración | -as |
Opciones de Salida
Section titled “Opciones de Salida”| Parámetro | Descripción | Ejemplo |
|---|---|---|
-v | Modo verbose | -v |
-r | Generar reporte | -r |
--output | Archivo de salida | --output reporte.txt |
--no-colour | Sin colores | --no-colour |
Ejemplos Básicos
Section titled “Ejemplos Básicos”Escaneo Rápido
Section titled “Escaneo Rápido”# Escaneo básico de fingerprintingjoomscan -u http://ejemplo.com
# Ejemplo de salida:# ____ _____ _____ __ __ ___ ___ _ _ _# | _ \| _ || _ || \/ |/ __| / __| /_\ | \ | |# | |_) | |_| || |_| || |\/| |\__ \| (__ //_\\ | \| |# |____/|_____|_____|_| |_| |___/ \___|/_/ \_\_|\_|## Target: http://ejemplo.com# Joomla Version: 3.9.28# Server: Apache/2.4.41Enumeración Completa
Section titled “Enumeración Completa”# Escaneo completo con todas las opcionesjoomscan -u http://ejemplo.com -ec -ep -et -el -at -ar -ah -as -v
# Guardar resultados en archivojoomscan -u http://ejemplo.com -ec -ep -et --output escaneo_completo.txtEscaneo de Múltiples Sitios
Section titled “Escaneo de Múltiples Sitios”# Crear lista de URLsecho "http://sitio1.com" > urls.txtecho "http://sitio2.com" >> urls.txtecho "http://sitio3.com" >> urls.txt
# Escanear múltiples sitiosfor url in $(cat urls.txt); do echo "Escaneando: $url" joomscan -u $url -ec -ep > "resultado_$(echo $url | sed 's/http:\/\///g' | sed 's/\//_/g').txt"doneEjemplos Avanzados
Section titled “Ejemplos Avanzados”Script de Automatización
Section titled “Script de Automatización”#!/bin/bash
# Script de auditoría automatizada para Joomla# Uso: ./joomla_audit.sh <URL>
URL=$1TIMESTAMP=$(date +%Y%m%d_%H%M%S)OUTPUT_DIR="joomla_audit_${TIMESTAMP}"
if [ -z "$URL" ]; then echo "Uso: $0 <URL>" exit 1fi
echo "[+] Iniciando auditoría de Joomla para: $URL"mkdir -p $OUTPUT_DIR
# 1. Escaneo básico de fingerprintingecho "[+] Fase 1: Fingerprinting básico"joomscan -u $URL > $OUTPUT_DIR/01_fingerprinting.txt
# 2. Enumeración de componentesecho "[+] Fase 2: Enumeración de componentes"joomscan -u $URL -ec > $OUTPUT_DIR/02_componentes.txt
# 3. Enumeración de plugins y templatesecho "[+] Fase 3: Enumeración de extensiones"joomscan -u $URL -ep -et > $OUTPUT_DIR/03_extensiones.txt
# 4. Búsqueda de archivos sensiblesecho "[+] Fase 4: Archivos sensibles"joomscan -u $URL -at -ar -ah -as > $OUTPUT_DIR/04_archivos_sensibles.txt
# 5. Escaneo completo con verboseecho "[+] Fase 5: Escaneo completo"joomscan -u $URL -ec -ep -et -el -at -ar -ah -as -v > $OUTPUT_DIR/05_escaneo_completo.txt
# 6. Verificaciones adicionales manualesecho "[+] Fase 6: Verificaciones adicionales"echo "=== Verificación de archivos comunes ===" > $OUTPUT_DIR/06_verificaciones_adicionales.txtcurl -s -o /dev/null -w "%{http_code}" $URL/configuration.php >> $OUTPUT_DIR/06_verificaciones_adicionales.txtecho " - configuration.php" >> $OUTPUT_DIR/06_verificaciones_adicionales.txtcurl -s -o /dev/null -w "%{http_code}" $URL/configuration.php-dist >> $OUTPUT_DIR/06_verificaciones_adicionales.txtecho " - configuration.php-dist" >> $OUTPUT_DIR/06_verificaciones_adicionales.txtcurl -s -o /dev/null -w "%{http_code}" $URL/htaccess.txt >> $OUTPUT_DIR/06_verificaciones_adicionales.txtecho " - htaccess.txt" >> $OUTPUT_DIR/06_verificaciones_adicionales.txt
echo "[+] Auditoría completada. Resultados en: $OUTPUT_DIR"Análisis de Versiones Vulnerables
Section titled “Análisis de Versiones Vulnerables”#!/bin/bash
# Script para verificar versiones vulnerables de Joomlacheck_joomla_vulnerabilities() { local url=$1 local version=$(joomscan -u $url | grep "Joomla Version" | cut -d: -f2 | tr -d ' ')
echo "[+] Versión detectada: $version"
# Base de datos de versiones vulnerables (simplificada) case $version in "1.5."*|"1.6."*|"1.7."*|"2.5."*|"3.0."*|"3.1."*|"3.2."*|"3.3."*) echo "[!] CRÍTICO: Versión muy antigua con múltiples vulnerabilidades" echo " - Recomendación: Actualizar inmediatamente" ;; "3.4."*|"3.5."*|"3.6."*|"3.7."*|"3.8."*) echo "[!] ALTO: Versión con vulnerabilidades conocidas" echo " - CVE-2018-6376: SQL Injection" echo " - CVE-2018-6377: XSS" ;; "3.9."*) if [[ $version < "3.9.28" ]]; then echo "[!] MEDIO: Versión con vulnerabilidades menores" echo " - Recomendación: Actualizar a 3.9.28+" else echo "[+] Versión relativamente segura" fi ;; "4."*) echo "[+] Versión moderna - Verificar actualizaciones menores" ;; *) echo "[?] Versión no reconocida: $version" ;; esac}
# Usocheck_joomla_vulnerabilities "http://ejemplo.com"Interpretación de Resultados
Section titled “Interpretación de Resultados”Información de Fingerprinting
Section titled “Información de Fingerprinting”# Ejemplo de salida típica:Target: http://ejemplo.comJoomla Version: 3.9.28Server: Apache/2.4.41 (Ubuntu)X-Powered-By: PHP/7.4.3Análisis:
- Versión de Joomla: Identifica la versión exacta para buscar CVEs
- Servidor web: Apache con versión específica
- PHP: Versión del intérprete PHP
Componentes Encontrados
Section titled “Componentes Encontrados”# Ejemplo de enumeración de componentes:[+] Component: com_content (Core)[+] Component: com_users (Core)[+] Component: com_contact (Core)[+] Component: com_akeeba (Third-party) - Version: 7.5.1[+] Component: com_joomfish (Third-party) - VULNERABLEAnálisis:
- Componentes core: Parte del núcleo de Joomla
- Componentes third-party: Extensiones de terceros (mayor riesgo)
- Versiones: Importante para verificar vulnerabilidades
Archivos Sensibles
Section titled “Archivos Sensibles”# Archivos encontrados:[+] configuration.php found (200)[+] htaccess.txt found (200)[+] robots.txt found (200)[!] configuration.php-dist found (200) - SENSITIVE[!] .htaccess backup found (200) - SENSITIVEAnálisis:
- configuration.php: Contiene credenciales de base de datos
- Archivos de backup: Pueden exponer información sensible
- Códigos HTTP 200: Archivos accesibles públicamente
Técnicas Complementarias
Section titled “Técnicas Complementarias”Enumeración Manual de Directorios
Section titled “Enumeración Manual de Directorios”# Directorios comunes de Joomlagobuster dir -u http://ejemplo.com -w /usr/share/wordlists/dirb/common.txt -x php,txt,xml
# Directorios específicos de Joomlafor dir in administrator components modules plugins templates cache logs tmp; do echo "Verificando: /$dir" curl -s -o /dev/null -w "%{http_code} - $dir\n" http://ejemplo.com/$dir/doneVerificación de Archivos de Configuración
Section titled “Verificación de Archivos de Configuración”# Script para verificar archivos sensibles#!/bin/bash
check_sensitive_files() { local url=$1 local files=( "configuration.php" "configuration.php-dist" "configuration.php.bak" "configuration.php.old" "configuration.php~" "htaccess.txt" ".htaccess.bak" "web.config" "web.config.txt" "robots.txt" "README.txt" "LICENSE.txt" "CHANGELOG.php" )
echo "[+] Verificando archivos sensibles en: $url" for file in "${files[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url/$file") if [ "$status" = "200" ]; then echo "[!] ENCONTRADO: $file (HTTP $status)" elif [ "$status" = "403" ]; then echo "[?] PROHIBIDO: $file (HTTP $status) - Posiblemente existe" fi done}
check_sensitive_files "http://ejemplo.com"Enumeración de Usuarios
Section titled “Enumeración de Usuarios”# Enumeración de usuarios a través de la APIcurl -s "http://ejemplo.com/index.php?option=com_users&view=users&format=json" | jq '.'
# Enumeración a través de feeds RSScurl -s "http://ejemplo.com/index.php?option=com_content&view=featured&format=feed" | grep -o "author.*" | head -10
# Enumeración a través de componentescurl -s "http://ejemplo.com/index.php?option=com_contact&view=contacts&format=json" | jq '.[]'Integración con Otras Herramientas
Section titled “Integración con Otras Herramientas”Con Nmap
Section titled “Con Nmap”# Escaneo de puertos seguido de JoomScannmap -sV -p 80,443 ejemplo.comjoomscan -u http://ejemplo.com -ec -epCon Nikto
Section titled “Con Nikto”# Análisis complementario con Niktonikto -h http://ejemplo.comjoomscan -u http://ejemplo.com -at -ar -ahCon Burp Suite
Section titled “Con Burp Suite”# Configurar proxy para capturar tráfico de JoomScanexport http_proxy=http://127.0.0.1:8080export https_proxy=http://127.0.0.1:8080joomscan -u http://ejemplo.com -ecCon SQLMap
Section titled “Con SQLMap”# Si JoomScan encuentra parámetros vulnerables# Ejemplo: com_content con parámetro id vulnerablesqlmap -u "http://ejemplo.com/index.php?option=com_content&view=article&id=1" --dbsCasos de Uso Específicos
Section titled “Casos de Uso Específicos”Auditoría de Seguridad Corporativa
Section titled “Auditoría de Seguridad Corporativa”#!/bin/bash
# Script de auditoría corporativa para múltiples sitios Joomlacorporate_audit() { local company_name=$1 local urls_file=$2 local output_base="audit_${company_name}_$(date +%Y%m%d)"
mkdir -p $output_base
echo "[+] Iniciando auditoría corporativa para: $company_name"
while IFS= read -r url; do site_name=$(echo $url | sed 's/https\?:\/\///g' | sed 's/\/.*//g') echo "[+] Auditando: $site_name"
# Crear directorio para cada sitio mkdir -p "$output_base/$site_name"
# JoomScan completo joomscan -u $url -ec -ep -et -el -at -ar -ah -as -v > "$output_base/$site_name/joomscan_full.txt"
# Verificaciones adicionales check_sensitive_files $url > "$output_base/$site_name/sensitive_files.txt"
# Resumen de vulnerabilidades echo "=== RESUMEN DE $site_name ===" >> "$output_base/resumen_ejecutivo.txt" grep -E "(VULNERABLE|CRITICAL|HIGH)" "$output_base/$site_name/joomscan_full.txt" >> "$output_base/resumen_ejecutivo.txt" echo "" >> "$output_base/resumen_ejecutivo.txt"
done < $urls_file
echo "[+] Auditoría completada. Resultados en: $output_base"}
# Uso:# echo "http://sitio1.com" > sitios_empresa.txt# echo "http://sitio2.com" >> sitios_empresa.txt# corporate_audit "EmpresaXYZ" sitios_empresa.txtMonitoreo Continuo
Section titled “Monitoreo Continuo”#!/bin/bash
# Script de monitoreo continuo para cambios en Joomlacontinuous_monitoring() { local url=$1 local baseline_file="baseline_$(echo $url | sed 's/https\?:\/\///g' | sed 's/\//_/g').txt" local current_file="current_$(date +%Y%m%d_%H%M%S).txt"
# Generar escaneo actual joomscan -u $url -ec -ep -et > $current_file
if [ -f "$baseline_file" ]; then echo "[+] Comparando con baseline..." diff $baseline_file $current_file > changes.txt
if [ -s changes.txt ]; then echo "[!] CAMBIOS DETECTADOS:" cat changes.txt
# Enviar alerta (ejemplo con mail) # mail -s "Cambios detectados en $url" admin@empresa.com < changes.txt else echo "[+] No se detectaron cambios" fi else echo "[+] Creando baseline inicial..." cp $current_file $baseline_file fi}
# Ejecutar cada 24 horas con cron:# 0 2 * * * /path/to/continuous_monitoring.sh http://ejemplo.comEvasión y Técnicas Anti-Detección
Section titled “Evasión y Técnicas Anti-Detección”Modificar User-Agent
Section titled “Modificar User-Agent”# JoomScan con User-Agent personalizado# Nota: JoomScan no tiene opción nativa, usar proxy o modificar código
# Alternativa con curl para verificaciones manualescurl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \ -s http://ejemplo.com/administrator/ | grep -i joomlaUso de Proxies
Section titled “Uso de Proxies”# Configurar proxy para JoomScanexport http_proxy=http://proxy.ejemplo.com:8080export https_proxy=http://proxy.ejemplo.com:8080joomscan -u http://objetivo.com -ec
# Rotar proxies (script personalizado)#!/bin/bashproxies=("proxy1:8080" "proxy2:8080" "proxy3:8080")for proxy in "${proxies[@]}"; do export http_proxy=http://$proxy echo "[+] Usando proxy: $proxy" joomscan -u http://objetivo.com -ec sleep 60 # Delay entre escaneosdoneDelays y Throttling
Section titled “Delays y Throttling”# Script con delays para evitar detecciónslow_joomscan() { local url=$1
echo "[+] Escaneo lento para evadir detección"
# Fingerprinting básico joomscan -u $url sleep 30
# Componentes joomscan -u $url -ec sleep 60
# Plugins joomscan -u $url -ep sleep 60
# Templates joomscan -u $url -et sleep 30}Limitaciones y Consideraciones
Section titled “Limitaciones y Consideraciones”Limitaciones de JoomScan
Section titled “Limitaciones de JoomScan”- Detección limitada: No detecta todas las extensiones
- Falsos positivos: Puede reportar componentes inexistentes
- Versiones desactualizadas: Base de datos de vulnerabilidades puede estar desactualizada
- Detección WAF: Puede ser bloqueado por firewalls de aplicación
Mejores Prácticas
Section titled “Mejores Prácticas”- Combinar herramientas: Usar junto con Nikto, Nmap, etc.
- Verificación manual: Confirmar hallazgos manualmente
- Actualizar regularmente: Mantener JoomScan actualizado
- Documentar hallazgos: Registrar todos los resultados
Consideraciones Legales
Section titled “Consideraciones Legales”- Autorización: Solo usar en sitios propios o con autorización escrita
- Términos de servicio: Respetar los términos de uso de los sitios
- Legislación local: Cumplir con leyes locales de ciberseguridad
- Responsible disclosure: Reportar vulnerabilidades de forma responsable
Recursos Adicionales
Section titled “Recursos Adicionales”Herramientas Complementarias
Section titled “Herramientas Complementarias”- JoomlaVS: Scanner de vulnerabilidades específico
- Joomla Security Scanner: Herramienta online
- CMSmap: Scanner multi-CMS que incluye Joomla
- WhatWeb: Identificación de tecnologías web
Bases de Datos de Vulnerabilidades
Section titled “Bases de Datos de Vulnerabilidades”Documentación Oficial
Section titled “Documentación Oficial”Disclaimer Legal
Section titled “Disclaimer Legal”⚠️ IMPORTANTE: Esta documentación es únicamente para fines educativos y de investigación en ciberseguridad. El uso de JoomScan debe realizarse exclusivamente en:
- Sistemas propios
- Entornos de laboratorio
- Sitios web con autorización explícita y por escrito
El uso no autorizado de estas técnicas puede constituir un delito en muchas jurisdicciones. Los autores no se hacen responsables del mal uso de esta información.