摘要:一項目說明項目簡介本次實驗通過使用實現一個弱口令掃描器開始,入門滲透測試技術,實驗涉及協議原理,庫的使用等知識點。找到密碼并不會終止程序,而是會繼續掃描其他主機的弱口令,直到所有的主機都掃描一遍。
一、項目說明 1.1 項目簡介
本次實驗通過使用 Python 實現一個 FTP 弱口令掃描器開始,入門 Python 滲透測試技術,實驗涉及 FTP 協議原理,ftplib 庫的使用等知識點。
本教程由作者向實驗樓投稿發布,完整教程及在線練習地址:Python 實現 FTP 弱口令掃描器
1.2 目標學員具有Python語言基礎,不會的同學請到隔壁班先去學一下
1.3 Python版本Python3.x
1.4 知識點本實驗涉及如下知識點:
認識Ftp服務器
Ftplib庫的使用
argparse庫的使用
Ubuntu下Ftp服務器的搭建
1.5 效果圖本節實驗將實現如下功能的 FTP 弱口令掃描器:
二、 理論基礎以下內容整理自百度百科,參考鏈接:
百度百科-FTP服務器
2.1 FTP服務器FTP服務器(File Transfer Protocol Server)是在互聯網上提供文件存儲和訪問服務的計算機,它們依照FTP協議提供服務。 FTP是File Transfer Protocol(文件傳輸協議)。顧名思義,就是專門用來傳輸文件的協議。簡單地說,支持FTP協議的服務器就是FTP服務器。
FTP是僅基于TCP的服務,不支持UDP。與眾不同的是FTP使用2個端口,一個數據端口和一個命令端口(也可叫做控制端口)。通常來說這兩個端口是21(命令端口)和20(數據端口)。但FTP 工作方式的不同,數據端口并不總是20。這就是主動與被動FTP的最大不同之處。主要有兩種工作模式:
主動FTP
FTP服務器的控制端口是21,數據端口是20,所以在做靜態映射的時候只需要開放21端口即可,他會用20端口和客戶端主動的發起連接。
被動FTP
服務器的控制端口是21,數據端口是隨機的,且是客戶端去連接對應的數據端口,所以在做靜態的映射話只開放21端口是不可以的。此時需要做DMZ。
2.2 Ftp掃描器實現方案本課程開發Ftp掃描器主要從以下兩個方面著手:
掃描匿名FtpFtp匿名登錄的掃描主要應用于批量掃描中,多帶帶針對一個Ftp服務器進行掃描的話成功幾率比較小,不過也不排除成功的可能。估計講到這里的時候,有的同學就有疑問了!!!現在還有人不設置密碼嗎?那得傻到啥程度?用東北的話來說那不就是傻狍子嗎!!!(開個玩笑,免得同學們看我的教程睡著了!)不過言歸正傳,很多網站都開放Ftp服務方便用戶下載資源(這個允許匿名登錄不足為奇),更瘋狂的是網站管理人員為了方便網站訪問軟件的更新也開放了Ftp匿名登錄(估計不是自己家的網站......)。這樣就給了我們很多機會,尤其后者的服務器很容易就受到攻擊,后期我會講解Ftp目錄下可以搜到web頁面之后怎樣拿到Shell(大家多多關注我的教程吧,還有很多精品課程等著你!)。
掃描Ftp弱口令Ftp弱口令掃描其實就是暴力破解,為何我們不稱為暴力破解呢?因為我們只是掃描一些簡單的密碼組合,并不是所有可能得密碼組合,而且我們也沒有那么多時間去暴力破解,誰讓我們活不了成千上萬年呢!只是一個密碼而已,弱口令掃不到就算了,天涯何處無芳草何必單戀一枝花呢!不過你要非喜歡這個Ftp服務器的話,以后我再教大家別的方法滲透服務器!
三、代碼實現 3.1 Ftp匿名掃描器的實現這里我們要用到Python的ftplib庫中的Ftp這個類,Ftp這個類實現了Ftp客戶端的大多數功能,比如連接Ftp服務器、查看服務器中的文件、上傳、下載文件等功能,詳細用法可以查看一下文檔,以后碰到問題也要養成先看文檔的習慣!接下來我們來定義anonScan(hostname)這個函數以實現掃描可匿名登錄的Ftp服務器。代碼如下:
#匿名登錄掃描 def anonScan(hostname): #參數是主機名 try: with FTP(hostname) as ftp: #創建Ftp對象 ftp.login() #Ftp匿名登錄 print(" [*] " + str(hostname) + " FTP Anonymous login successful!") #不拋出異常則表明登錄成功 return True except Exception as e: #拋出異常則表明匿名登錄失敗 print(" [-] " + str(hostname) + " FTP Anonymous logon failure!") return False
代碼很簡短,主要在注釋中解釋了代碼的含義。這里說一下這個函數的思路,首先用主機名構造了一個Ftp對象(即ftp),然后用這個ftp調用不帶任何參數的login()函數即表示要匿名登錄這個Ftp服務器,如果登錄過程中沒有產生異常,則表明匿名登錄成功,否則匿名登錄失敗!
3.2 Ftp弱口令的掃描Ftp弱口令的掃描依賴于用戶名和密碼字典,我們的實驗環境中會提供 pwd.txt 作為密碼字典,字典的格式如下圖所示:
接下來我們針對字典中的格式來實現Ftp弱口令的掃描,代碼如下:
#暴力破解 def vlcLogin(hostname, pwdFile): #參數(主機名,字典文件) try: with open(pwdFile, "r") as pf: #打開字典文件 for line in pf.readlines(): #循環讀取字典文件中的每一行 time.sleep(1) #等待1秒 userName = line.split(":")[0] #從讀取的內容中取出用戶名 passWord = line.split(":")[1].strip(" ").strip(" ") #從讀取的內容中取出密碼 print("[+] Trying: " + userName + ":" + passWord) try: with FTP(hostname) as ftp: #以主機名為參數構造Ftp對象 ftp.login(userName, passWord) #使用讀取出的用戶名密碼登錄Ftp服務器 #如果沒有產生異常則表示登錄成功,打印主機名、用戶名和密碼 print(" [+] " + str(hostname) + " FTP Login successful: "+ userName + ":" + passWord) return (userName, passWord) except Exception as e: # 產生異常表示沒有登錄成功,這里我們不用管它,繼續嘗試其他用戶名、密碼 pass except IOError as e: print("Error: the password file does not exist!") print(" [-] Cannot crack the FTP password, please change the password dictionary try again!") return (None,None)
這段代碼其實就是循環從字典中讀取用戶名和密碼并嘗試登陸,登陸成功則表明找到用戶名和密碼。由于這個函數將主機名定義成了可以用“,”分割的字符串。找到密碼并不會終止程序,而是會繼續掃描其他主機的弱口令,直到所有的主機都掃描一遍。
3.3 命令行解析至此我們的Ftp掃描器已經幾乎完成了,代碼并不多,也很簡單。現在我們需要做的是讓我們的腳本可以處理命令行輸入,以控制掃描哪些主機。處理命令行參數我們將用到Python中的argparse庫,這個庫是Python中自帶的模塊,處理命令行將變得非常簡單,下面我們一起見證一下argparse的強大之處,先上代碼:
# 這里用描述創建了ArgumentParser對象 parser = argparse.ArgumentParser(description = "FTP Scanner") # 添加-H命令dest可以理解為咱們解析時獲取-H參數后面值的變量名,help是這個命令的幫助信息 parser.add_argument("-H",dest="hostName",help="The host list with ","space") parser.add_argument("-f",dest="pwdFile",help="Password dictionary file") options = None try: options = parser.parse_args() except: print(parser.parse_args(["-h"])) exit(0) hostNames = str(options.hostName).split(",") pwdFile = options.pwdFile
通過argparse庫來解析命令行參數,可以根據添加參數時指定的help關鍵字的內容來自動生成幫助文檔。具體效果如下圖所示:
在處理復雜命令的時候argparse的強大就更明顯了,由于這個屬于Python基礎,所以Python庫中自帶的庫這里我就不做過多的介紹了。
四、實驗環境搭建測試本項目完整代碼和環境搭建、測試,可在實驗樓中查看并在線完成。
五、總結本次項目實現了Ftp弱口令掃描器,主要用到以下知識點:
Ftp服務器的基本概念
使用ftplib如何一步一步的實現Ftp弱口令掃描器
使用argparse解析命令行參數
實驗環境的搭建方法
六、參考文獻《Python絕技--運用Python成為頂級黑客》
《Python黑帽子-- 黑客與滲透測試編程之道 》
注:本系列項目教學思路,參考自《Python絕技--運用Python成為頂級黑客》,書中代碼和教學思路只做參考,本系列教程全部重新設計并基于Python3.x重寫。本系列課程旨在教大家滲透測試,維護網絡安全,如用于非法目的,自行承擔法律責任!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38107.html
閱讀 2774·2021-11-22 15:11
閱讀 3537·2021-09-28 09:43
閱讀 2889·2019-08-30 13:05
閱讀 3431·2019-08-30 11:18
閱讀 1447·2019-08-29 16:34
閱讀 1300·2019-08-29 13:53
閱讀 2908·2019-08-29 11:03
閱讀 1658·2019-08-29 10:57