Auditoría · manual operativo
Guía de auditoría inicial de un servicio
Llega un cliente nuevo: escribe su dominio en la tarjeta de abajo y todos los comandos de esta guía se reescriben con él, listos para copiar y pegar en orden. Para cada paso — comando, justificación, análisis a tener en cuenta. Detalle completo en las lecciones 11.2 y 11.3.
Regla 0
Nada de esto se ejecuta sin encargo firmado (contrato + scope + contacto de emergencia). Solo lo que esté en el scope. Sin excepciones.
El cliente de este encargo
Pega el dominio en cualquier formato — https://www.solvitu.com/ruta,
www.solvitu.com, solvitu.com — y todos los comandos de la guía se
reescriben con él. Se quita esquema, ruta, puerto y mayúsculas; el www. se
mantiene en los comandos web y se elimina para whois/DNS/crt.sh. Se guarda en el navegador
para la próxima vez.
- URL de los comandos
https://tienda.empresacliente.cl- Dominio raíz (whois / DNS / crt.sh)
empresacliente.cl- IP en los comandos nmap
203.0.113.50(ejemplo — la real sale del scope)- Workspace
~/encargos/2026-11-cliente/
mkdir -p ~/encargos/2026-11-cliente/evidencia
cd ~/encargos/2026-11-cliente
Orden de ejecución
Pre-engagement
Define qué puedes tocar, a qué hora y hasta dónde. Sin esto, todo lo demás es ilegal o termina en reclamo.
Análisis- Scope exacto: dominios, IPs, apps, cuentas de prueba. Lo que no está, no existe.
- Ventanas horarias y rate limit máximo (peticiones/seg).
- Prohibiciones: DoS, ingeniería social, destructivos.
- Contacto de emergencia + manejo de datos (qué se extrae, cómo se guarda, cuándo se destruye).
Recon pasivo
Mapea la superficie sin enviarle un paquete al cliente: siempre legal, cero ruido en sus logs.
Comandowhois empresacliente.cl
dig +short tienda.empresacliente.cl
dig +short MX empresacliente.cl
dig +short NS empresacliente.cl
Análisis
- Dónde apuntan A/MX/NS (¿Google Workspace? ¿Microsoft 365? ¿CDN?).
- Certificados en
https://crt.sh/?q=empresacliente.cl: subdominiosstaging/test/panelolvidados — preguntar al cliente cuáles están vivos. - Dorks:
site:empresacliente.cl,filetype:pdf,inurl:admin,intitle:"index of". - Versiones antiguas en
web.archive.org: paneles viejos, correos.
La URL con curl
Primer contacto activo: dice servidor, stack y estado de seguridad en 30 segundos, sin dispara alertas.
Comandocurl -I https://tienda.empresacliente.cl
curl -s -D - -o /dev/null https://tienda.empresacliente.cl # si HEAD está bloqueado
curl -s https://tienda.empresacliente.cl/robots.txt
curl -s https://tienda.empresacliente.cl/sitemap.xml
curl -sL https://tienda.empresacliente.cl -o evidencia/home.html
for p in admin phpmyadmin .git/config wp-login.php xmlrpc.php readme.html .env; do echo "$p: $(curl -s -o /dev/null -w '%{http_code}' https://tienda.empresacliente.cl/$p)"; done
Análisis
| Miras | Decisión |
|---|---|
Server: con versión | Versión exacta → buscar CVE directo |
X-Powered-By: / X-AspNet-Version: | Stack expuesto = hallazgo (bajo) + pista de stack |
| CSP, HSTS, X-Frame-Options, X-Content-Type-Options | Cada una que falte = hallazgo de endurecimiento documentable |
Set-Cookie: sin HttpOnly/Secure/SameSite | Robo de sesión posible → hallazgo |
robots.txt Disallow | Casi siempre señala paneles reales → probarlos |
Sonda: 200 en .git/config o .env | Crítico inmediato (credenciales). 403 = ruta existe, apuntar |
home.html: meta generator, rutas de recursos, comentarios | Confirma CMS/tema y versiones |
Mapeo de puertos (nmap)
El cliente recuerda solo el 443; cada puerto abierto extra es superficie que nadie está parcheando.
Comandonmap -sT -sV -sC -Pn 203.0.113.50 -oN evidencia/nmap-rapido.txt # rápido
nmap -p- -sT -sV -Pn -T4 203.0.113.50 -oN evidencia/nmap-completo.txt # completo, segundo turno
Análisis
| Puerto | Sospecha |
|---|---|
| 21 | ¿FTP anónimo? ¿Sin TLS? |
| 23 | Telnet: hallazgo, deshabilitar |
| 445 | SMB a internet: grave |
| 1433 / 3306 / 5432 | BD alcanzable desde internet: casi siempre error de config |
| 6379 | Redis sin contraseña: crítico |
| 3389 | RDP expuesto: fuerza bruta + CVEs |
| 8080 / 8443 | Paneles de gestión, apps de prueba |
| 9200 / 27017 | Elasticsearch/Mongo sin auth: crítico |
Si el dominio está detrás de Cloudflare/CDN
El escaneo va contra la CDN, no contra el servidor real: superficie falsa. Pedir al cliente las IPs reales en el scope; escanear IPs adivinadas está prohibido.
Fingerprint tecnológico
El stack detectado decide qué rama del paso 5 ejecutar.
Comandowhatweb https://tienda.empresacliente.cl
wafw00f https://tienda.empresacliente.cl
curl -s https://tienda.empresacliente.cl/wp-json # confirmar WP
Análisis
| Marcador | Stack |
|---|---|
/wp-content/, /wp-json | WordPress → rama 5.A |
Microsoft-IIS/, ASP.NET, rutas /Account/Login | IIS + MVC → rama 5.B |
/sites/default/, CHANGELOG.txt | Drupal → rama 5.C |
/media/jui/, /administrator/ | Joomla → rama 5.C |
| Bundles JS con source maps | Node/Next: rutas internas expuestas |
wafw00fdetecta WAF: si hay, pedir allowlist de tu IP declarada (lección 11.3) o tus resultados salen sucios.- Cada versión exacta confirmada → buscar "PRODUCTO VERSIÓN CVE".
Rama según tecnología
5.A — WordPress
JustificaciónEl fallo casi nunca es el núcleo: es un plugin/tema desactualizado con CVE público.
Comandowpscan --url https://tienda.empresacliente.cl --enumerate ap,at,u -o evidencia/wpscan.txt
wpscan --url https://tienda.empresacliente.cl --api-token 0123456789abcdef0123456789abcdef --enumerate ap,at,u -o evidencia/wpscan.txt # con BD de CVEs (token gratis en wpscan.com)
curl -s https://tienda.empresacliente.cl/wp-json/wp/v2/users
curl -s -X POST -d "<methodCall><methodName>system.listMethods</methodName></methodCall>" https://tienda.empresacliente.cl/xmlrpc.php
curl -s https://tienda.empresacliente.cl/wp-content/themes/NOMBRETEMA/style.css
curl -s https://tienda.empresacliente.cl/readme.html
curl -s https://tienda.empresacliente.cl/wp-content/uploads/
Análisis
- Plugin/tema con versión exacta → CVE →
msfconsole→search PLUGIN. wp-jsonque lista usuarios = usuarios válidos para fuerza bruta dirigida.xmlrpc.phpactivo = amplificación de contraseñas.- Encabezado
Version:del style.css = versión del tema sin depender de wpscan. uploads/navegable = exposición de documentos (hallazgo).
5.B — IIS + ASP.NET (MVC)
JustificaciónIIS deja artefactos de diagnóstico que, si nadie los apagó, filtran información interna.
Comandocurl -s https://tienda.empresacliente.cl/elmah.axd
curl -s https://tienda.empresacliente.cl/trace.axd
curl -s https://tienda.empresacliente.cl/uploads/
curl -s https://tienda.empresacliente.cl/ruta-inexistente-xyz # ver qué filtra la página de error
Análisis
elmah.axdque responde = trazas y datos de sesión filtrados (hallazgo alto).- Errores con stack trace o ruta física = custom errors sin configurar.
- Directorios navegables = exposición de archivos.
- Versión IIS + Windows Server → CVEs correspondientes.
5.C — Drupal / Joomla
Comandodroopescan scan drupal -u https://tienda.empresacliente.cl
joomscan -u https://tienda.empresacliente.cl
Análisis
- Drupal:
CHANGELOG.txtaccesible da la versión exacta. - Joomla: versión visible al pie de
/administrator/; mismo flujo versión → CVE.
5.D — Paneles (cualquier stack)
Comandofor p in admin administrator manager/html phpmyadmin; do echo "$p: $(curl -s -o /dev/null -w '%{http_code}' https://tienda.empresacliente.cl/$p)"; done
Análisis
- Panel expuesto no es crítico por sí solo, pero reordena prioridades: fuerza bruta y CVEs del panel pasan a primera línea.
Rutas ocultas (ffuf)
Descubre lo que no aparece en ningún menú: backups, repos, APIs, paneles.
Comandoffuf -u https://tienda.empresacliente.cl/FUZZ -w /usr/share/wordlists/dirb/common.txt -rate 60 -o evidencia/ffuf.json
ffuf -u https://tienda.empresacliente.cl/FUZZ -w /usr/share/wordlists/dirb/common.txt -rate 60 -x php,html,txt,bak,zip,sql,old
gobuster dir -u https://tienda.empresacliente.cl -w /usr/share/wordlists/dirb/common.txt -o evidencia/gobuster.txt
Análisis
rate 60= intensidad pautada; más alto dispara alarmas del SOC y puede tumbar backend débil.- Ignorar 404 masivos; investigar a mano los 200 y 403.
- Interés:
.bak/.old/.zip(backups),/.git/,/api/, logs, paneles.
TLS y servicios del borde
Hallazgos de severidad media con remedio conocido: el pan de cada día del informe.
Comandotestssl.sh https://tienda.empresacliente.cl
sslscan tienda.empresacliente.cl:443
nmap --script ftp-anon -p21 203.0.113.50
nmap --script smb-enum-shares -p445 203.0.113.50
nmap --script rdp-ntlm-info -p3389 203.0.113.50
nmap --script mysql-info -p3306 203.0.113.50
redis-cli -h 203.0.113.50 ping
Análisis
- TLS: certificado por vencer o mal nombrado, TLS 1.0/1.1, cifrados débiles, sin HSTS.
- FTP anónimo que lista archivos, SMB legible sin credenciales, Redis con PONG sin contraseña: hallazgos según tabla del paso 3.
- Límite duro: esta pasada documenta exposición, no prueba credenciales débiles (eso solo si el contrato lo pacta, con rate bajo y cuentas marcadas).
Hallazgos y siguiente fase
La primera pasada sin registro no existe legalmente ni sirve de informe.
Formato# bitácora (en paralelo, nunca después)
2026-11-05 14:32 curl -I https://tienda.empresacliente.cl (sin CSP)
2026-11-05 14:51 nmap -sT -sV -sC -Pn 203.0.113.50 (21,80,443,3306)
2026-11-05 15:03 Hallazgo H-02: usuarios WP expuestos vía wp-json
Análisis
- Plantilla por hallazgo: título claro · CVSS v3.1 con vector · reproducción numerada · evidencia enmascarada · impacto de negocio · remedio · referencia CWE/OWASP.
- Prioridad por negocio: login/cuentas → datos personales → pagos → admin → resto.
- Cadenas valen más que hallazgos aislados (usuarios expuestos + panel abierto).
- Después: explotación controlada de priorizados (evidencia mínima, payloads marcados), informe 11.4, retest y acta de destrucción.
Checklist: la primera hora
- Contrato + scope + contacto confirmados (paso 0).
- Workspace y bitácora abiertos.
- whois + dig (A/MX/NS).
- crt.sh: subdominios anotados.
- Dorks y Wayback revisados.
-
curl -I: cabeceras de seguridad faltantes anotadas. - robots.txt + sitemap + sonda de rutas.
- nmap rápido guardado en evidencia.
- ¿CDN/WAF? IPs reales pedidas al cliente.
- whatweb + wafw00f; stack confirmado.
- Rama aplicada: wpscan / checks IIS / droopescan / joomscan.
- ffuf rate 60 con common.txt, filtrado.
- testssl + servicios del borde comprobados.
- Hallazgos H-01…H-0X con CVSS y remedio en bitácora.
Cheat-sheet
| Paso | Comando | Para qué |
|---|---|---|
| 1 | whois empresacliente.cl | Dueño del dominio |
| 1 | dig +short tienda.empresacliente.cl | IPs que resuelven |
| 1 | https://crt.sh/?q=empresacliente.cl | Subdominios |
| 2 | curl -I https://tienda.empresacliente.cl | Cabeceras y seguridad |
| 2 | curl -s .../robots.txt | Rutas autorreveladas |
| 3 | nmap -sT -sV -sC -Pn 203.0.113.50 | Puertos, servicios, versiones |
| 3 | nmap -p- -sT -sV -Pn -T4 203.0.113.50 | Todos los puertos |
| 4 | whatweb https://tienda.empresacliente.cl | Fingerprint |
| 4 | wafw00f https://tienda.empresacliente.cl | ¿Hay WAF? |
| 5.A | wpscan --url https://tienda.empresacliente.cl --enumerate ap,at,u | Superficie WP |
| 5.B | curl -s .../elmah.axd | Log de errores IIS |
| 5.C | droopescan scan drupal -u https://tienda.empresacliente.cl | Drupal |
| 6 | ffuf -u .../FUZZ -w /usr/share/wordlists/dirb/common.txt -rate 60 | Rutas ocultas |
| 7 | testssl.sh https://tienda.empresacliente.cl | Calidad TLS |
| 7 | nmap --script ftp-anon -p21 203.0.113.50 | FTP anónimo |
| 8 | bitácora + plantilla de hallazgo | Evidencia y severidad |