shadow介绍
/etc/shadow,是 Linux系统中的重要系统文件,用于存储加密的用户密码,并且只有系统管理员 root 用户可以访问,防止未经授权的用户查看或者修改该文件。每一行对应每个用户(包括系统用户)的用户密码信息。
举例
test2:$6$uHoHfJtT$5JXvEfD9356G9XXUQOvzEpEzxfvghbS6qofcu9fQ8h6u.1tJW2L95jW5OaYWsyhUHMcjUkAqWCn8sg3suYuvV1:19656:6:90:30:::
冒号是分割符,格式为0:1:2:3:4:5:6:7:8,每个字段分别代表着:
0:用户名
1:密码hash值
2:密码修改距离1970年1月1日的时间
3:密码将被允许修改之前的天数(0 表示“可在任何时间修改”)
4:系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”)
5:密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”)
6:密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”)
7:该帐户被禁用的天数(-1 表示“该帐户被启用”)
8:保留供将来使用
hash值一览格式如:$id$salt$密文
id代表的是使用不同的加密算法,不同的系统使用的算法也不尽相同。salt是加密的时候需要用到盐。最后就是密文。
数字和所使用的加密算法对应关系:
![](https://img.haomeiwen.com/i13464778/12cd4d087f85419a.png)
python实现
import hashlib
import crypt
def shadow_decrypt():
shadow_line = "test2:$6$uHoHfJtT$5JXvEfD9356G9XXUQOvzEpEzxfvghbS6qofcu9fQ8h6u.1tJW2L95jW5OaYWsyhUHMcjUkAqWCn8sg3suYuvV1:19656:6:90:30:::"
print(f"[+] The shadow line is:{shadow_line}")
# 从shadow文件中,提前密码密文
crypt_text = shadow_line.split(":")[1]
print(f"[+] The crypt text is:{crypt_text}")
# 从密码密文中,提取盐值
salt = crypt_text[0:crypt_text.rindex("$")]
print(f"[+] The salt is:{salt}")
# 把读取到的密码与盐值进行加密运算,得到猜测的密码密文
password = 'Admin@1234'
new_crypt_text = crypt.crypt(password, salt)
# 如果猜测的密码密文与shadow文件中的密码密文一致,说明密码猜对了
if new_crypt_text == crypt_text:
print(f"\n[+] PASSWORD FOUND:{password}")
else:
print("[-] Password Not Found ")
if __name__ == '__main__':
shadow_decrypt()
pwd = crypt.crypt("Admin@1234", "$6$uHoHfJtT")
print(pwd, type(pwd))
运行
![](https://img.haomeiwen.com/i13464778/93c9d62c4930a8e2.png)
参考
https://www.cnblogs.com/jason-huawen/p/16300671.html
https://www.cnblogs.com/Cl0ud/p/14382258.html
https://blog.csdn.net/weixin_71090536/article/details/133207058
网友评论