首页 > 代码库 > 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文件破解