这个系列讲的是Hashcat的各种用法,现在只完成了其中一部分内容,每周更新,感兴趣的可以持续关注一下~
文章目录
Hashcat用法
哈希与加密
哈希
散列是将一些文本转换为字符串的过程,该字符串对于该特定文本是唯一的。散列是一种单向过程,这意味着无法从散列中重建原始明文。散列可用于各种目的;例如,MD5和SHA256算法通常用于验证文件完整性,而PBKDF2等算法用于在存储前对密码进行哈希处理。一些散列函数可以是键控的。一个例子是HMAC,它验证特定消息在传输过程中是否被篡改。
由于散列是一种单向过程,因此攻击它的唯一方法是使用包含可能密码的列表。此列表中的每个密码都经过哈希处理并与原始哈希值进行比较。
一种针对暴力破解哈希的保护措施是“salting”。salt 是在散列之前添加到明文中的随机数据。这增加了计算时间,但并不能完全防止暴力破解。
让我们考虑明文密码值“ p@ssw0rd ”。这个的 MD5 哈希可以计算如下:
kali@kali:~$ echo -n "p@ssw0rd" | md5sum
0f359740bd1cda994f8b55330c86d845
一些哈希函数(例如 MD5)也可能产生相同的哈希值。
加密
加密是将数据转换为原始内容无法访问的格式的过程。与哈希不同,加密是可逆的,即可以解密密文并获得原始内容。加密密码的一些经典示例是凯撒密码、培根密码和替代密码。加密算法有两种类型:对称和非对称。
对称加密
对称算法使用密钥来加密数据并使用相同的密钥来解密数据。对称加密的一个基本示例是 XOR。
kali@kali:~$ python3
Python 3.8.3 (default, December 14 2022, 11:03:12)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import xor
>>> xor("p@ssw0rd", "secret")
b'\x03%\x10\x01\x12D\x01\x01'
在上图中,明文为p@ssw0rd,,密钥为secret。任何人只要有密钥,就可以解密密文,得到明文。
kali@kali:~$ python3
Python 3.8.3 (default, May 14 2020, 11:03:12)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import xor
>>> xor('\x03%\x10\x01\x12D\x01\x01', "secret")
b'p@ssw0rd'
对称算法的其他一些示例是AES、DES和3DES,这些算法可能容易受到密钥暴力破解等攻击。
非对称加密
另一方面,非对称算法将密钥分为两部分(即公钥和私钥)。公钥可以提供给任何希望加密某些信息并将其安全地传递给所有者。然后所有者使用他们的私钥来解密内容。非对称算法的一些示例是RSA、ECDSA和Diffie-Hellman。
非对称加密的突出用途之一是HTTPS协议。当客户端连接到HTTPS网站的服务器时,会发生公钥交换。客户端的浏览器使用这个公钥来加密发送到服务器的任何类型的数据。服务器在将传入流量传递给处理服务之前对其进行解密。
识别哈希
大多数哈希算法都会生成固定长度的哈希。特定的哈希长度可用于将其映射到用于哈希算法。例如,长度为 32 个字符的哈希可以是 MD5 或 NTLM 散列。
有时,哈希以特定格式存储。例如,hash:salt
或$id$salt$hash
哈希2fc5a684737ce1bf7b3b239df432416e0dd07357:2014
是一个 SHA1 散列,其salt值为2014.
哈希$6$vb1tLY1qiY$M.1ZCqKtJBxBtZm1gRi8Bbkn39KU0YJW1cuMFzTRANcNKFKR4RmAQVk4rqQQCkaJT6wXqjUkFcA/qNxLyqW.U/
包含由$分隔的三个字段,其中第一个字段是id,即6。这用于识别哈希的算法类型。以下列表包含一些 id 及其对应的算法。
$1$ : MD5
$2a$ : Blowfish
$2y$ : Blowfish, with correct handling of 8 bit characters
$5$ : SHA256
$6$ : SHA512
Hashid
Hashid是一个Python工具,使用pip安装,可以用来检测各种哈希值。在撰写本文时,hashid可用于识别超过 200 种独特的哈希类型,对于其他类型,它会做出最大努力猜测,这仍需要一些额外的工作来缩小范围。可以在此处找到支持的哈希的完整列表。
kali@kali:~$ pip install hashid
直接通过hashid+哈希值/文件即可进行识别
kali@kali:~$ hashid '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'
Analyzing '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'
kali@kali:~$ hashid hashes.txt
--File 'hashes.txt'--
Analyzing '2fc5a684737ce1bf7b3b239df432416e0dd07357:2014'
[+] SHA-1
[+] Double SHA-1
[+] RIPEMD-160
[+] Haval-160
[+] Tiger-160
[+] HAS-160
[+] LinkedIn
[+] Skein-256(160)
[+] Skein-512(160)
[+] Redmine Project Management Web App
[+] SMF ≥ v1.1
Analyzing '$P$984478476IagS59wHZvyQMArzfx58u.'
[+] Wordpress ≥ v2.6.2
[+] Joomla ≥ v2.5.18
[+] PHPass' Portable Hash
--End of file 'hashes.txt'--
[+] MD5(APR)
[+] Apache MD5
除了能够确定哈希类型,hashid还可以使用-m
提供相应的Hashcat的哈希模式。
并不总是可以根据获得的哈希来识别算法。根据软件的不同,明文可能会经过多轮加密和salting变换,使其更难恢复。
hashid使用正则表达式对提供的哈希类型做出最大程度确定,它是通过确定哈希的来源从而缩小哈希类型的范围,Hashcat的文档提供了大量哈希示例,可以帮我们最终确定哈希模式的值。
kali@kali:~$ hashid 'a2d1f7b7a1862d0d4a52644e72d59df5:500:lp@trash-mail.com'
Analyzing 'a2d1f7b7a1862d0d4a52644e72d59df5:500:lp@trash-mail.com'
[+] MD5
[+] MD4
[+] Double MD5
[+] LM
[+] RIPEMD-128
[+] Haval-128
[+] Tiger-128
[+] Skein-256(128)
[+] Skein-512(128)
[+] Lotus Notes/Domino 5
[+] Skype
[+] Lastpass
快速浏览Hashcat示例将帮助我们确定它是 Lastpass 哈希,即哈希模式6800。