1.1 离线破解方式
1.1.1 在线md5破解
1.1.2 john命令
john是一款大受欢迎的、免费的开源软件、基于字典的密码破解工具。用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法,如DES、MD4、MD5等。John支持字典破解方式和暴力破解方式,它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目的是破解不够牢固的 Unix/Linux 系统密码。
1.2 实例:离线破解密码
1.2.1 破解md5值
1.2.1.1 准备环境
# echo "123456" | md5sum f447b20a7fcbf53a5d5be013ea0b15af -
1.2.1.2 在线开始破解
1.2.1.3 脚本破解
脚本原理:脚本把我们输入的md5值跟字典中的所有密码的md5值进行对比,结果一致则正确:
# python md5.py f447b20a7fcbf53a5d5be013ea0b15af m.txt 解密成功!密码是: 123456
1.2.2 破解Linux的shadow密码
1.2.2.1 准备环境
# scp 192.168.10.80:/etc/shadow ./ # head -1 shadow root:$6$uE6H/Ox7$sLPaHsgfFWUDI0ulSlYHr.mD88UxUbqd.diGisbjD6/LxIiX1tiTJ2jf8F5.zESn1BTX6vwfklx0G4bbCfuxI.:19199:0:99999:7:::
密码由三部分组成的: $id$salt$encrypted
- id为1时采用md5进行加密
- id为5时采用SHA256进行加密
- id为6时采用SHA512进行加密
此处id为6,则使用的是SHA512加密
1.2.2.2 使用john进行破解
# john shadow

如果默认的密码字典不能够满足需求,使用下面方式指定字典进行破解:
# john shadow --wordlist=m.txt

1.2.2.3 查看破解结果
# john shadow --show root:123456:19199:0:99999:7::: 1 password hash cracked, 0 left
1.2.2.4 报错解析
# john shadow Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA256" Use the "--format=HMAC-SHA256" option to force loading these as that type instead Using default input encoding: UTF-8 Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 512/512 AVX512BW 8x]) No password hashes left to crack (see FAQ )
这是告诉我们已经破解成功了,不需要再破解了,若要再次破解可以删除用户家目录下的.john目录后再进行破解。
1.3 md5破解脚本
1.3.1 原始字符加密
1.3.1.1 带换行符加密
# echo "123456" | md5sum f447b20a7fcbf53a5d5be013ea0b15af -
1.3.1.2 不带换行符加密
# echo -n "123456" | md5sum e10adc3949ba59abbe56e057f20f883e -
1.3.2 破解脚本
1.3.2.1 原始加密字符串中存在换行
# -*- coding:utf-8 -*- import hashlib import sys def get_cmd5(md5str): m1 = hashlib.md5() m1.update(md5str.encode("utf-8")) result = m1.hexdigest() return result def get_file_lines(filename): with open(filename) as f: line_list = f.readlines() return line_list lines = get_file_lines((sys.argv[2])) encode_str = (sys.argv[1]) for line in lines: if encode_str == get_cmd5(line): print("解密成功!密码是: "+line) break else: continue
1.3.2.2 原始加密字符串中不存在换行
# -*- coding:utf-8 -*- import hashlib import sys def get_cmd5(md5str): m1 = hashlib.md5() m1.update(md5str.encode("utf-8")) result = m1.hexdigest() return result def get_file_lines(filename): with open(filename) as f: line_list = f.readlines() return line_list lines = get_file_lines((sys.argv[2])) encode_str = (sys.argv[1]) for line in lines: line = line.strip() if encode_str == get_cmd5(line): print("解密成功!密码是: "+line) break else: continue

我的微信
如果有技术上的问题可以扫一扫我的微信