zoukankan      html  css  js  c++  java
  • 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('
    ')
                    cryptWord = crypt.crypt(word, salt)  # 将字典中读取的铭文密码通过加密与shadow密码进行判断
                    if cryptWord == cryptPass:
                        print('[+] Found Password: ' + word + "
    ")
                        return
                print('[-] Password not Found.
    ')
                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()
  • 相关阅读:
    codevs 2149 矩形周长
    codevs 3044 矩形面积求并
    codevs 1293 送给圣诞夜的极光
    codevs 2806 红与黑
    codevs 1536 海战
    codevs 1262 不要把球传我
    codevs 2606 约数和问题
    BZOJ 2301 problem b
    BZOJ 3994 约数个数和
    codevs 1173 最优贸易
  • 原文地址:https://www.cnblogs.com/huangguifeng/p/8939846.html
Copyright © 2011-2022 走看看