中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決使用python批量掃描SMTP 25未授權訪問問題

發布時間:2021-11-12 10:37:06 來源:億速云 閱讀:765 作者:小新 欄目:網絡安全

小編給大家分享一下如何解決使用python批量掃描SMTP 25未授權訪問問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

使用python實現SMTP 25未授權訪問批量掃描

測試某系統過程中發現很多服務器都開了25和110端口,但是不確定是不是真的郵件服務端口,所以打算嘗試復現下漏洞。

SMTP匿名郵件

SMTP(Simple Mail Transfer Protocol),簡單郵件傳輸協議是一種可靠且有效的電子郵件傳輸協議。

但是在設計之初,他并沒有添加身份驗證的機制,導致任意用戶可以連接到SMTP服務器進行郵件發送的操作。當然經過這么多年,已經有了SMTP-AUTH擴展來保證其安全性。

由于其巨大的基數,導致大量因為設置導致未開啟驗證或者舊版不支持SMTP-AUTH的STMP仍在現網環境運行,導致大量的垃圾/詐騙郵件依然在網上傳播,于是有了這篇文章來記錄下學習的過程。

漏洞準備

為了保證環境真實可控,還是自己搭一個吧。

系統環境選擇了kali 2020.1,畢竟省事,還能點到專欄名字,血賺。

現在最簡單安裝這些服務環境的方法就是docker了。

sudo systemctl daemon-reload
sudo systemctl restart docker.service   //重啟docker服務,不然可能會Cannot connect to the Docker 錯誤
sudo docker search smtp //搜索smtp服務的鏡像

如何解決使用python批量掃描SMTP 25未授權訪問問題

選一個STARS最多的就好了。

sudo docker pull namshi/smtp

這個時候如果你條件有限用的是公司小水管,就可能會發現下載很慢很慢,這時候要切一下國內源:

sudo vi /etc/docker/daemon.json   //沒有內容就創建一下,不用慌

然后添加如下內容:

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

添加后重啟docker:

sudo systemctl restart docker.service

下載就起飛了

如何解決使用python批量掃描SMTP 25未授權訪問問題

然后開啟docker:

sudo docker run --restart=always -d -e "RELAY_NETWORKS=:0.0.0.0/0" --name smtp -p 25:25 namshi/smtp

如何解決使用python批量掃描SMTP 25未授權訪問問題

嘗試使用telnet或者nc連接一下(系統里有哪個就用哪個,都行)

如何解決使用python批量掃描SMTP 25未授權訪問問題

可以看到返回了220,說明了連接成功

輸入HELP可以看到支持的指令

如何解決使用python批量掃描SMTP 25未授權訪問問題

使用EHLO或者HELO對服務器打個招呼~

如何解決使用python批量掃描SMTP 25未授權訪問問題

可以看到服務器返回了250。

繼續編寫 MAIL FROM:< XX@XX.Xx > 這是指定發件人:

如何解決使用python批量掃描SMTP 25未授權訪問問題

然后編寫RCPT TO:< 118xxxxx@qq.com > 這是指定收件人:

如何解決使用python批量掃描SMTP 25未授權訪問問題

然后輸入DATA開始編寫內容,并且以單獨的一行中只有一個"."來標識郵件內容結束:

如何解決使用python批量掃描SMTP 25未授權訪問問題

可以看到最后依然是250 OK,id后面是郵件的隊列,說明添加郵件成功。

可以用QUIT來退出連接了。(小寫也可以呦)

如何解決使用python批量掃描SMTP 25未授權訪問問題

這樣就是一個完整的連接流程了。

總結一下:

  1. 使用telnet或者nc連接smtp服務的25端口,連接成功返回220

  2. 使用EHLO xxxx 或者 HELO xxxx ,連接成功返回250

  3. 使用MAIL FROM:< xx@xx > 指定發件人,設置成功返回250

  4. 使用RCPT TO:< XX@XX > 指定收件人,設置成功返回250

  5. 使用DATA寫入郵件內容,以單行的“.”結束,編寫成功返回250,并且返回隊列id

  6. 使用QUIT退出連接

網絡實戰

為了獲取存在問題的環境,在FOFA中搜索

"SMTP" && port="25" && country="CN"

可以獲取到國內的開啟默認端口的主機IP地址,選國內是為了連接速度快。

如何解決使用python批量掃描SMTP 25未授權訪問問題

##開始利用嘗試使用telnet連接

telnet 1xxxxxx7 25

可以連接成功

如何解決使用python批量掃描SMTP 25未授權訪問問題

嘗試使用EHLO命令,看看會不會返回支持的擴展:

如何解決使用python批量掃描SMTP 25未授權訪問問題

然后,繼續MAIL FROM和RCPT TO,

如何解決使用python批量掃描SMTP 25未授權訪問問題

會發現需要認證。哦吼吼,繼續看看別的。

看到一個沒有AUTH擴展的,嘗試連接一下:

如何解決使用python批量掃描SMTP 25未授權訪問問題

一套操作下來,穩健:

如何解決使用python批量掃描SMTP 25未授權訪問問題

批量檢測

可能批量掃描掃描出的25端口很多,一個一個測過去很麻煩,需要一個方法進行批量掃描。

這里需要解決兩個問題,

  1. 確定NMAP沒有誤報,掃描出的25端口的確是smtp服務

  2. 嘗試獲取smtp服務能否匿名發送郵件,判斷的依據就是不會返回553代碼

如果用python調用telnet,雖然subprocess可以直接調用telnet,但是執行時不能正確返回telnet命令的結果(處理起來太麻煩了)。所以只能用python telnetlib的庫來實現(直接調用shell里的命令有時候真的弱爆了)

導入的格式目前是 xx.xx.xx.xx:xx 但是目前只寫了針對25默認端口

import telnetlib
import time


class TelnetClient():
    def __init__(self,):
        self.tn = telnetlib.Telnet()

    # 此函數實現telnet連接對應服務器25端口
    def login_host(self,host_ip):
        try:
            # self.tn = telnetlib.Telnet(host_ip,port=23)
            self.tn.open(host_ip,port=25)
        except:
            print('%s網絡連接失敗'%host_ip)
            return False
        else:
            time.sleep(5)
        # read_very_eager()獲取到的是的是上次獲取之后本次獲取之前的所有輸出
            try:
                command_result = self.tn.read_very_eager().decode('ascii')
            except:
                print('%s smtp端口連接失敗' % host_ip)
                return False
            else:
                # 等待返回Mail Server ESMTP ready,返回該信息說明登陸成功
                if '220'in command_result:
                    print('%s smtp登錄成功'%host_ip)
                    self.tn.write("EHLO localhost\n")
                    command_result = self.tn.read_very_eager().decode('ascii')
                    if "553" not in command_result and "connection closed" not in command_result:
                        self.tn.write("MAIL TO:<123@QQ.COM>\n")
                        print("輸入MAIL TO內容")
                        command_result = self.tn.read_very_eager().decode('ascii')
                        if "553" not in command_result and "connection closed" not in command_result:
                            self.tn.write("RCPT TO:<456@QQ.COM>\n")
                            print("輸入MAIL TO內容")
                            command_result = self.tn.read_very_eager().decode('ascii')
                            if "553" not in command_result:
                                print("可能存在未授權問題")
                                return True
                else:
                    print('%s smtp登錄失敗'%host_ip)
                    return False

    # 退出telnet
    def logout_host(self):
        self.tn.write(b"quit\n")


if __name__ == '__main__':
    ip_list = open("iplist1.txt", 'r')
    for line in ip_list.readlines():
        target=line.split(":",1)

        if ":25" in line:
            print("-----------------------------")
            print(target[0])
            telnet_client = TelnetClient()
            # 如果登錄結果返加True,則執行命令,然后退出
            if telnet_client.login_host(target[0]):
                telnet_client.logout_host()
            print("-----------------------------")

導入的需要是一個格式為 ip:port 的文件,因為懶,所以只寫了25端口,機智如你,肯定可以隨便改好的。

題外話

檢測smtp其實nmap有對應的腳本,只是沒有看到匿名模式的,所以才自己嘗試寫了一下,其他的可以參考這些:

如何解決使用python批量掃描SMTP 25未授權訪問問題

以上是“如何解決使用python批量掃描SMTP 25未授權訪問問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榕江县| 孙吴县| 康保县| 霞浦县| 潜山县| 夹江县| 绵竹市| 罗平县| 平南县| 桂林市| 许昌县| 锦州市| 台北市| 鄯善县| 衡东县| 屏东县| 南华县| 沛县| 万山特区| 邢台市| 应城市| 吉隆县| 绥芬河市| 梁河县| 门源| 麦盖提县| 鞍山市| 柘城县| 桓仁| 新泰市| 隆回县| 巴中市| 伊吾县| 江门市| 禄丰县| 信宜市| 绍兴市| 郎溪县| 靖州| 慈利县| 晋中市|