Python爆破shadow文件密码脚本(简化版)

原理

加密算法(明文,盐值) = 密文

上面是shadow文件中密码的加密公式,我们可以用Python中的crypt()函数进行上述运算,如果得出的密文与原来的一致,说明密码爆破成功。

关于盐值和shadow文件的字段详解,请移步我的这篇博客:用户、权限和组

步骤

查看shadow文件的root用户的字段:

在这里插入图片描述

将root用户的字段复制出来,赋给一个变量shadow_line:

shadow_line="root:$y$j9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA43uFhdrtt4ZfbmiZjkZFYve2:18711:0:99999:7:::"

从shadow文件中,提取密码密文:

用split()函数分割,指定分隔符为:,取第二段字符串

crypt_text=shadow_line.split(":")[1]

从密码密文中,提取盐值:

rindex()函数从右取指定符号,输出它所在的位置

salt=crypt_text[0:crypt_text.rindex("$")]

从密码字典中,读取密码,这里没有密码字典,直接给一个值:

password="root"

将读取的密码与盐值进行加密运算,得到猜测的密码密文:

new_crypt_text=crypt.crypt(password,salt)

将得出的密码密文与原来的做对比,如果一致,说明密码猜对了:

if new_crypt_text == crypt_text:
	print(f"[+] password found:{password}"")
else:
	print(f"[+] password not found!")

将这些代码组成完整代码,放到一个pj.py文件中:

import crypt
shadow_line="root:$y$j9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA43uFhdrtt4ZfbmiZjkZFYve2:18711:0:99999:7:::"
print(f"[+] The shadow line is {shadow_line}")

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="root"
new_crypt_text=crypt.crypt(password,salt)

if new_crypt_text == crypt_text:
	print(f"[+] password is {password}"")
else:
	print(f"[+] password not found!")

执行该文件,破解出密码是root:
在这里插入图片描述

你可能感兴趣的:(Python,网络安全,python,开发语言)