MageScan - Escáner de Vulnerabilidades para Magento
MageScan - Escáner de Vulnerabilidades para Magento
Section titled “MageScan - Escáner de Vulnerabilidades para Magento”Introducción
Section titled “Introducción”MageScan es una herramienta especializada en la detección de vulnerabilidades en sitios web que utilizan el CMS de comercio electrónico Magento. Esta herramienta automatiza el proceso de reconocimiento, identificación de versiones, detección de módulos vulnerables y análisis de configuraciones de seguridad específicas de Magento.
¿Qué es Magento?
Section titled “¿Qué es Magento?”Magento es una plataforma de comercio electrónico de código abierto desarrollada en PHP, diseñada específicamente para tiendas online. Es conocida por:
- Flexibilidad: Altamente personalizable y escalable
- Funcionalidades avanzadas: Gestión de inventario, múltiples tiendas, SEO
- Arquitectura modular: Sistema de extensiones y temas
- Comunidad activa: Gran ecosistema de desarrolladores y plugins
Importancia en Pentesting de E-commerce
Section titled “Importancia en Pentesting de E-commerce”MageScan es crucial para auditorías de tiendas online porque:
- Datos sensibles: Información de clientes, tarjetas de crédito, pedidos
- Superficie de ataque amplia: Múltiples módulos y extensiones
- Configuraciones complejas: Muchas opciones de configuración de seguridad
- Vulnerabilidades específicas: CVEs únicos de la plataforma Magento
Instalación
Section titled “Instalación”Instalación desde GitHub
Section titled “Instalación desde GitHub”# Clonar el repositorio oficialgit clone https://github.com/steverobbins/magescan.gitcd magescan
# Instalar dependencias con Composercurl -sS https://getcomposer.org/installer | phpphp composer.phar install
# Hacer ejecutablechmod +x bin/magescanInstalación Global con Composer
Section titled “Instalación Global con Composer”# Instalar globalmentecomposer global require steverobbins/magescan
# Agregar al PATH (si no está ya)export PATH="$PATH:$HOME/.composer/vendor/bin"
# Verificar instalaciónmagescan --versionDocker (Recomendado)
Section titled “Docker (Recomendado)”# Usar imagen Docker oficialdocker pull steverobbins/magescan
# Ejecutar con Dockerdocker run --rm steverobbins/magescan scan:all http://ejemplo.comInstalación Manual
Section titled “Instalación Manual”# Descargar PHAR precompiladowget https://github.com/steverobbins/magescan/releases/download/v1.12.9/magescan.pharchmod +x magescan.pharsudo mv magescan.phar /usr/local/bin/magescan
# Verificar instalaciónmagescan --versionSintaxis Básica
Section titled “Sintaxis Básica”# Sintaxis generalmagescan [comando] [opciones] <URL>
# Escaneo completomagescan scan:all http://ejemplo.com
# Escaneo específicomagescan scan:version http://ejemplo.commagescan scan:modules http://ejemplo.commagescan scan:catalog http://ejemplo.comComandos Principales
Section titled “Comandos Principales”Comandos de Escaneo
Section titled “Comandos de Escaneo”| Comando | Descripción | Uso |
|---|---|---|
scan:all | Escaneo completo | magescan scan:all http://ejemplo.com |
scan:version | Detectar versión de Magento | magescan scan:version http://ejemplo.com |
scan:modules | Enumerar módulos instalados | magescan scan:modules http://ejemplo.com |
scan:catalog | Analizar catálogo de productos | magescan scan:catalog http://ejemplo.com |
scan:patch | Verificar parches de seguridad | magescan scan:patch http://ejemplo.com |
scan:sitemap | Analizar sitemap.xml | magescan scan:sitemap http://ejemplo.com |
scan:techheader | Verificar headers técnicos | magescan scan:techheader http://ejemplo.com |
scan:unreachable | Buscar rutas inaccesibles | magescan scan:unreachable http://ejemplo.com |
Opciones Globales
Section titled “Opciones Globales”| Opción | Descripción | Ejemplo |
|---|---|---|
--format | Formato de salida (text, json, xml) | --format=json |
--show-modules | Mostrar módulos en escaneo completo | --show-modules |
--insecure | Ignorar certificados SSL | --insecure |
--user-agent | User-Agent personalizado | --user-agent="Custom Agent" |
Ejemplos Básicos
Section titled “Ejemplos Básicos”Escaneo Rápido
Section titled “Escaneo Rápido”# Escaneo básico para identificar Magentomagescan scan:version http://ejemplo.com
# Ejemplo de salida:# +----------+------------------+# | Key | Value |# +----------+------------------+# | Edition | Community |# | Version | 2.4.3 |# | Status | Up to date |# +----------+------------------+Escaneo Completo
Section titled “Escaneo Completo”# Escaneo completo con todos los módulosmagescan scan:all http://ejemplo.com --show-modules
# Guardar resultados en JSONmagescan scan:all http://ejemplo.com --format=json > escaneo_magento.json
# Escaneo con User-Agent personalizadomagescan scan:all http://ejemplo.com --user-agent="Mozilla/5.0 (compatible; MageScan)"Verificación de Parches
Section titled “Verificación de Parches”# Verificar parches de seguridad aplicadosmagescan scan:patch http://ejemplo.com
# Ejemplo de salida:# +------------------+----------+# | Patch | Status |# +------------------+----------+# | SUPEE-9767 | Applied |# | SUPEE-10266 | Missing |# | SUPEE-10570 | Applied |# +------------------+----------+Ejemplos Avanzados
Section titled “Ejemplos Avanzados”Script de Auditoría Automatizada
Section titled “Script de Auditoría Automatizada”#!/bin/bash
# Script de auditoría completa para Magento# Uso: ./magento_audit.sh <URL>
URL=$1TIMESTAMP=$(date +%Y%m%d_%H%M%S)OUTPUT_DIR="magento_audit_${TIMESTAMP}"
if [ -z "$URL" ]; then echo "Uso: $0 <URL>" exit 1fi
echo "[+] Iniciando auditoría de Magento para: $URL"mkdir -p $OUTPUT_DIR
# 1. Identificación de versiónecho "[+] Fase 1: Identificación de versión"magescan scan:version $URL --format=json > $OUTPUT_DIR/01_version.json
# 2. Enumeración de módulosecho "[+] Fase 2: Enumeración de módulos"magescan scan:modules $URL --format=json > $OUTPUT_DIR/02_modules.json
# 3. Verificación de parchesecho "[+] Fase 3: Verificación de parches"magescan scan:patch $URL --format=json > $OUTPUT_DIR/03_patches.json
# 4. Análisis de catálogoecho "[+] Fase 4: Análisis de catálogo"magescan scan:catalog $URL --format=json > $OUTPUT_DIR/04_catalog.json
# 5. Headers técnicosecho "[+] Fase 5: Headers técnicos"magescan scan:techheader $URL --format=json > $OUTPUT_DIR/05_headers.json
# 6. Rutas inaccesiblesecho "[+] Fase 6: Rutas inaccesibles"magescan scan:unreachable $URL --format=json > $OUTPUT_DIR/06_unreachable.json
# 7. Sitemapecho "[+] Fase 7: Análisis de sitemap"magescan scan:sitemap $URL --format=json > $OUTPUT_DIR/07_sitemap.json
# 8. Escaneo completoecho "[+] Fase 8: Escaneo completo"magescan scan:all $URL --show-modules --format=json > $OUTPUT_DIR/08_full_scan.json
# 9. Verificaciones adicionales manualesecho "[+] Fase 9: Verificaciones adicionales"echo "=== Archivos sensibles ===" > $OUTPUT_DIR/09_additional_checks.txt
# Verificar archivos comunes de Magentomagento_files=( "app/etc/local.xml" "app/etc/config.xml" "app/etc/enterprise.xml" "var/log/system.log" "var/log/exception.log" "downloader/" "shell/" "dev/" "errors/local.xml" "api.php" "cron.php" "cron.sh")
for file in "${magento_files[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$URL/$file") echo "$status - $file" >> $OUTPUT_DIR/09_additional_checks.txtdone
echo "[+] Auditoría completada. Resultados en: $OUTPUT_DIR"
# Generar resumen ejecutivoecho "[+] Generando resumen ejecutivo..."generate_executive_summary $OUTPUT_DIRFunción de Resumen Ejecutivo
Section titled “Función de Resumen Ejecutivo”generate_executive_summary() { local output_dir=$1 local summary_file="$output_dir/RESUMEN_EJECUTIVO.txt"
echo "=== RESUMEN EJECUTIVO DE AUDITORÍA MAGENTO ===" > $summary_file echo "Fecha: $(date)" >> $summary_file echo "URL: $URL" >> $summary_file echo "" >> $summary_file
# Extraer información clave if [ -f "$output_dir/01_version.json" ]; then echo "=== VERSIÓN DETECTADA ===" >> $summary_file jq -r '.version // "No detectada"' $output_dir/01_version.json >> $summary_file jq -r '.edition // "No detectada"' $output_dir/01_version.json >> $summary_file echo "" >> $summary_file fi
# Parches faltantes if [ -f "$output_dir/03_patches.json" ]; then echo "=== PARCHES FALTANTES (CRÍTICO) ===" >> $summary_file jq -r '.patches[] | select(.status == "Missing") | .name' $output_dir/03_patches.json >> $summary_file echo "" >> $summary_file fi
# Módulos vulnerables if [ -f "$output_dir/02_modules.json" ]; then echo "=== MÓDULOS DETECTADOS ===" >> $summary_file jq -r '.modules[].name' $output_dir/02_modules.json | head -10 >> $summary_file echo "" >> $summary_file fi
# Archivos sensibles accesibles echo "=== ARCHIVOS SENSIBLES ACCESIBLES ===" >> $summary_file grep "200\|403" $output_dir/09_additional_checks.txt >> $summary_file
echo "[+] Resumen ejecutivo generado: $summary_file"}Análisis de Vulnerabilidades por Versión
Section titled “Análisis de Vulnerabilidades por Versión”#!/bin/bash
check_magento_vulnerabilities() { local url=$1 local version=$(magescan scan:version $url --format=json | jq -r '.version')
echo "[+] Analizando vulnerabilidades para Magento $version"
# Base de datos simplificada de vulnerabilidades por versión case $version in "1.9.0"*|"1.9.1"*|"1.9.2"*) echo "[!] CRÍTICO: Versión con múltiples vulnerabilidades" echo " - CVE-2016-4010: SQL Injection" echo " - CVE-2016-4011: Remote Code Execution" echo " - Recomendación: Actualizar a 1.9.4.5+" ;; "1.9.3"*|"1.9.4.0"|"1.9.4.1"|"1.9.4.2"|"1.9.4.3"|"1.9.4.4") echo "[!] ALTO: Versión con vulnerabilidades conocidas" echo " - Múltiples CVEs de seguridad" echo " - Recomendación: Actualizar a 1.9.4.5+" ;; "2.0"*|"2.1"*|"2.2"*|"2.3.0"|"2.3.1"|"2.3.2") echo "[!] ALTO: Versión Magento 2 con vulnerabilidades" echo " - CVE-2019-7139: SQL Injection" echo " - CVE-2019-7140: Remote Code Execution" echo " - Recomendación: Actualizar a versión más reciente" ;; "2.3.3"*|"2.3.4"*|"2.3.5"*|"2.3.6"*|"2.3.7"*) echo "[!] MEDIO: Versión con vulnerabilidades menores" echo " - Verificar parches de seguridad aplicados" echo " - Recomendación: Actualizar a 2.4.x" ;; "2.4"*) echo "[+] Versión moderna - Verificar actualizaciones menores" echo " - Mantener al día con parches de seguridad" ;; *) echo "[?] Versión no reconocida o no detectada: $version" echo " - Verificar manualmente la versión" ;; esac}
# Usocheck_magento_vulnerabilities "http://ejemplo.com"Interpretación de Resultados
Section titled “Interpretación de Resultados”Información de Versión
Section titled “Información de Versión”{ "edition": "Community", "version": "2.4.3", "status": "Up to date"}Análisis:
- Edition: Community (gratuita) vs Enterprise (comercial)
- Version: Versión específica para buscar CVEs
- Status: Estado de actualización
Módulos Detectados
Section titled “Módulos Detectados”{ "modules": [ { "name": "Mage_Adminhtml", "status": "enabled" }, { "name": "Mage_Catalog", "status": "enabled" }, { "name": "Custom_Payment", "status": "enabled", "risk": "high" } ]}Análisis:
- Módulos core: Parte del núcleo de Magento
- Módulos custom: Desarrollos personalizados (mayor riesgo)
- Status: enabled/disabled
Estado de Parches
Section titled “Estado de Parches”{ "patches": [ { "name": "SUPEE-9767", "status": "Applied", "severity": "Critical" }, { "name": "SUPEE-10266", "status": "Missing", "severity": "High" } ]}Análisis:
- Applied: Parche instalado correctamente
- Missing: Parche faltante (RIESGO)
- Severity: Nivel de criticidad
Técnicas Complementarias
Section titled “Técnicas Complementarias”Enumeración Manual de Directorios
Section titled “Enumeración Manual de Directorios”# Directorios específicos de Magentomagento_dirs=( "admin" "adminhtml" "app" "downloader" "shell" "var" "media" "skin" "js" "errors" "dev" "api.php" "cron.php" "get.php" "install.php")
echo "[+] Enumerando directorios de Magento"for dir in "${magento_dirs[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "http://ejemplo.com/$dir") if [ "$status" = "200" ] || [ "$status" = "403" ]; then echo "[!] Encontrado: $dir (HTTP $status)" fidoneVerificación de Archivos de Configuración
Section titled “Verificación de Archivos de Configuración”#!/bin/bash
check_magento_config_files() { local url=$1 local config_files=( "app/etc/local.xml" "app/etc/config.xml" "app/etc/enterprise.xml" "app/etc/modules/*.xml" "errors/local.xml" "var/log/system.log" "var/log/exception.log" "var/report/" ".htaccess" "robots.txt" "sitemap.xml" )
echo "[+] Verificando archivos de configuración de Magento" for file in "${config_files[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url/$file") case $status in 200) echo "[!] CRÍTICO: $file accesible (HTTP $status)" # Intentar obtener contenido si es XML if [[ $file == *.xml ]]; then content=$(curl -s "$url/$file" | head -5) if [[ $content == *"<config>"* ]] || [[ $content == *"<xml"* ]]; then echo " Contiene configuración XML sensible" fi fi ;; 403) echo "[?] PROTEGIDO: $file (HTTP $status) - Existe pero inaccesible" ;; 404) echo "[+] NO ENCONTRADO: $file (HTTP $status)" ;; esac done}
check_magento_config_files "http://ejemplo.com"Enumeración de Productos y Categorías
Section titled “Enumeración de Productos y Categorías”#!/bin/bash
enumerate_magento_catalog() { local url=$1
echo "[+] Enumerando catálogo de Magento"
# Intentar acceder al sitemap para obtener URLs sitemap_content=$(curl -s "$url/sitemap.xml") if [ ! -z "$sitemap_content" ]; then echo "[+] Sitemap encontrado, extrayendo URLs de productos" echo "$sitemap_content" | grep -oP '<loc>\K[^<]*' | grep -E "(product|category)" | head -20 fi
# Intentar enumeración directa de categorías echo "[+] Probando categorías comunes" common_categories=( "electronics" "clothing" "books" "home-garden" "sports" "toys" "jewelry" "automotive" "health-beauty" "computers" )
for category in "${common_categories[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url/$category.html") if [ "$status" = "200" ]; then echo "[+] Categoría encontrada: $category" fi done
# Intentar acceso a API REST echo "[+] Verificando API REST de Magento" api_endpoints=( "rest/V1/products" "rest/V1/categories" "rest/V1/customers" "api/rest/products" "api/rest/categories" )
for endpoint in "${api_endpoints[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url/$endpoint") if [ "$status" = "200" ] || [ "$status" = "401" ]; then echo "[!] API endpoint accesible: $endpoint (HTTP $status)" fi done}
enumerate_magento_catalog "http://ejemplo.com"Integración con Otras Herramientas
Section titled “Integración con Otras Herramientas”Con Nmap
Section titled “Con Nmap”# Escaneo de puertos seguido de MageScannmap -sV -p 80,443 ejemplo.commagescan scan:all http://ejemplo.comCon Nikto
Section titled “Con Nikto”# Análisis complementario con Niktonikto -h http://ejemplo.commagescan scan:all http://ejemplo.com --show-modulesCon Burp Suite
Section titled “Con Burp Suite”# Configurar proxy para capturar tráficoexport http_proxy=http://127.0.0.1:8080export https_proxy=http://127.0.0.1:8080magescan scan:all http://ejemplo.comCon SQLMap
Section titled “Con SQLMap”# Si se encuentran parámetros vulnerables# Ejemplo: página de producto con parámetro idsqlmap -u "http://ejemplo.com/catalog/product/view/id/1" --dbsCasos de Uso Específicos
Section titled “Casos de Uso Específicos”Auditoría de E-commerce
Section titled “Auditoría de E-commerce”#!/bin/bash
ecommerce_security_audit() { local url=$1 local output_dir="ecommerce_audit_$(date +%Y%m%d_%H%M%S)"
mkdir -p $output_dir
echo "[+] Iniciando auditoría de seguridad para e-commerce: $url"
# 1. Identificación de plataforma echo "[+] Identificando plataforma de e-commerce" magescan scan:version $url > $output_dir/platform_detection.txt
# 2. Análisis de seguridad específico echo "[+] Análisis de seguridad específico de Magento" magescan scan:all $url --show-modules --format=json > $output_dir/magento_security.json
# 3. Verificación de datos sensibles echo "[+] Verificando exposición de datos sensibles" check_sensitive_data_exposure $url > $output_dir/sensitive_data.txt
# 4. Análisis de formularios de pago echo "[+] Analizando formularios de pago" analyze_payment_forms $url > $output_dir/payment_analysis.txt
# 5. Verificación SSL/TLS echo "[+] Verificando configuración SSL/TLS" sslscan $url > $output_dir/ssl_analysis.txt
echo "[+] Auditoría de e-commerce completada: $output_dir"}
check_sensitive_data_exposure() { local url=$1
echo "=== VERIFICACIÓN DE EXPOSICIÓN DE DATOS SENSIBLES ==="
# Verificar logs accesibles log_files=( "var/log/system.log" "var/log/exception.log" "var/log/payment.log" "var/report/" )
for log in "${log_files[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url/$log") if [ "$status" = "200" ]; then echo "[!] CRÍTICO: Log accesible - $log" fi done
# Verificar archivos de configuración con credenciales config_files=( "app/etc/local.xml" "app/etc/config.xml" )
for config in "${config_files[@]}"; do content=$(curl -s "$url/$config") if [[ $content == *"<password>"* ]] || [[ $content == *"<username>"* ]]; then echo "[!] CRÍTICO: Credenciales expuestas en $config" fi done}
analyze_payment_forms() { local url=$1
echo "=== ANÁLISIS DE FORMULARIOS DE PAGO ==="
# Buscar páginas de checkout checkout_pages=( "checkout" "onepage" "payment" "billing" )
for page in "${checkout_pages[@]}"; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url/$page") if [ "$status" = "200" ]; then echo "[+] Página de pago encontrada: $page"
# Verificar si usa HTTPS https_status=$(curl -s -o /dev/null -w "%{http_code}" "https://$(echo $url | sed 's/http:\/\///')/$page") if [ "$https_status" = "200" ]; then echo "[+] HTTPS disponible para $page" else echo "[!] RIESGO: HTTPS no disponible para $page" fi fi done}Evasión y Técnicas Anti-Detección
Section titled “Evasión y Técnicas Anti-Detección”Configuración de User-Agent
Section titled “Configuración de User-Agent”# MageScan con User-Agent personalizadomagescan scan:all http://ejemplo.com --user-agent="Mozilla/5.0 (compatible; Googlebot/2.1)"
# Rotar User-Agentsuser_agents=( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
for ua in "${user_agents[@]}"; do echo "[+] Usando User-Agent: $ua" magescan scan:version http://ejemplo.com --user-agent="$ua" sleep 30doneUso con Proxies
Section titled “Uso con Proxies”# Configurar proxy para MageScan (requiere configuración adicional)export http_proxy=http://proxy.ejemplo.com:8080export https_proxy=http://proxy.ejemplo.com:8080magescan scan:all http://objetivo.comEscaneo Distribuido
Section titled “Escaneo Distribuido”#!/bin/bash
distributed_magento_scan() { local url=$1 local proxy_list=$2
echo "[+] Iniciando escaneo distribuido de Magento"
# Dividir escaneos por proxy commands=( "scan:version" "scan:modules" "scan:patch" "scan:catalog" "scan:techheader" )
proxy_index=0 for command in "${commands[@]}"; do proxy=$(sed -n "${proxy_index}p" $proxy_list) if [ ! -z "$proxy" ]; then echo "[+] Ejecutando $command con proxy $proxy" export http_proxy=http://$proxy export https_proxy=http://$proxy magescan $command $url --format=json > "${command}_result.json" unset http_proxy https_proxy sleep 60 fi proxy_index=$((proxy_index + 1)) done}
# Uso:# echo "proxy1.com:8080" > proxies.txt# echo "proxy2.com:8080" >> proxies.txt# distributed_magento_scan "http://ejemplo.com" "proxies.txt"Limitaciones y Consideraciones
Section titled “Limitaciones y Consideraciones”Limitaciones de MageScan
Section titled “Limitaciones de MageScan”- Detección de versión: Puede fallar en instalaciones muy personalizadas
- Módulos custom: No detecta todos los módulos de terceros
- Falsos positivos: Puede reportar módulos inexistentes
- Actualizaciones: Base de datos de parches puede estar desactualizada
Mejores Prácticas
Section titled “Mejores Prácticas”- Combinar herramientas: Usar junto con Nmap, Nikto, etc.
- Verificación manual: Confirmar hallazgos importantes
- Actualizar regularmente: Mantener MageScan actualizado
- Documentar todo: Registrar todos los hallazgos
Consideraciones Legales
Section titled “Consideraciones Legales”- Autorización: Solo usar en tiendas propias o con autorización escrita
- PCI DSS: Considerar requisitos de seguridad para datos de tarjetas
- GDPR/CCPA: Cumplir con regulaciones de protección de datos
- Responsible disclosure: Reportar vulnerabilidades de forma responsable
Recursos Adicionales
Section titled “Recursos Adicionales”Herramientas Complementarias
Section titled “Herramientas Complementarias”- Magereport: Análisis online de seguridad para Magento
- MageReport: Scanner web gratuito
- n98-magerun: Herramienta CLI para Magento
- Magento Security Scan Tool: Herramienta oficial de Magento
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 MageScan debe realizarse exclusivamente en:
- Tiendas online propias
- 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 y violar regulaciones como PCI DSS. Los autores no se hacen responsables del mal uso de esta información.