25 - SMTP
SMTP steht für "Simple Mail Transfer Protocol" und wird verwendet, um den Versand von E-Mails zu verwalten. Es arbeitet in Verbindung mit POP oder IMAP, um sowohl den Versand als auch den Empfang von E-Mails zu ermöglichen.
SMTP Functions:
Verifizierung: Der SMTP-Server überprüft, wer E-Mails über ihn sendet
Versand: Er versendet die ausgehende E-Mail
Fehlermeldung: Wenn die E-Mail nicht zugestellt werden kann, wird eine Nachricht an den Absender zurückgesendet
POP vs. IMAP:
POP (Post Office Protocol): Lädt die gesamte Mailbox vom Server herunter und speichert sie lokal.
IMAP (Internet Message Access Protocol): Synchronisiert die Mailbox zwischen dem Server und dem Client, sodass Änderungen an der Mailbox auf allen Geräten sichtbar sind.
Ablauf SMTP
1. SMTP Handshake
Verbindung: Dein E-Mail-Client (Mail User Agent) verbindet sich mit dem SMTP-Server deines E-Mail-Anbieters, z.B.
smtp.google.com
, über den SMTP-Port (normalerweise 25).Handshake: Der SMTP-Server und dein Client führen einen Handshake durch, bei dem die Verbindung und die Identität des Absenders validiert werden.
Sitzung: Nach erfolgreichem Handshake beginnt die SMTP-Sitzung, in der E-Mails gesendet werden können.
2. Senden der E-Mail
Übermittlung: Dein E-Mail-Client übermittelt dem SMTP-Server den Absender (MAIL FROM), den Empfänger (RCPT TO), den Inhalt der E-Mail und eventuelle Anhänge.
Validierung: Der SMTP-Server prüft, ob die E-Mail korrekt formatiert ist und ob alle erforderlichen Informationen vorhanden sind.
3. Prüfung der Domain
Interne Zustellung: Der SMTP-Server prüft, ob die Domain des Empfängers mit der des Absenders übereinstimmt.
Gleiche Domain: Wenn die Domains übereinstimmen (z.B. beide E-Mail-Adressen gehören zu
example.com
), wird die E-Mail direkt intern zugestellt.Unterschiedliche Domains: Wenn die Domains unterschiedlich sind, wird die E-Mail an den SMTP-Server des Empfängers weitergeleitet.
4. Weiterleitung und SMTP Queue
Verbindung zum Empfänger-Server: Der SMTP-Server des Absenders stellt eine Verbindung zum SMTP-Server des Empfängers her.
Fehlerbehandlung: Wenn der Empfänger-Server nicht erreichbar ist oder es andere Probleme gibt, wird die E-Mail in eine SMTP Queue gestellt.
SMTP Queue: Dies ist ein temporärer Speicher auf dem Server, in dem die E-Mail verbleibt, bis der SMTP-Server des Empfängers erreichbar ist. Der SMTP-Server versucht regelmäßig, die E-Mail erneut zuzustellen.
5. Zustellung der E-Mail
Verifikation durch den Empfänger-Server: Der SMTP-Server des Empfängers prüft, ob die Domain und der Benutzername existieren und gültig sind.
Weiterleitung an POP/IMAP: Wenn die E-Mail verifiziert ist, leitet der SMTP-Server sie an den entsprechenden POP- oder IMAP-Server weiter.
E-Mail im Posteingang: Die E-Mail erscheint schließlich im Posteingang des Empfängers.
SMTP Pentest
1. Service Enumeration (Dienst-Erkennung)
Der erste Schritt in einem Penetrationstest ist das Sammeln von Informationen über den SMTP-Dienst. Hierbei werden Tools wie Nmap verwendet, um die SMTP-Kommandos und -Funktionen zu ermitteln, die vom Server unterstützt werden.
Nmap-Skript: smtp-commands
smtp-commands
$ sudo nmap -sC -sV -p25 10.129.14.128
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
|_smtp-commands: mail.example.com, PIPELINING, SIZE 10240000, VRFY, ETRN, ENHANCEDSTATUSCODES
MAC Address: 00:00:00:00:00:00 (VMware)
-sC
: Führt Standard-NSE-Skripte aus.-sV
: Identifiziert den SMTP-Dienst und seine Version.-p25
: Scannt den SMTP-Port (25).
Diese Information zeigt, welche SMTP-Kommandos der Server unterstützt. Interessant sind hier insbesondere VRFY (User Verification), PIPELINING und STARTTLS (für verschlüsselte Verbindungen).
2. Interaktion mit dem SMTP-Server über Telnet
Um manuell mit dem SMTP-Server zu interagieren, wird häufig Telnet verwendet. Dies ermöglicht es, Befehle direkt an den Server zu senden, um Schwachstellen wie Benutzerenumeration oder Open Relays zu überprüfen.
Verbindung zum SMTP-Server herstellen:
$ telnet 10.129.14.128 25
Dies stellt eine unverschlüsselte Verbindung zum SMTP-Server auf Port 25 her.
HELO und EHLO Kommandos
HELO: Initiiert die Kommunikation und stellt den Hostnamen des Clients vor.
EHLO: Eine erweiterte Version von HELO für ESMTP (Extended SMTP), die zusätzliche Funktionen wie STARTTLS und Authentifizierung ermöglicht.
HELO example.com
250 example.com
EHLO example.com
250-example.com
250-PIPELINING
250-SIZE 10240000
250-STARTTLS
250-ENHANCEDSTATUSCODES
HELO oder EHLO sind notwendig, um die Kommunikation mit dem Server zu beginnen.
Die Ausgabe zeigt die unterstützten ESMTP-Erweiterungen wie PIPELINING (Erlaubt mehrere Befehle ohne Wartezeit), STARTTLS (für verschlüsselte Verbindungen) und VRFY (Benutzerüberprüfung).
3. Benutzerenumeration (User Enumeration)
Eine häufige Schwachstelle bei SMTP ist die Benutzerenumeration. Diese kann ausgenutzt werden, um festzustellen, ob bestimmte Benutzer auf dem System existieren. Der VRFY-Befehl (Verify) wird häufig für diesen Zweck verwendet, aber alternative Methoden wie RCPT TO können ebenfalls angewendet werden. Diese Techniken helfen dabei, gültige Benutzerkonten zu finden, was nützlich für weitere Angriffe sein kann.
VRFY-Kommando
Der VRFY-Befehl überprüft, ob ein bestimmter Benutzer auf dem SMTP-Server existiert.
Beispiel:
$ telnet 10.236.214.258 25
VRFY admin
252 2.0.0 admin
VRFY admin: Der Server bestätigt, dass der Benutzer admin existiert (Antwortcode: 252).
$ telnet 10.236.214.258 25
VRFY nonexistentuser
550 5.1.1 <nonexistentuser>: Recipient address rejected: User unknown in virtual mailbox table
VRFY nonexistentuser: Der Server lehnt die Existenz eines Benutzers ab (Antwortcode: 550).
Hinweis:
Manche Server deaktivieren den VRFY-Befehl oder geben immer eine positive Antwort zurück (Code 252), um Enumeration zu verhindern.
Alternative Methode: RCPT TO
Falls der VRFY-Befehl deaktiviert oder limitiert ist, kann die Benutzerüberprüfung auch über das RCPT TO-Kommando erfolgen. Diese Methode nutzt die Überprüfung der E-Mail-Empfänger, um die Existenz von Benutzern zu validieren.
Beispiel:
$ telnet 10.236.214.258 25
MAIL FROM: <test@example.com>
250 2.1.0 Ok
RCPT TO: <validuser@example.com>
250 2.1.5 Ok
RCPT TO: Der Server bestätigt, dass der Benutzer existiert.
$ telnet 10.236.214.258 25
RCPT TO: <invaliduser@example.com>
550 5.1.1 <invaliduser@example.com>: Recipient address rejected: User unknown in local recipient table
RCPT TO: Der Server lehnt den Benutzer ab (Antwortcode: 550).
Automatisierte Benutzerbruteforce mit smtp-user-enum
smtp-user-enum
Um den Brute-Force-Prozess zu automatisieren und eine Liste von Benutzern auf einem SMTP-Server zu testen, eignet sich das Tool smtp-user-enum
. Es unterstützt die Brute-Force-Überprüfung über VRFY, EXPN und RCPT TO-Befehle.
Beispiel für die Verwendung von smtp-user-enum
mit RCPT TO:
$ smtp-user-enum -M RCPT -U /path/to/userlist.txt -t 10.129.14.128 -D example.com
| 10.129.14.128 | testuser | User found |
| 10.129.14.128 | admin | User found |
| 10.129.14.128 | invaliduser | User not found |
Erklärung:
-M RCPT
: Methode zur Überprüfung (in diesem Fall über RCPT TO).-U /path/to/userlist.txt
: Der Pfad zur Liste von Benutzernamen, die bruteforced werden soll.-t 10.129.14.128
: Ziel-SMTP-Server (IP-Adresse).-D example.com
: Die Domain, gegen die die Benutzernamen getestet werden sollen (in diesem Fall example.com).
Erweiterte Optionen:
Parallelisierung: Mit
-m 5
kannst du 5 parallele Verbindungen nutzen, um den Prozess zu beschleunigen.Port: Der SMTP-Port kann mit
-p 25
festgelegt werden.
Metasploit
1. Starte Metasploit
$ msfconsole
2. Suche das Modul smtp_enum
msf > search smtp_enum
3. Wähle das Modul aus
msf > use auxiliary/scanner/smtp/smtp_enum
4. Zeige die verfügbaren Optionen
msf > options
5. Setze die Ziel-IP-Adresse (RHOSTS)
msf > set RHOSTS <Ziel-IP-Adresse>
6. Setze die Benutzerdatei (USER_FILE)
msf > set USER_FILE /path/to/footprinting-wordlist.txt
7. Starte den Exploit
msf > exploit
4. Open Relay Testing
Ein Open Relay ist ein SMTP-Server, der E-Mails von jedem Absender an jeden Empfänger weiterleitet, ohne Authentifizierung zu verlangen. Dies kann für Spam-Versand oder E-Mail-Spoofing missbraucht werden.
Open Relay Test mit Nmap
Mit Nmap kannst du überprüfen, ob ein SMTP-Server als Open Relay fungiert:
$ sudo nmap -p25 --script smtp-open-relay 10.129.14.128
PORT STATE SERVICE
25/tcp open smtp
| smtp-open-relay: Server is an open relay (16/16 tests)
Diese Ausgabe zeigt, dass der Server als Open Relay konfiguriert ist und potenziell für Spam missbraucht werden kann.
Unsichere Open Relay-Konfiguration in Postfix:
mynetworks = 0.0.0.0/0
Diese Einstellung erlaubt allen Hosts, E-Mails über den Server zu versenden.
5. E-Mail-Spoofing
Ein weiteres Problem mit falsch konfigurierten SMTP-Servern ist E-Mail-Spoofing, bei dem gefälschte Absenderadressen verwendet werden, um den Anschein zu erwecken, dass eine E-Mail von einer vertrauenswürdigen Quelle stammt.
E-Mail-Spoofing über Telnet
MAIL FROM: <fake.sender@example.com>
250 2.1.0 Ok
RCPT TO: <victim@example.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: fake.sender@example.com
To: victim@example.com
Subject: Test Spoofing
This is a spoofed email.
.
250 2.0.0 Ok: queued as 12345
MAIL FROM: Falsche Absenderadresse.
RCPT TO: Zieladresse.
DATA: Der Inhalt der E-Mail.
6. Abwehrmechanismen: SPF, DKIM, DMARC
Um Angriffe wie E-Mail-Spoofing und Spam zu verhindern, werden oft folgende Mechanismen implementiert:
SPF (Sender Policy Framework): Definiert, welche Server E-Mails im Namen einer Domain senden dürfen.
DKIM (DomainKeys Identified Mail): Signiert E-Mails digital, um die Echtheit des Absenders zu bestätigen.
DMARC (Domain-based Message Authentication, Reporting & Conformance): Verknüpft SPF und DKIM und gibt Richtlinien zur Handhabung von fehlgeschlagenen Überprüfungen vor.
Prüfung eines SPF-Eintrags mit dig
:
$ dig TXT example.com
example.com. 600 IN TXT "v=spf1 include:_spf.google.com ~all"
Dieser SPF-Eintrag erlaubt es nur den Servern, die im SPF-Record von Google definiert sind, E-Mails zu senden.
Last updated