今天来分享 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 的正方形窗口,位置为 x 轴 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))