利用Python破解Linux加密口令
环境准备
1、kali linux
2、python2.7(kali自带)
破解原理
在linux中所有用户密码都存放在/etc/shadow中,存放的密码是经过不可逆加密的,可以通过python2中的crypt库来模拟linux加与/etc/shadow中的密文匹配从中得到密码
破解步骤
1、查看/etc/shadow文件
可以得到用户的密码字段为
$y$j9T$BvSJpt3Ggus.qCEu7B50M0$kVb6TwLhLvNbCjx8NejCoIlxSJpN.WRKhFyccEfbER9
密码部分格式:$id$salt@encryped
- id是指用的哈希算法,id为1是MD5加密,id为6是SHA-512,上述看到的y为yescrypt算法(这些算法都是不可逆的,即不存在解密程序)
- salt为盐值(盐值是为了增强密码的安全性)
- encrypted为hash值,hash值是通过盐和明文密码通过指定算法计算得来的
2.通过编写脚本来计算
知道/etc/shadow结构后,就可以来进行脚本编写。由于这里是要爆破密码,所以需要用到字典,字典决定破解的成功率,当然也可以让python实时生成明文字符串,可这样执行的效率会大大降低
首先创建一个文件用于存放密码明文,有现成的也可以直接使用,需包含正确的密码:
┌──(kali㉿kali)-[~/Desktop/python]
└─$ cat pass.txt
root
administrator
admin
123456
kali
123
321
admin@123
password
P@ssw0rd
┌──(kali㉿kali)-[~/Desktop/python]
└─$ sudo cp /etc/shadow ./shadow.txt #将密码复制一份用于读取文件
import crypt
def tryPass(cryptPass): #用于破解密码
salt = cryptPass[cryptPass.find("$"):cryptPass.rfind("$")] #find查找第一个$的位置,rfind查找最后一个,提取id和盐
dictFile = open('pass.txt','r') #打开密码字典
for word in dictFile.readlines(): #变量.readlines()逐行读取文件
word = word.strip("\n")
cryptWord = crypt.crypt(word,salt) #明文和盐一起进行加密
if(cryptWord == cryptPass): #比对结果,成立这代表密码正确
print("Found Password:" + word + "\n")
return 0
print("Password Not Found")
return 0
def main(): #用于读取shadow数据,将用户密码部分提交给破解脚本
passFile = open('shadow.txt','r')
for line in passFile.readlines():
if ":" in line:
user = line.split(":")[0] #获得用户名
cryptPass = line.split(":")[1].strip(' ') #获得密码字段
print("Cracking Password for:" + user)
tryPass(cryptPass)
main()
效果如下:
- THE END -
最后修改:2025年5月16日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://guofun.top/python/python%e8%84%9a%e6%9c%ac%e5%ad%a6%e4%b9%a0/670/
共有 0 条评论