本文首發(fā)于 I春秋
起因:
由于紅隊(duì)工作的原因,我們需要不定期對(duì)公司內(nèi)部的設(shè)備及人員發(fā)起攻擊,但是常規(guī)的WEB攻擊或者系統(tǒng)服務(wù)攻擊,并不能完整的模擬出外部的威脅。所以在這段時(shí)間,我也就研究了一下郵件偽造技術(shù)。(當(dāng)然本文中的偽造肯定不同于常規(guī)的偽造)。
在討論郵件偽造的主題之前,我們先來(lái)簡(jiǎn)單了解一下這幾個(gè)協(xié)議(POP3,IMAP,SMTP)與SPF。
1.POP3:
POP3即“Post Office Protocol - Version 3”,其作用是客戶(hù)端連接服務(wù)器下載服務(wù)器中所有未閱讀的郵件。
2.IMAP:
IMAP即“Internet Mail Access Protocol”,它不同于POP3,POP3協(xié)議并不會(huì)將客戶(hù)端對(duì)郵件進(jìn)行的操作同步至服務(wù)器。當(dāng)使用IMAP協(xié)議與郵件服務(wù)器交互的時(shí)候,你在客戶(hù)端對(duì)郵件進(jìn)行的操作都會(huì)同步到服務(wù)器上,所以IMAP也叫做交互式郵件存取協(xié)議。
3.SMTP
SMTP協(xié)議即“Simple Mail Transfer Protocol”簡(jiǎn)單郵件傳輸協(xié)議。它是用于從源地址到目標(biāo)地址傳輸郵件的規(guī)范。通過(guò)該協(xié)議來(lái)控制郵件的中轉(zhuǎn)。而我們常用的郵件供應(yīng)商所提供的郵件服務(wù),基本都是采用的SMTP協(xié)議進(jìn)行傳輸。
SMTP協(xié)議同時(shí)也要求了客戶(hù)端連接服務(wù)器需要進(jìn)行認(rèn)證(如果允許匿名登錄那就另當(dāng)別論了)。但是它也僅僅只要求了客戶(hù)端需要與服務(wù)端進(jìn)行認(rèn)證。而SMTP服務(wù)器之間傳輸郵件的過(guò)程是不需要進(jìn)行認(rèn)證的。這也就是郵件偽造的關(guān)鍵點(diǎn)所在。
4.SPF
SPF即“Sender Policy Framework”是一種以IP地址認(rèn)證電子郵件發(fā)件人身份的技術(shù)。 接收郵件方會(huì)首先檢查域名的SPF記錄,來(lái)確定發(fā)件人的IP地址是否被包含在SPF記錄里面,如果在,就認(rèn)為是一封正確的郵件,否則會(huì)認(rèn)為是一封偽造的郵件進(jìn)行退回。
SPF可以防止別人偽造你來(lái)發(fā)郵件,是一個(gè)反偽造性郵件的解決方案。當(dāng)你定義了你域名的SPF記錄之后, 接收郵件方會(huì)根據(jù)你的SPF記錄來(lái)確定連接過(guò)來(lái)的IP地址是否被包含在SPF記錄里面,如果在,則認(rèn)為是一封正確的郵件,否則則認(rèn)為是一封偽造的郵件。
傳統(tǒng)的郵件偽造
當(dāng)我們?cè)谶M(jìn)行郵件偽造的時(shí)候,一般都會(huì)去查詢(xún)對(duì)應(yīng)域名的SPF記錄,如下騰訊便使用了SPF技術(shù):

基本上現(xiàn)在很難有看到?jīng)]有使用SPF的大廠域名了。當(dāng)我們偽造郵件的時(shí)候,如果域名有設(shè)置SPF,那么我們基本就很難進(jìn)行傳統(tǒng)的偽造了。
但是優(yōu)良傳統(tǒng)不能忘,這里我還是得舉個(gè)使用Swaks進(jìn)行郵件偽造的例子。(公司內(nèi)部郵箱)
關(guān)于Swaks的具體用法請(qǐng)自行百度。畢竟它不是本文的關(guān)鍵。

這里我已經(jīng)收到了郵件,但是其在郵件中提示了SPF Failed,這就是雖然我們公司做了SPF,但是其規(guī)則存在問(wèn)題,所以會(huì)出現(xiàn)攔截失敗的狀況。但是這種攔截失敗的提示對(duì)于財(cái)務(wù),人力等非技術(shù)人員來(lái)說(shuō)可能并不會(huì)注意,但是對(duì)于技術(shù)人員來(lái)說(shuō)當(dāng)收到這種郵件的時(shí)候,肯定會(huì)起疑。所以我們?cè)谶M(jìn)行紅隊(duì)釣魚(yú)工作的時(shí)候,可以有針對(duì)性的對(duì)特定目標(biāo)進(jìn)行釣魚(yú)。

非傳統(tǒng)性郵件偽造(基于客戶(hù)端漏洞的偽造),以騰訊郵箱為例
首先,我們知道,騰訊郵箱是做了SPF策略的。當(dāng)我們使用Swaks去偽造管理員用戶(hù)的時(shí)候,是無(wú)法偽造成功的。如下,550錯(cuò)誤

但是這樣我們是否就無(wú)法進(jìn)行偽造了?當(dāng)然可以繼續(xù)偽造,不過(guò)我們需要使用的方法不同而已。
首先我們需要知道,SMTP協(xié)議發(fā)送郵件的時(shí)候,是使用Mail From來(lái)指定發(fā)件人,但同時(shí)需要我們知道的還有一點(diǎn)即(發(fā)件人別名),這個(gè)是我們可以自定義的,那么這個(gè)時(shí)候我們來(lái)大膽猜測(cè)一下。發(fā)件人別名有什么用?而郵件客戶(hù)端是如何去對(duì)它進(jìn)行處理的。因此我對(duì)QQ郵箱進(jìn)行了FUZZ測(cè)試。測(cè)試結(jié)果如下圖所示:


可以看到我收到了以admin@qq.com為發(fā)件人發(fā)送的郵件。這個(gè)時(shí)候我在給你們看看郵件原文,你們應(yīng)該就知道這是為什么了。

其實(shí)就是我通過(guò)修改“發(fā)件人別名”在其中填充大量的特殊字符,從而使郵箱客戶(hù)端截取實(shí)際發(fā)件人失敗,導(dǎo)致實(shí)際顯示效果為我們偽造的郵箱及發(fā)件人。
以下為發(fā)件人別名payload,當(dāng)然也可以自己寫(xiě)個(gè)SMTP腳本進(jìn)行測(cè)試。腳本我已經(jīng)寫(xiě)好了,但是敏感時(shí)期就不發(fā)了。大家可以使用outlook進(jìn)行測(cè)試。
管理員 <admin@qq.com> ··· ···

最后
經(jīng)過(guò)測(cè)試,并非只有騰訊郵箱存在這樣的問(wèn)題,各個(gè)郵件廠商都或多或少的存在問(wèn)題,同時(shí)我也將這個(gè)問(wèn)題提交給了騰訊SRC,但是他們的回復(fù)是這是符合RFC標(biāo)準(zhǔn)和協(xié)議的偽造場(chǎng)景。SO,我也就沒(méi)什么好說(shuō)的了。但好在這次研究中也發(fā)現(xiàn)了一些Outlook與Exchange的問(wèn)題。
最后放上一張圖,不知道這算不算郵件偽造成功或者偽造漏洞?

最后最后:
以上利用點(diǎn)僅用于研究,或紅隊(duì)公司內(nèi)部任務(wù)使用,切勿用于非法用途,望周知!