Python利用crypt模块破解Linux用户密码
本文介绍如何使用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口令的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









