環境 Kali Linux ,python版本2.7.13 。
我們利用Linux系統中的 crypt 模塊模擬了Linux系統中用戶密碼的加密,在Windows中是不存在這個庫的。
在Linux系統中,用戶的密碼被加密存儲在了 /etc/shadow 文件中。
如下是 /etc/shadow中root用戶的字段
root:$6$ql1UU7ZPwONL9NzX$/bz0GQ8.Ne.zqpF.L5rqPok.Zep0ypRU1X8v.Omrqnv1k6hVDzqTS1Vezencaxltk52X94eZMT/teVHI1Jwf6.:17767:0:99999:7:::
第二個字段是密碼部分的,我們把它單獨拿出來
$6$ql1UU7ZPwONL9NzX$/bz0GQ8.Ne.zqpF.L5rqPok.Zep0ypRU1X8v.Omrqnv1k6hVDzqTS1Vezencaxltk52X94eZMT/teVHI1Jwf6.
密碼部分的格式為:$id$salt$encrypted
- id是指用的哈希算法,id為1是MD5,id為5是SHA-256,id為6是SHA-512
- salt 為鹽值
- encrypted 為hash值,這里的hash值是密碼和鹽值一起加密之后得到的
在了解了shadow 文件中密碼的加密方式之后,我們就可以開始編寫python腳本了。
在編寫之前,我們需要準備好密碼字典文件 key.txt 。只有當密碼字典足夠大時,才有可能破解出密碼。
然后我們將 /etc/shadow 文件復制到python腳本所在目錄,修改文件名為 shadow.txt
在編寫時,我們創建兩個函數:main() 和 testPass() 。main() 函數打開 shadow.txt 文件中的內容,讀取其中的用戶名字段和密碼字段cryptPass。testPass() 函數將密碼字段中的 $id$salt 提取出來賦值給 salt 。然后讀取 key.txt 中的密碼字段,賦值給 word 。再利用Linux系統中python的一個crypt庫,將word和salt一起作為參數傳進去進行加密,得到 cryptWord 。最后將cryptWord和cryptPass進行對比,如果相等,則這個word就是該用戶的密碼,否則不是。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# -*- coding: utf-8 -*- """ Created on Mon Oct 29 15:01:54 2018 @author: 小謝 """ import crypt ##導入Linux口令加密庫 def testPass(cryptPass): salt = cryptPass[cryptPass.find( "$" ):cryptPass.rfind( "$" )] ##獲得鹽值,包含$id部分 dictFile = open ( 'key.txt' , 'r' ) for word in dictFile.readlines(): word = word.strip( "\n" ) cryptWord = crypt.crypt(word,salt) ##將密碼字典中的值和鹽值一起加密 if (cryptWord = = cryptPass): ##判斷加密后的數據和密碼字段是否相等 print "[+]Found Password:" + word + "\n" ##如果相等則打印出來 return print "[-] Password Not Found.\n" return def main(): passFile = open ( 'shadow.txt' ) for line in passFile.readlines(): ##讀取文件中的所有內容 if ":" in line: user = line.split( ":" )[ 0 ] ##獲得用戶名 cryptPass = line.split( ":" )[ 1 ].strip( ' ' ) ##獲得密碼字段 print "[*] Cracking Password for:" + user testPass(cryptPass) main() |
腳本運行截圖,破解出了用戶tom和用戶xie的密碼。
以上就是Python腳本激活Linux口令(crypt模塊)的詳細內容,更多關于python破解linux口令的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/qq_36119192/article/details/83514244