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.

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
0

Pre-engagement

Justificación

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).
1

Recon pasivo

Justificación

Mapea la superficie sin enviarle un paquete al cliente: siempre legal, cero ruido en sus logs.

Comando
whois 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: subdominios staging/test/panel olvidados — 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.
2

La URL con curl

Justificación

Primer contacto activo: dice servidor, stack y estado de seguridad en 30 segundos, sin dispara alertas.

Comando
curl -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
MirasDecisión
Server: con versiónVersió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-OptionsCada una que falte = hallazgo de endurecimiento documentable
Set-Cookie: sin HttpOnly/Secure/SameSiteRobo de sesión posible → hallazgo
robots.txt DisallowCasi siempre señala paneles reales → probarlos
Sonda: 200 en .git/config o .envCrítico inmediato (credenciales). 403 = ruta existe, apuntar
home.html: meta generator, rutas de recursos, comentariosConfirma CMS/tema y versiones
3

Mapeo de puertos (nmap)

Justificación

El cliente recuerda solo el 443; cada puerto abierto extra es superficie que nadie está parcheando.

Comando
nmap -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
PuertoSospecha
21¿FTP anónimo? ¿Sin TLS?
23Telnet: hallazgo, deshabilitar
445SMB a internet: grave
1433 / 3306 / 5432BD alcanzable desde internet: casi siempre error de config
6379Redis sin contraseña: crítico
3389RDP expuesto: fuerza bruta + CVEs
8080 / 8443Paneles de gestión, apps de prueba
9200 / 27017Elasticsearch/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.

4

Fingerprint tecnológico

Justificación

El stack detectado decide qué rama del paso 5 ejecutar.

Comando
whatweb https://tienda.empresacliente.cl
wafw00f https://tienda.empresacliente.cl
curl -s https://tienda.empresacliente.cl/wp-json     # confirmar WP
Análisis
MarcadorStack
/wp-content/, /wp-jsonWordPress → rama 5.A
Microsoft-IIS/, ASP.NET, rutas /Account/LoginIIS + MVC → rama 5.B
/sites/default/, CHANGELOG.txtDrupal → rama 5.C
/media/jui/, /administrator/Joomla → rama 5.C
Bundles JS con source mapsNode/Next: rutas internas expuestas
  • wafw00f detecta 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".
5

Rama según tecnología

5.A — WordPress

Justificación

El fallo casi nunca es el núcleo: es un plugin/tema desactualizado con CVE público.

Comando
wpscan --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-json que lista usuarios = usuarios válidos para fuerza bruta dirigida.
  • xmlrpc.php activo = 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ón

IIS deja artefactos de diagnóstico que, si nadie los apagó, filtran información interna.

Comando
curl -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.axd que 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

Comando
droopescan scan drupal -u https://tienda.empresacliente.cl
joomscan -u https://tienda.empresacliente.cl
Análisis
  • Drupal: CHANGELOG.txt accesible da la versión exacta.
  • Joomla: versión visible al pie de /administrator/; mismo flujo versión → CVE.

5.D — Paneles (cualquier stack)

Comando
for 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.
6

Rutas ocultas (ffuf)

Justificación

Descubre lo que no aparece en ningún menú: backups, repos, APIs, paneles.

Comando
ffuf -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.
7

TLS y servicios del borde

Justificación

Hallazgos de severidad media con remedio conocido: el pan de cada día del informe.

Comando
testssl.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).
8

Hallazgos y siguiente fase

Justificación

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

PasoComandoPara qué
1whois empresacliente.clDueño del dominio
1dig +short tienda.empresacliente.clIPs que resuelven
1https://crt.sh/?q=empresacliente.clSubdominios
2curl -I https://tienda.empresacliente.clCabeceras y seguridad
2curl -s .../robots.txtRutas autorreveladas
3nmap -sT -sV -sC -Pn 203.0.113.50Puertos, servicios, versiones
3nmap -p- -sT -sV -Pn -T4 203.0.113.50Todos los puertos
4whatweb https://tienda.empresacliente.clFingerprint
4wafw00f https://tienda.empresacliente.cl¿Hay WAF?
5.Awpscan --url https://tienda.empresacliente.cl --enumerate ap,at,uSuperficie WP
5.Bcurl -s .../elmah.axdLog de errores IIS
5.Cdroopescan scan drupal -u https://tienda.empresacliente.clDrupal
6ffuf -u .../FUZZ -w /usr/share/wordlists/dirb/common.txt -rate 60Rutas ocultas
7testssl.sh https://tienda.empresacliente.clCalidad TLS
7nmap --script ftp-anon -p21 203.0.113.50FTP anónimo
8bitácora + plantilla de hallazgoEvidencia y severidad