Metadata-Version: 2.4
Name: gung12
Version: 1.13.0
Summary: DAST especializado en detección de vulnerabilidades en formularios web (12 categorías)
Author: Den Reanin Gerasimov
License: MIT
Project-URL: Homepage, https://github.com/DenReanin/gung12
Project-URL: Repository, https://github.com/DenReanin/gung12
Project-URL: Issues, https://github.com/DenReanin/gung12/issues
Keywords: security,dast,owasp,vulnerability-scanner,web-security,formularios
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Security
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.31.0
Requires-Dist: beautifulsoup4>=4.12.0
Requires-Dist: click>=8.1.0
Requires-Dist: colorama>=0.4.6
Provides-Extra: spa
Requires-Dist: playwright>=1.40.0; extra == "spa"
Provides-Extra: dashboard
Requires-Dist: flask>=2.0; extra == "dashboard"
Provides-Extra: grpc
Requires-Dist: grpcio>=1.40; extra == "grpc"
Requires-Dist: grpcio-reflection>=1.40; extra == "grpc"
Provides-Extra: test
Requires-Dist: pytest>=7.0; extra == "test"
Requires-Dist: flask>=2.0; extra == "test"
Requires-Dist: grpcio>=1.40; extra == "test"
Requires-Dist: grpcio-reflection>=1.40; extra == "test"
Dynamic: license-file

# Gung12

[![Release](https://img.shields.io/github/v/release/DenReanin/gung12)](https://github.com/DenReanin/gung12/releases)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/)

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.txt` y 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 `Location` apunte 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

```bash
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:

```bash
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 `--spa` o desactivarlo con `--no-spa`. Si la descarga
> automática falla (sin conexión o tras un proxy), ejecuta `playwright install chromium`.

### Ejecutable

Descargar desde [Releases](https://github.com/DenReanin/gung12/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

```bash
# 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:

```bash
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.
