Enumerazione SMTP

Tempo di lettura: 7 minuti
Data pubblicazione: October 16, 2017

Simple Mail Transfer Protocol è il protocollo standard utilizzato per la trasmissione via internet di e-mail.

Durante una scansione delle porte di un server è facile trovare il servizio aperto, ma non è altrettanto facile trovarne vulnerabilità. In questo articolo vedremo alcune modalità per eseguire l’enumerazione di utenti attivi su di esso.

Protocolli di posta

I principali protocolli di porta sono tre:

  1. SMTP: permette di trasferire la posta da un server ad un altro, quindi consente solo l’operazione di invio e non di ricezione; utilizza la porta 25.
  2. POP3: sistema semplice di ricezione dei messaggi, utilizza (di default) la porta 110. I messaggi devono esser scaricati sul computer dell’utente (a differenza di IMAP). Questo protocollo non permette cifratura, quindi le credenziali inviate passano in chiaro;
  3. IMAP: anch’esso protocollo di ricezione, sfrutta la porta 143 o (nel caso di cifratura) 993. Questo servizio permette le procedure di sincronizzazione e di conseguenza il mantenimento delle mail sul server in modo da renderle accessibile ad altri host.
Comandi SMTP
Comandi SMTP

Per chi volesse approfondire, qui vengono descrittti i principali protocolli.

Identificazione del servizio

La verifica che il servizio sia attivo viene fatta in fase di scansione; per cui se dopo una scansione della rete la porta 25 è aperta (ma può essere diversa), l’host attaccato avrà il servizio attivo

Nmap e SMTP
Nmap e SMTP

Una volta trovato, possiamo utilizzare alcuni comandi per verificare se è possibile utilizzare il server come relay, ossia sfruttarlo per inviare e-mail in maniera anonima

┌─[mrtouch@parrot]─[~]
└──╼ $telnet 192.168.1.125 25
Trying 192.168.1.125...
Connected to 192.168.1.125.
Escape character is '^]'.
220 vulnix ESMTP Postfix (Ubuntu)
HELO 192.168.1.109
250 vulnix
MAIL FROM:wbe@mail.com           
250 2.1.0 Ok
RCPT TO:me@mail.it
554 5.7.1 <me@mail.it>: Relay access denied
(Alcuni) Comandi SMTP
(Alcuni) Comandi SMTP

Altri modi per testare questa malconfigurazione possono essere:

Enumerazione degli utenti

Una volta accertato che non è vulnerabile, passiamo all’enumerazione degli utenti; per eseguire questa operazione ci sono essere diversi modi, sia con tool automatici sia con comandi manuali.

Nmap, come di consueto, ha uno script apposito per l’enumerazione degli utenti, smtp-enum-users:

─[mrtouch@parrot]─[~]
└──╼ $nmap --script smtp-enum-users -p 25 192.168.1.125

Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-14 22:56 CEST
Nmap scan report for 192.168.1.125
Host is up (0.00034s latency).

PORT   STATE SERVICE
25/tcp open  smtp
| smtp-enum-users: 
|_  Method RCPT returned a unhandled status code.

Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds

Ma in questo caso sembra non funzionare.

Passo quindi a metasploit, con il modulosmtp_enum

Enumerazione tramite Metasploit
Enumerazione tramite Metasploit

Bingo! Abbiamo trovato diversi utenti attivi sul servizio.

Un’altra modalità è il software smtp-user-enum:

┌─[mrtouch@parrot]─[~]
└──╼ $smtp-user-enum -M VRFY -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt -t 192.168.1.125
Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )

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

Mode ..................... VRFY
Worker Processes ......... 5
Usernames file ........... /usr/share/metasploit-framework/data/wordlists/unix_users.txt
Target count ............. 1
Username count ........... 113
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............ 

####### Scan started at Sat Oct 14 23:03:04 2017 #########
192.168.1.125: ROOT exists
192.168.1.125: backup exists
192.168.1.125: bin exists
.................
192.168.1.125: user exists
192.168.1.125: www-data exists
192.168.1.125: vulnix exists
####### Scan completed at Sat Oct 14 23:03:05 2017 #########
26 results.

113 queries in 1 seconds (113.0 queries / sec)

Nel caso si volesse provare manualmente, è possibile utilizzare telnet

┌─[mrtouch@parrot]─[~]
└──╼ $telnet 192.168.1.125 25
Trying 192.168.1.125...
Connected to 192.168.1.125.
Escape character is '^]'.
220 vulnix ESMTP Postfix (Ubuntu)
vrfy ROOT.localdomain
550 5.1.1 : Recipient address rejected: User unknown in local recipient table
vrfy root.localdomain
550 5.1.1 : Recipient address rejected: User unknown in local recipient table
vrfy root
252 2.0.0 root
vrfy hacktips
550 5.1.1 : Recipient address rejected: User unknown in local recipient table
vrfy sys
252 2.0.0 sys
vrfy vulnix
252 2.0.0 vulnix

In queso modo abbiamo identificato almeno tre account disponibili (il comando vrfy chiede al server se il determinato utente richiesto è valido).

Conclusioni

Una volta identificati gli utenti possiamo passare alla prossima fase, ossia quella dello scanning di altri servizi, utilizzando le informazioni raccolte fin’ora o eseguire direttamente un bruteforce sul servizio ssh, avendo già scoperto alcuni utenti del sistema.

Per chi se lo fosse chiesto, la macchina che ho utilizzato è vulnix, mentre per chi volesse approfondire attacchi a SMTP, consiglio SMTP - Always a victim of good time (SANS) e SMTP Injection via recipient email addresses.