利用Python破解Linux加密口令

2025-5-16 87 5/16

利用Python破解Linux加密口令

环境准备

1、kali linux

2、python2.7(kali自带)

破解原理

在linux中所有用户密码都存放在/etc/shadow中,存放的密码是经过不可逆加密的,可以通过python2中的crypt库来模拟linux加与/etc/shadow中的密文匹配从中得到密码

破解步骤

1、查看/etc/shadow文件

利用Python破解Linux加密口令

可以得到用户的密码字段为

$y$j9T$BvSJpt3Ggus.qCEu7B50M0$kVb6TwLhLvNbCjx8NejCoIlxSJpN.WRKhFyccEfbER9

密码部分格式:$id$salt@encryped

  1. id是指用的哈希算法,id为1是MD5加密,id为6是SHA-512,上述看到的y为yescrypt算法(这些算法都是不可逆的,即不存在解密程序)
  2. salt为盐值(盐值是为了增强密码的安全性)
  3. 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()

效果如下:

利用Python破解Linux加密口令

- THE END -
Tag:

5月16日15:14

最后修改:2025年5月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论