Desarrollo de aplicación en Python para análisis automático de vulnerabilidades en sitios web. Almacena el resultado en base de datos para su consulta posterior. Guarda los sitios web a analizar y analiza varios vectores de ataque: SQLi, XSS, LFI, SSRF, Open Redirect.

WAF Pentesting – Herramienta de auditoría y generación de informes

Esta aplicación es una herramienta de pentesting orientada a evaluar la eficacia de protecciones (WAF, CDN, reglas de aplicación) y detectar vulnerabilidades web comunes. Ofrece interfaz gráfica (Tkinter) y modo consola. Ejecuta una batería de pruebas automatizadas (SQLi, XSS, LFI, SSRF, Open Redirect, etc.), captura evidencias, correlaciona técnicas MITRE y genera informes ejecutivos y técnicos en HTML (con posibilidad de exportar a PDF).

Características principales

  • Interfaz GUI (Tk/Ttk) con control en tiempo real y logs de fases por prueba.
  • Modo consola para ejecuciones no interactivas o automatizadas.
  • Conjunto de pruebas: Inyección SQL, XSS, Path Traversal (LFI), Command Injection, Buffer Overflow (simulado), Open Redirect, SSRF, cabeceras de seguridad.
  • Persistencia opcional en base de datos (MySQL) con esquema gestionado desde database/gestor_base_datos.py.
  • Generación de informes: HTML (plantillas Jinja-like) y opción de exportar a PDF vía wkhtmltopdf o reportlab.
  • Conversión de recomendaciones ricas (HTML) a texto plano y botones para copiar/guardar detalles de vulnerabilidades.
  • WebView (pywebview) opcional para vista alta fidelidad del informe.

Interfaz y descripción de controles

Ventana principal

  • Selección de pruebas: Checkbox por vector (SQLi, XSS, etc.). Tooltips explicativos para cada vector.
  • Botón INICIAR PENTEST: Lanza la ejecución completa en un hilo de fondo, captura stdout de cada prueba y añade logs por fase en la vista en tiempo real. Persiste ejecución / resultados / vulnerabilidades / informe en BD (si está configurada).
  • Botones de control: Pausa/Stop (según configuración).

Panel de Resultados

  • Resultado (Vista): Renderizado HTML (tkhtmlview / tkinterweb si están instalados). Si no hay renderizador, ofrece abrir en navegador o instalar dependencias.
  • Resultado (HTML): Código fuente HTML del informe (editable / exportable).
  • Resultado (Texto): Versión plana y formateada del informe. Hemos implementado un formateador que limpia índices, condensa títulos (ej.: «📊 Resumen Ejecutivo para Equipo Directivo»), normaliza métricas y estructura recomendaciones para legibilidad.
  • Copiar detalle: Copia el detalle técnico de la vulnerabilidad al portapapeles.
  • Guardar detalle: Exporta el detalle técnico a .txt.
  • Abrir en WebView: Si pywebview está instalado, abre una ventana con renderizado más fiel (fallback: navegador).

Qué hace cada prueba (resumen técnico)

Los tests implementados se encuentran en pentesting/pruebas/. Para cada prueba se siguen típicamente las fases: Information Gathering → Ejecución/Explotación → Validación de Efecto → Recolección de Evidencia → Reporte.

  • inyeccion_sql.py (SQLi): Prueba de inyección en parámetros de consulta, busca errores, boolean-based y union-based (simulado). Fases: fingerprint de DB, payloads de prueba, verificación de exfiltración o error, captura de payload/evidencia.
  • cross_site_scripting.py (XSS): Inyección de scripts en entradas; evalúa persistente/reflectado; verifica ejecución en el DOM y recolección de evidencia.
  • path_traversal.py (LFI): Prueba de travesía de rutas, intentos de lectura de archivos sensibles y validación de contenido.
  • inyeccion_comandos.py: Evaluación de ejecución de comandos del sistema (sandboxed o con simulación), captura de salida y detección de posibles inyecciones.
  • buffer_overflow.py: Prueba demostrativa / simulada de condiciones de desborde para apps nativas (principalmente demostrativa en lugar de explotación real).
  • headers_checks.py: Verifica presencia de cabeceras de seguridad (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, etc.) y reporta hallazgos.
  • open_redirect.py: Detecta redirecciones abiertas y valida parámetros de destino.
  • ssrf.py: Pruebas sobre redirecciones/solicitudes servidor-side a URLs controladas y verificación de respuesta y filtrado.

Resultados y Vulnerabilidades

  • Resultado: Objeto que contiene nombre del test, payload, tiempo de respuesta, estado, y evidencia breve.
  • Vulnerabilidad: Registro con tipo (SQLi, XSS…), severidad (ALTA/MEDIA/BAJA), descripción, evidencia detallada, recomendaciones técnicas (HTML + texto plano) y posible mapeo MITRE ATT&CK.
  • Informes: Generador produce dos secciones principales — ejecutivo y técnico — luego combinadas en un reporte completo. Títulos condensados para legibilidad.

Configuración y personalización

  • Archivos de configuración:
  • Opciones en tiempo de ejecución: elegir pruebas, verificar SSL (config), encabezados por defecto, timeouts, y duraciones simuladas/reportes.
  • Integraciones externas: MySQL para persistencia, wkhtmltopdf o reportlab para exportar PDF, pywebview para WebView integrado.

Descarga del código fuente completo en Python

A continuación, mostramos enlace a la descarga del código fuente de la aplicación de Pentesting profesional en Python:

SQL de creación de las tablas necesarias en MySQL/MariaDB

El SQL de creación de las tablas necesarias en MySQL/MariaDB es:

Aplicación en funcionamiento (modo interactivo GUI gráfico)

Descargaremos el código completo de la aplicación desde:

Deberemos tener Python instalado en el equipo. Esta aplicación requiere una serie de paquetes Python, podremos instalarlos, o bien desde la carpeta donde se encuentra el fichero requeriments.txt, con el comando:

O bien, instalarlos todos con el comando:

La aplicación usa la herramienta externa wkhtmltopdf (requerido por pdfkit para exportar a PDF), que podremos instalar descargando el instalador desde:

En la carpeta del código, donde se encuentra el fichero main.py, ejecutaremos:

En primer lugar, realizaremos la configuración de la aplicación, desde la pestaña «Configuración Global», donde indicaremos los datos del servidor de base de datos MySQL/MariaDB al que nos conectaremos, así como los datos del auditor (nombre, empresa) y si queremos verificar los certificados TLS/SSL de los sitios web a analizar:

Desde «Sitios a analizar», pulsaremos en «Nuevo Sitio» para añadir una nueva URL a analizar:

Introduciremos los datos del sitio web a analizar:

Seleccionaremos el sitio web añadido, marcaremos los vectores de ataque a analizar:

  • Information Gathering.
  • SQL Injection.
  • Cross-Site Scripting (XSS).
  • Path Transversal.
  • Command Injection.
  • Buffer Overflow.
  • Cabeceras de Seguridead (HSTS/CSP).
  • Open Redirect.
  • SSRF.

Elegiremos las opciones de tiempos y delays y pulsaremos en «Ir a Ejecución» (o doble clic sobre el sitio web):

Pulsaremos en «INICIAR PENTEST»:

La aplicación iniciará el análisis de cada vector de ataque marcado para el sitio web, mostrando cada fase:

Una vez concluido, mostrará el siguiente mensaje:

Nos llevará a la pestaña de resultados, donde podremos ver el resumen, así como el reporte completo. Podremos guardarlo en HTML, PDF o texto plano:

Pulsando en «Guardar HTML», nos generará un fichero HTML con el el resultado completo del pentest:

Desde la pestaña «Detallado», podremos consultar todos los análisis realizados y el resultado (bloqueado o vulnerable). Si ha habido algún vector de ataque al que el sitio web pudiera ser vulnerable, lo mostrará con fondo rojo, haciendo doble clic sobre él nos mostrará la vulnerabilidad en detalle:

Desde la pestaña «Vulnerabilidades», podremos consultar el detalle completo de la vulnerabilidad detectada: tipo, severidad, descripción, payload utilizado, evidencia técnica y recomendaciones de mitigación:

En la pestaña «Histórico» podremos consultar todos los análisis realizados:

Con todos sus datos (haciendo doble clic sobre uno de ellos), nos llevará a la pestaña de «Resultado»:

Aplicación en funcionamiento (modo CLI línea de comandos)

Desde la línea de comandos, en la carpeta donde se encuentre el fichero main_cli.py del código fuente Python de la aplicación, ejecutaremos el siguiente comando para analizar el sitio «https://ajpdsoft.com» con todas las pruebas (vectores de ataque):

Podremos listar los sitios web dados de alta desde la línea de comandos, servirá para comprobar la conexión a la base de datos, con: