linux密码暴力破解机

linux 密码保存在

/etc/shadow

 

shadow 文件的保存格式

python:$6$mWSyC6Pv$hpMreQT77R9ML/Xx1QnRAow1tUTDjIowaTssV7bZw9S44FXYd93kfrFQ8Y2vpj/bQfrub/Q.Z6XkYDt4gAUBE0:17514:0:99999:7:::

 

加密格式:

{用户名}:{加密后的口令密码}:{口令最后修改时间距原点(1970-1-1)的天数}:{口令最小修改间隔(防止修改口令,如果时限未到,将恢复至旧口令):{口令最大修改间隔}:{口令失效前的警告天数}:{账户不活动天数}:{账号失效天数}:{保留}

密码域密文也是由三部分组成的,即:$id$salt$encrypted。

id为1时,采用md5进行加密;

id为5时,采用SHA256进行加密;

id为6时,采用SHA512进行加密。

在python中有一个crypt 模块可以进行密码计算,而且不用我们担心加密方式是什么。

crypt 方法接收两个参数,第一个是需要加密的明文,第二个参数是 salt.

linux salt 为 $6$mWSyC6Pv$ 形式 其中6表示加密方式 sha512

>>> import crypt
>>> crypt.crypt('sdssdd','$6$mWSyC6Pv$')
'$6$mWSyC6Pv$8AhSQcqAsoGsMIFHnLhvCRf4cg5gWvPHhWtliw39yIGUYwK5uODO6bzL7GUxD.X.U5N14m3MA0Pikf5fsyO0/'
>>> 
>>>

 

shadow 只有超级用户才有权限查看,所以拷贝出来的shadow文件需要修改权限

chmod 755 shadow

 

 

代码实现

import crypt

def testPass(cryptPass):
    salt = cryptPass[0:12]  # 获取加密方式以及密码盐
    try:
        dictFile = open('dictionary', 'r')  # 打开密码字典
        try:
            for word in dictFile.readlines():
                word = word.strip('\n')
                cryptWord = crypt.crypt(word, salt)  # 将字典中读取的铭文密码通过加密与shadow密码进行判断
                if cryptWord == cryptPass:
                    print('[+] Found Password: ' + word + "\n")
                    return
            print('[-] Password not Found.\n')
            return
        except:
            dictFile.close()
    except:
        print('[-] dictionary 文件无法打开')
        exit(0)



def main():
    try:
        passFile = open('shadow') # 打开shadow文件
        try:
            for line in passFile.readlines(): # 一行一行读取
                if ":" in line:
                    user = line.split(':')[0]   # 利用 : 分隔 获取用户名
                    cryptPass = line.split(':')[1].strip(' ') #去掉前后空格
                    print('[*] Cracking Password For : ' + user)
                    testPass(cryptPass)
        except:
            passFile.close()
    except:
        print('[-] shadow 文件无法打开')

if __name__ == '__main__':
    main()

 

posted @ 2018-04-25 09:23  地球守卫者  阅读(1772)  评论(0编辑  收藏  举报