← Volver al listado de tecnologías

Capítulo 1: Instalación y Configuración de OWASP ZAP

Por: Artiko
owasp-zapinstalaciónconfiguraciónseguridadpentesting

Capítulo 1: Instalación y Configuración de OWASP ZAP

En este capítulo aprenderás a instalar OWASP ZAP en diferentes sistemas operativos y a configurar el entorno inicial para comenzar con las auditorías de seguridad.

🎯 Objetivos del Capítulo

Al finalizar este capítulo serás capaz de:

📋 Requisitos del Sistema

Requisitos Mínimos

Sistemas Operativos Soportados

📦 Instalación por Sistema Operativo

Windows

Método 1: Instalador Ejecutable

# 1. Descargar el instalador
# Visita: https://github.com/zaproxy/zaproxy/releases/
# Descarga: ZAP_2.14.0_windows.exe

# 2. Ejecutar como administrador
# Doble click en el archivo .exe

# 3. Seguir el asistente de instalación
# - Aceptar licencia
# - Elegir directorio (default: C:\Program Files\OWASP\Zed Attack Proxy)
# - Crear accesos directos

Método 2: Chocolatey

# Instalar Chocolatey si no lo tienes
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# Instalar ZAP
choco install zap -y

# Verificar instalación
zap.bat -version

Método 3: Portable (Sin instalación)

# Descargar versión portable
Invoke-WebRequest -Uri "https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2.14.0_windows.zip" -OutFile "zap.zip"

# Extraer
Expand-Archive -Path "zap.zip" -DestinationPath "C:\Tools\"

# Ejecutar
cd C:\Tools\ZAP_2.14.0
.\zap.bat

macOS

Método 1: Homebrew

# Instalar Homebrew si no lo tienes
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Instalar ZAP
brew install --cask owasp-zap

# Verificar instalación
/Applications/OWASP\ ZAP.app/Contents/Java/zap.sh -version

Método 2: DMG Installer

# Descargar DMG
curl -L -o ZAP_2.14.0.dmg https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2.14.0.dmg

# Montar imagen
hdiutil attach ZAP_2.14.0.dmg

# Copiar a Applications
cp -R /Volumes/ZAP\ 2.14.0/OWASP\ ZAP.app /Applications/

# Desmontar
hdiutil detach /Volumes/ZAP\ 2.14.0/

Método 3: Manual

# Descargar y extraer
wget https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2_14_0_unix.sh
chmod +x ZAP_2_14_0_unix.sh
./ZAP_2_14_0_unix.sh

# Crear alias
echo 'alias zap="/Applications/OWASP\ ZAP.app/Contents/Java/zap.sh"' >> ~/.zshrc
source ~/.zshrc

Linux

Método 1: Snap (Ubuntu/Debian)

# Instalar snap si no está disponible
sudo apt update
sudo apt install snapd

# Instalar ZAP
sudo snap install zaproxy --classic

# Ejecutar
zaproxy

Método 2: APT Repository (Debian/Ubuntu)

# Agregar repositorio
echo 'deb http://download.opensuse.org/repositories/home:/cabelo/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/home:cabelo.list

# Agregar clave GPG
curl -fsSL https://download.opensuse.org/repositories/home:cabelo/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_cabelo.gpg > /dev/null

# Actualizar e instalar
sudo apt update
sudo apt install zaproxy

Método 3: Instalación Manual

# Descargar
wget https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2_14_0_unix.sh

# Dar permisos y ejecutar
chmod +x ZAP_2_14_0_unix.sh
sudo ./ZAP_2_14_0_unix.sh

# Crear enlace simbólico
sudo ln -s /opt/zaproxy/zap.sh /usr/local/bin/zap

# Ejecutar
zap

Método 4: Docker

# Pull de la imagen
docker pull zaproxy/zap-stable

# Ejecutar con GUI (requiere X11)
docker run -u zap -p 8080:8080 -p 8090:8090 -i zaproxy/zap-stable zap-webswing.sh

# Ejecutar en modo headless
docker run -u zap -p 8080:8080 -i zaproxy/zap-stable zap.sh -daemon -host 0.0.0.0 -port 8080 -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true

🖥️ Primera Ejecución

Iniciar ZAP

# Windows
zap.bat

# macOS/Linux
zap.sh

# O desde el menú de aplicaciones

Selección de Sesión

Al iniciar ZAP por primera vez, verás un diálogo de sesión:

  1. No, no quiero persistir esta sesión - Para pruebas rápidas
  2. Sí, quiero persistir esta sesión - Para guardar el trabajo
  3. Sí, y quiero generar una nueva sesión - Recomendado para empezar

🎨 Interfaz de Usuario

Componentes Principales

┌─────────────────────────────────────────────────────────┐
│  Menú Principal                                          │
├─────────────────────────────────────────────────────────┤
│  Barra de Herramientas                                   │
├──────────────┬────────────────────┬────────────────────┤
│              │                    │                    │
│   Árbol de   │    Workspace       │   Información     │
│   Sitios     │    Principal       │   de Peticiones   │
│              │                    │                    │
│              │                    ├────────────────────┤
│              │                    │                    │
│              │                    │   Response/Info   │
│              │                    │                    │
└──────────────┴────────────────────┴────────────────────┘
                    Pestañas de Herramientas

Paneles Principales

  1. Sites Tree (Árbol de Sitios)

    • Muestra la estructura de los sitios escaneados
    • Organizado jerárquicamente por dominio/path
  2. Workspace Window

    • Área principal de trabajo
    • Muestra Request/Response
    • Editor de peticiones
  3. Information Window

    • History: Historial de peticiones
    • Search: Búsqueda en el tráfico
    • Alerts: Vulnerabilidades encontradas
  4. Footer Tabs

    • Spider, Fuzzer, Break points
    • Encode/Decode, Scripts

⚙️ Configuración Inicial

1. Configuración del Proxy Local

# Tools → Options → Local Proxies

# Configuración por defecto
Address: localhost
Port: 8080

# Para acceso desde red local
Address: 0.0.0.0  # O tu IP local
Port: 8080

# Habilitar
☑ Behind NAT (si aplica)
☑ Remove unsupported encodings

2. Configuración de Certificados SSL

Generar Certificado Root CA

# Tools → Options → Dynamic SSL Certificates

# 1. Generar nuevo certificado
[Generate] → Guardar como owasp_zap_root_ca.cer

# 2. Configurar validez
Validity: 365 días (o más)

# 3. Guardar certificado para distribución
[Save] → zap_certificate.cer

Instalar Certificado en el Sistema

Windows:

# Método 1: GUI
certmgr.msc
→ Trusted Root Certification Authorities
→ Import → zap_certificate.cer

# Método 2: PowerShell
Import-Certificate -FilePath "zap_certificate.cer" -CertStoreLocation Cert:\LocalMachine\Root

macOS:

# Agregar al Keychain
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain zap_certificate.cer

# O usar Keychain Access GUI
open /Applications/Utilities/Keychain\ Access.app
# Arrastrar certificado → System → Always Trust

Linux:

# Ubuntu/Debian
sudo cp zap_certificate.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# Fedora/RHEL
sudo cp zap_certificate.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

3. Configuración de API

// Tools → Options → API

// Habilitar API
☑ Enabled

// Configurar API Key
API Key: [Generar clave aleatoria]

// Configurar direcciones permitidas
Addresses permitted: 
  - 127.0.0.1
  - 127.0.0.1
  - localhost

// Deshabilitar para producción
☐ Disable the API key
☐ Report permission errors via API

4. Configuración de Memoria

# Editar zap.sh o zap.bat

# Linux/macOS (zap.sh)
JAVA_OPTS="-Xmx2048m"  # 2GB RAM máximo

# Windows (zap.bat)
set JAVA_OPTS=-Xmx2048m

# O en archivo de configuración
echo "-Xmx2048m" >> ~/.ZAP/jvm.options

🔧 Configuraciones Avanzadas

Modos de Operación

# Standard Mode (GUI)
- Interfaz gráfica completa
- Ideal para aprendizaje
- Todas las herramientas disponibles

# Daemon Mode (Headless)
zap.sh -daemon -port 8080 -host 0.0.0.0

# API Mode
zap.sh -daemon -port 8080 -config api.key=changeme

# Inline Mode (Transparent Proxy)
zap.sh -cmd -inline -port 8090

Configuración de Red

# Tools → Options → Connection

# Proxy Chain (si usas otro proxy)
☑ Use proxy chain
Host: proxy.empresa.com
Port: 8080
Username: usuario
Password: ****

# Timeouts
Timeout (seconds): 20
Single read timeout: 5

# DNS
☑ Use global HTTP state
☑ Allow unsafe SSL renegotiation

Configuración de Autenticación

// Para sitios con autenticación

// 1. Context → New Context
Name: "Mi Aplicación"

// 2. Include in Context
https://miapp.com/*

// 3. Authentication
Method: Form-based Authentication
Login URL: https://miapp.com/login
Username Parameter: username
Password Parameter: password

// 4. Users
Add User → Configurar credenciales

🧪 Verificación de Instalación

Test de Proxy Local

# Test con curl
curl -x http://localhost:8080 http://example.com

# Deberías ver la petición en ZAP History

# Test HTTPS con certificado
curl --proxy http://localhost:8080 --cacert zap_certificate.crt https://example.com

Test de API

# Python
import requests
from zapv2 import ZAPv2

# Conectar a ZAP
zap = ZAPv2(apikey='tu-api-key', 
            proxies={'http': 'http://127.0.0.1:8080',
                    'https': 'http://127.0.0.1:8080'})

# Verificar versión
print(f"Versión ZAP: {zap.core.version()}")
print(f"Número de alertas: {len(zap.core.alerts())}")

Test de Spider

// JavaScript/Node.js
const ZAP = require('zaproxy');

const zapOptions = {
    apiKey: 'tu-api-key',
    proxy: 'http://localhost:8080'
};

const zap = new ZAP(zapOptions);

// Test spider en sitio de prueba
zap.spider.scan('http://testphp.vulnweb.com', (err, result) => {
    if (err) {
        console.error('Error:', err);
    } else {
        console.log('Spider iniciado:', result);
    }
});

🛠️ Herramientas Adicionales

Add-ons Esenciales

# Marketplace → Instalar

# Esenciales para móvil
- Advanced Report Generation
- FuzzDB files
- Python Scripting
- Community Scripts
- Retire.js

# Para APIs
- OpenAPI Support
- GraphQL Support
- SOAP Support

# Utilidades
- Export Report
- Wappalyzer
- Token Generation and Analysis

Scripts de Inicio

#!/bin/bash
# start-zap.sh

# Configurar variables
export ZAP_HOME="/opt/zaproxy"
export ZAP_API_KEY="tu-api-key-segura"

# Iniciar ZAP con configuración personalizada
$ZAP_HOME/zap.sh \
    -daemon \
    -port 8080 \
    -host 0.0.0.0 \
    -config api.key=$ZAP_API_KEY \
    -config api.addrs.addr.name=.* \
    -config api.addrs.addr.regex=true \
    -config connection.timeoutInSecs=60 \
    -config scanner.maxScanDurationInMins=60

📋 Checklist de Configuración

🚨 Solución de Problemas Comunes

Error: “Could not find or load main class”

# Verificar Java
java -version  # Debe ser 11+

# Instalar Java 11
# Ubuntu/Debian
sudo apt install openjdk-11-jdk

# macOS
brew install openjdk@11

Error: “Address already in use”

# Verificar puerto 8080
netstat -an | grep 8080

# Cambiar puerto en ZAP
Tools Options Local Proxies Port: 8090

Error: “SSL/TLS Certificate issues”

# Regenerar certificado
Tools Options Dynamic SSL Certificates Generate

# Limpiar caché del navegador
# Chrome: chrome://settings/privacy → Clear browsing data

Error: “Out of Memory”

# Aumentar memoria
echo "-Xmx4096m" > ~/.ZAP/jvm.options

# O editar directamente el script de inicio
JAVA_OPTS="-Xmx4096m -XX:MaxPermSize=256m"

🎯 Ejercicios Prácticos

Ejercicio 1: Instalación y Configuración Básica

  1. Instala ZAP en tu sistema
  2. Genera un certificado Root CA
  3. Instala el certificado en tu sistema
  4. Configura el proxy en el puerto 8080
  5. Realiza un test con curl

Ejercicio 2: Configuración de API

  1. Habilita la API de ZAP
  2. Genera una API key segura
  3. Escribe un script Python que se conecte a ZAP
  4. Lista las alertas actuales vía API

Ejercicio 3: Configuración de Contexto

  1. Crea un nuevo contexto llamado “TestApp”
  2. Incluye el sitio http://testphp.vulnweb.com/*
  3. Configura un usuario de prueba
  4. Ejecuta un spider en el contexto

📚 Resumen

En este capítulo aprendiste:

🚀 Próximo Capítulo

En el siguiente capítulo aprenderás a configurar ZAP como proxy para dispositivos móviles, incluyendo:


← Volver al Índice | Siguiente: Proxy para Móviles →