【问题标题】:OS X Password Bruteforce in PythonPython 中的 OS X 密码暴力破解
【发布时间】:2014-08-23 04:04:44
【问题描述】:

我有几年前的旧 macbook,我不记得确切的密码,但我确实记得当时密码中的一些字符,所以我想我可以使用一个版本的一个现成的脚本。问题是,当我使用示例中的字符串测试“密码”的哈希值时,我得到的值与提供的哈希值不同。因此,我将永远无法获得我的旧密码。这是从http://pastebin.com/Gv6VxEZ7拉取的相关代码

#Should be 8 characters of salt + sha hash for "password" if I'm understanding this correctly
digest = "33BA7C74C318F5D3EF40EB25E1C42F312ACF905E20540226"
salt = "33BA7C74"
sha1 = "C318F5D3EF40EB25E1C42F312ACF905E20540226"

try:
    salt_hex =  chr(int(salt[0:2], 16)) + chr(int(salt[2:4], 16)) + chr(int(salt[4:6], 16)) + chr(int(salt[6:8], 16)) # CONVERT SALT TO HEX

check("password", salt_hex, salt)

def check(password,salt_hex, salt): # HASH PASS AND COMPARE

    if not password.startswith("#!"): #IGNORE COMMENTS
            sha1_guess = hashlib.sha1(salt_hex+password).hexdigest()
            print("Trying with salt_hex " + password)
            print sha1_guess.upper()
            print "\n"
            sha1_guess = hashlib.sha1(salt+password).hexdigest()
            print("Trying with salt " + password)
            print sha1_guess.upper()
            print "\n"
            if sha1 in sha1_guess.upper():
                    print("Cleartext password is : "+password)
                    exit(0)

很遗憾,这两次尝试的输出都不正确

$ python sha_crack.py

正在尝试破解... 33BA7C74C318F5D3EF40EB25E1C42F312ACF905E20540226

尝试使用 salt_hex 密码 9D8F0A15CF344F7FB35A1918AA0636A025261627

尝试使用盐密码 E105192888CC1C34B7535AAA0425EC06F653A1B9

我正在测试的文章表明此哈希用于“密码”

http://www.defenceindepth.net/2009/12/cracking-os-x-passwords.html

【问题讨论】:

  • 不完全确定这是一个真实的例子。
  • 您似乎放弃了salt_hex+password 的猜测,没有将其与任何东西进行比较。

标签: python macos sha1


【解决方案1】:

您使用的示例哈希完全不正确。

如果我们取而代之的是JtR wiki 中提供的测试向量,我们将看到代码按预期工作(根据 Wiki,正确的密码是“macintosh”):

import binascii
import hashlib

hash = "0E6A48F765D0FFFFF6247FA80D748E615F91DD0C7431E4D9"
salt = binascii.unhexlify(hash[0:8])
sha1 = binascii.unhexlify(hash[8:])

passwords = ["123", "password", "macintosh"]
for password in passwords:
    if hashlib.sha1(salt + password).digest() == sha1:
        print "Password is \"%s\"" % password
        break

【讨论】:

  • 谢谢,我只是假设我使用了不正确的东西。永远不会猜到哈希是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多