DAST especializado en detección de vulnerabilidades en formularios web (12 categorías)
Project description
Gung12
DAST (Dynamic Application Security Testing) especializado en la detección de vulnerabilidades en formularios web. Cubre 12 categorías alineadas con el OWASP Top 10 con un enfoque dirigido y pensado para integración en flujos de CI/CD.
Características
- 12 categorías de vulnerabilidad: XSS, SQLi, SSTI, XPath, CMDi, NoSQL, XXE, CSRF, File Upload, Open Redirect, HTML Injection, Logic
- SQLi ciega booleana y basada en tiempo por análisis diferencial confirmado (modo exhaustivo
-F) y XSS almacenado (--stored-xss) - Confirmación semántica de Command Injection por marcador único y, en modo exhaustivo (
-F), ciega basada en tiempo con petición de control (descarta falsos positivos en páginas con baseline lento); NoSQL por operadores de bypass (diferencial) - Rastreo automático de formularios en el sitio (
--crawl) con control de profundidad,robots.txty deduplicación - Escaneo concurrente: barrido de inyección en paralelo por formulario (
-j/--concurrency) y análisis de varios formularios a la vez en modo rastreo (--crawl-workers); las pasadas por tiempo/diferencial se mantienen secuenciales para no falsear las medidas - Wordlists externas estilo SecLists (
--payloads-dir) que amplían los payloads integrados - Modo GraphQL (
--graphql): introspección, fuga por sugerencias e inyección SQL en argumentos (error-based y diferencial) - Modo WebSocket (
--websocket): batería de inyección en mensajes (XSS, SQLi, SSTI, XPath, CMDi, NoSQL, XXE, HTML) con cliente WS propio (RFC 6455) - Modo gRPC (
--grpc): detección de server reflection habilitada - Dashboard web opcional (
--serve): interfaz local para lanzar escaneos y ver el informe - Soporte para SPAs (Angular/React/Vue): detección automática y render con Playwright (dependencia opcional,
pip install "gung12[spa]"), más descubrimiento automático de endpoints REST - Análisis con IA (Gemini, Groq) como segunda opinión sobre los hallazgos
- Autenticación previa automática (
--login-url) - Evasión de WAFs basados en firmas (
--waf-bypass) - Refresco dinámico del token anti-CSRF (
--refresh-csrf) para frameworks que lo rotan (Django, Laravel, ASP.NET) - Filtro automático de falsos positivos por reflexión total (respeta la evidencia semántica: no degrada SSTI evaluado, errores SQL, etc.)
- Las pasadas de evidencia fuerte (ciega, tiempo, diferencial, marcador CMDi) confirman y reemplazan detecciones débiles en el mismo campo
- Bajo índice de falsos positivos: la SQLi/XPath booleana exige confirmación diferencial con control (no basta un cambio de tamaño) y el Open Redirect se confirma verificando que la cabecera
Locationapunte al host externo inyectado (validado contra la app segura Flaskr: solo reporta el fallo real) - Robustez de red: reintentos ante fallos transitorios de conexión y límite de tamaño de respuesta y de frame WebSocket
- Informes HTML y JSON con coloreado por severidad (informe combinado en modo rastreo)
Instalación
Desde código fuente
git clone https://github.com/DenReanin/gung12
cd gung12
pip install -r requirements.txt # instalación base (ligera)
python -m gung12 --help
La instalación base son solo 4 dependencias pequeñas. Los modos opcionales se instalan a la carta:
pip install "gung12[spa]" # render de SPAs (Playwright)
pip install "gung12[dashboard]" # dashboard web (Flask)
pip install "gung12[grpc]" # modo gRPC (grpcio-reflection)
Nota (SPA): Gung12 detecta automáticamente si una página es una SPA y, si el modo SPA está instalado, la renderiza con el Chromium de Playwright (lo descarga solo la primera vez, ~280 MB, en la caché del usuario). Puedes forzar el render con
--spao desactivarlo con--no-spa. Si la descarga automática falla (sin conexión o tras un proxy), ejecutaplaywright install chromium.
Ejecutable
Descargar desde Releases el binario para tu plataforma (Windows, Linux o macOS) y ejecutarlo directamente. No requiere Python instalado.
El binario incluye Playwright. La primera vez que se utilice --spa, Playwright descargará Chromium en la caché del usuario (~280 MB).
Uso básico
# Escaneo rápido con XSS y SQLi
gung12 -u "http://target/form" -T xss,sqli
# Escaneo completo con login previo
gung12 -u "http://target/admin/profile" \
--login-url "http://target/login" \
--login-user "admin" --login-pass "secret" \
-T all -F -o report.html
# Modo SPA contra OWASP Juice Shop (Angular)
gung12 -u "http://localhost:3000/#/login" --spa -T sqli,nosql
# Rastreo automático: descubre y analiza todos los formularios del sitio
gung12 -u "http://target/" --crawl --crawl-depth 2 --max-forms 20 -T all -o crawl.html
# Escaneo concurrente: 8 peticiones de inyección en paralelo por formulario
gung12 -u "http://target/form" -T all -j 8
# Rastreo con 4 formularios analizados a la vez
gung12 -u "http://target/" --crawl --crawl-workers 4 -T all -o crawl.html
# Refresco de token CSRF en cada payload (Django, Laravel, ASP.NET MVC)
gung12 -u "http://target/profile" --refresh-csrf -T xss,sqli
# SQLi ciega booleana (análisis diferencial, requiere modo exhaustivo -F)
gung12 -u "http://target/status?id=1" -T sqli -F
# XSS almacenado: inyecta un canario y comprueba si persiste en otra página
gung12 -u "http://target/comment" --stored-xss --stored-url "http://target/wall" -T xss
# Wordlists externas (SecLists): archivos <tipo>.txt (xss.txt, sqli.txt...)
gung12 -u "http://target/form" -T sqli,xss --payloads-dir ./SecLists/gung12
# Modo GraphQL: introspección, fuga por sugerencias e inyección en argumentos
gung12 -u "http://target/graphql" --graphql -o graphql.html
# Modo WebSocket: inyección de payloads en mensajes
gung12 -u "ws://target:8080/chat" --websocket
# Modo gRPC: server reflection habilitada (pip install "gung12[grpc]")
gung12 -u "target:50051" --grpc
# Dashboard web (requiere Flask: pip install "gung12[dashboard]")
gung12 --serve # abre http://127.0.0.1:8012
# CI/CD: salida silenciosa con exit code útil
gung12 -u "$TARGET" -T all --quiet -o report.json
# exit 0 = sin hallazgos relevantes, 1 = ALTA/MEDIA, 2 = error
Tests
La suite de pruebas levanta objetivos vulnerables locales (formularios, GraphQL, WebSocket y gRPC) y verifica todos los escáneres de extremo a extremo:
pip install "gung12[test]"
pytest
Modos de salida
| Modo | Flag | Uso recomendado |
|---|---|---|
| Por defecto | (ninguno) | Defensa, demos, ejecuciones manuales |
| Silencioso | -q / --quiet |
Pipelines CI/CD (solo hallazgos) |
| Verboso | -v / --verbose |
Debugging y pentesting (muestra payloads) |
Códigos de retorno (CI/CD)
| Código | Significado |
|---|---|
| 0 | Sin hallazgos o solo de severidad BAJA |
| 1 | Hallazgos de severidad ALTA o MEDIA |
| 2 | Error de ejecución (URL inaccesible, argumentos inválidos) |
Aviso legal
Esta herramienta está diseñada para uso autorizado únicamente sobre sistemas propios o con permiso explícito por escrito del propietario. El uso contra sistemas no autorizados constituye un delito tipificado en el artículo 197 bis del Código Penal español y en la normativa europea sobre ciberseguridad.
Licencia
MIT. Proyecto académico desarrollado como Trabajo Fin de Máster en el Máster Universitario en Ciberseguridad de la Universidad de Alicante.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gung12-1.13.0.tar.gz.
File metadata
- Download URL: gung12-1.13.0.tar.gz
- Upload date:
- Size: 70.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a9954709fa8934a80970493b2dd18d389b10c2e3a429df82d7a76f5b6f75d68
|
|
| MD5 |
ef720cd54892977aaab8b89ada0ef1fb
|
|
| BLAKE2b-256 |
f08bb8d302f4779a8ec96f23a23cc14c569e7c8653598b7d431ef6009835b372
|
File details
Details for the file gung12-1.13.0-py3-none-any.whl.
File metadata
- Download URL: gung12-1.13.0-py3-none-any.whl
- Upload date:
- Size: 69.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
878948d72e3e0f77a38baf2d34a6f77908b70317f5910f7229e82b38dcbe2f7e
|
|
| MD5 |
3fcd80232f068223ff5c49eae6af7ebe
|
|
| BLAKE2b-256 |
3c415c9f73445d30bfd99838de6fcfb2528520d3beb642e8bd819596570214ca
|