Python暴力破解Mysql数据的示例


Posted in Python onNovember 09, 2020

今天来分享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 tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
python负载均衡的简单实现方法
Feb 04 Python
python ddt实现数据驱动
Mar 14 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
PyTorch基本数据类型(一)
May 22 Python
用django设置session过期时间的方法解析
Aug 05 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
Python lambda表达式原理及用法解析
Aug 18 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 Python
python 实现一个图形界面的汇率计算器
Nov 09 #Python
python 读取串口数据的示例
Nov 09 #Python
Cpython解释器中的GIL全局解释器锁
Nov 09 #Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 #Python
基于python爬取梨视频实现过程解析
Nov 09 #Python
Python eval函数介绍及用法
Nov 09 #Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 #Python
You might like
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
js实现表格数据搜索
2020/08/09 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
Python正则表达式介绍
2012/08/06 Python
python中Genarator函数用法分析
2015/04/08 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
浅析Python __name__ 是什么
2020/07/07 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
Python 如何创建一个线程池
2020/07/28 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
铭万公司.net面试题笔试题
2014/07/20 面试题
2014全国两会心得体会
2014/03/17 职场文书
国窖1573广告词
2014/03/21 职场文书
植树造林的宣传标语
2014/06/23 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
花木兰观后感
2015/06/10 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
2022漫威和DC电影上映作品
2022/04/05 欧美动漫