利用smtp協議發郵箱 -- 實現郵件轟炸

聲明:本文只爲深入理解和運用smtp協議,發佈的源碼僅做交流使用,不可用於攻擊行爲!!!

  上一週,網絡安全老師佈置一個作業:選擇一個小項目玩玩。看了看那些項目,一眼就瞅中“email郵件炸彈”,感覺這個挺有趣的,就想倒騰玩玩。

  首先,連了解一下smtp協議:https://blog.csdn.net/qq_35644234/article/details/68961603(這個博客寫的很好)

  我來大概總結一下吧。

  先大致說一下郵件的發送流程。首先明確,郵件的發送是通過smtp服務器的,例如你用qq郵箱要給163郵箱發送信件,那麼你得先登錄qq郵箱的smtp服務器(smtp.qq.com),然後把郵件發送給這個服務器,接着qq郵箱的smtp服務器就會把你的郵件發送給你指定的smtp服務器(163郵箱的服務器:smtp.163.com)。而你要登錄到你的smtp服務器,就得用smtp協議。

  既然是協議,那麼就會有一套事先約定好的規則,你要按照固定的格式與smtp服務器進行交互,最終才能登錄到smtp服務器上。而登錄的步驟有以下幾步:

    ① 終端輸入:telnet smtp服務器域名或者ip smtp服務器的端口號
      解釋:SMTP服務器向該客戶送回應答碼220 進入交互界面
    ② 在交互界面輸入: helo smtp服務器的名字(如163郵箱即爲163,QQ郵箱即爲qq,大學的郵箱一般爲學校的英文簡稱)
      解釋:發送的HELO用來向服務器提供客戶端的標識信息    服務器端迴應應答碼250,通知客戶端:請求建立smtp郵件服務會話已經實現
    ③ 輸入:auth login
      解釋:發送login先服務器申請登錄  服務器返回“334 dXNlcm5hbWU6(是username:的Base64編碼)”,要求你的賬號
    ④ 輸入:你的賬號的Base64編碼(可以用這個工具進行編碼:https://c.runoob.com/front-end/693
      解釋:向服務器發送你的賬號  如果服務器中存在你的賬號時,會返回“334 UGFzc3dvcmQ6(是Password:的Base64編碼)”,要求你的密碼
    ⑤ 輸入:你的密碼的Base64編碼 如果賬號密碼對應的話,會返回235,表示登錄成功
    ⑥ 輸入:MAIL FROM: 自己的郵箱地址
      解釋:向服務器報告發信人的郵箱與域名      服務器向客戶迴應應答碼“250”,代表請求命令完成
    ⑦ 輸入:RCPT TO:要發送的郵箱地址
      解釋:向服務器報告收信人的郵箱與域名    服務器向客戶迴應應答碼“250”,代表請求命令完成
    ⑧ 輸入:DTAT
      解釋:用“DTAT”命令對報文的傳送進行初始化    服務器迴應“354”,表示可以進行郵件輸入了
    ⑨ 輸入:From:發件人的郵箱地址
            To:收件人的郵箱地址
            Subject:郵件的標題
            Date:發件的時間
            (空一行表示正文開始
            ......(正文)

            .(這一行單獨一個.  表示結束正文)
      解釋:服務器向客戶迴應應答碼“250”,代表請求命令完成,完成郵件的發送(如果回覆是550,表示郵件被退回了,可能是你收件地址寫錯啦。。也可能是被對方的服務器彈回去了。。)
    ⑩ 輸入:QUIT
      解釋:客戶端發送“QUIT”命令,結束髮件  服務器收到命令後,迴應應答碼“221”,並結束會話
    

可以參考下面幾張圖,加深對這個過程的理解:

 

 

效果圖:

幾點說明:

① 我這裏用的是學校的郵箱([email protected]),在登錄一個服務器之前,你得先知道服務器的域名或ip,
我們學校的smtp服務器域名叫em.njupt.edu.cn,而大部分的smtp服務器域名爲smtp.XX.com(如smtp.qq.com,smtp.163.com) 然後還得知道服務器對應的端口號(一般爲25)
② 

① 在用終端發送郵件時,先確認你的windows系統打開了telnet服務,其次你所要登錄的smtp服務器,你在這個服務器上的賬號打開了SMTP服務,否則無法登錄服務器,什麼?不知道咋打開?好吧,下面以qq郵箱爲例,直接看圖吧,很簡單的

 

② 我這裏用的是學校的郵箱([email protected]),在登錄一個服務器之前,你得先知道服務器的域名或ip,我們學校的smtp服務器域名叫em.njupt.edu.cn,而大部分的smtp服務器域名爲smtp.XX.com(如smtp.qq.com,smtp.163.com) 然後還得知道服務器對應的端口號(一般爲25)
③  從上到下,箭頭指向的行(包括第一張圖上)就是上面各個步驟的輸入。注意:輸入是不能輸錯的,因爲你的每一次按鍵實際上已經被傳送到服務器,所以輸入錯誤時不能使用退格鍵刪除,只能換行重新輸入(可以事先把所有的命令複製到一個txt文件裏,然後複製+在終端中右擊(粘貼),需要留意的是,複製一行時不可以雙擊選中一行,因爲這樣你會默認選擇一行中最後的換行符,所以還是老老實實按住左鍵複製全部吧。。。)

     其實可以分爲五部分:1. 打招呼,開始會話(紅色箭頭) 2. 登錄服務器(藍色箭頭) 3. 填寫“快遞信息”:發件地址和收件地址(紫色箭頭) 4. 發出開始“向快遞盒中裝郵件的命令”:data  5. 書寫郵件(橙、棕、紅三色),這個部分又分爲:寫寫信人暱稱、收信人暱稱、郵件標題、發件時間、正文(以上參數可以缺省) 6. 發出結束會話命令“Quit”(黃色箭頭)

④  在交互窗口下是無法輸入漢字的,可以在寫字板中打好漢字後複製粘貼進去,不過顯示還是亂碼,發出的郵件也是奇奇怪怪的中文字符。。。附上一張圖(圖中有一個錯誤,就是subject下面,在開始正文前缺少一個空行,事實證明發出的郵件也沒有正文。。。):

上圖中的“適蜒”其實是“誓言”。。。至少是諧音。至於“創慫父”我就不明所以了。。

 

最後附上一張效果比較好的截圖:

感謝你能堅持看到這,現在你應該對smtp協議有了一定的瞭解吧,不過如果想用終端手動輸入實現郵件轟炸顯然不太現實。。。。所以,就用python寫了一個腳本,在linux系統運行,實現了郵件轟炸的功能。

有兩個文件,一個config.py(用於存smtp服務器域名(或ip)、端口號、賬號、密碼、發件人郵箱地址、收件人郵箱地址)

另一個sendInfo.py(導入了config)用於郵件轟炸,其實就是利用了python3的smtplib類中的函數(參考:http://www.runoob.com/python/python-email.html

貼一張效果圖吧:

源碼放在這裏了(由於老師驗收還沒結束。。防止被本班的同學拿去,所以以後再傳):

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章