John笔记
简述
一款免费、开源的暴力密码破解器,它有多平台版本,支持目前大多数的加密算法,如DES、MD4、MD5等。该软件破解密码方式简单而粗暴,理论上只要时间上面允许,该软件可以破译绝大多数用户密码。John the Ripper免费的开源软件,支持目前大多数的加密算法,如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目的是破解不够牢固的Unix/Linux系统密码。
在 Debian 系的 Linux 中可以使用 apt install john
获取。
同时也可以在官网中获取原代码版本和发行版。
需要注意的是,john 时常需要与 *2john
软件配合使用,一般是将密码转换为 hash 值,而这类软件需要从官网中的发行版中获取。
安装
在官网 https://www.openwall.com/john/
中,我们可以选择 Windows 二进制版,里面已经包含了 *2john
和
john
的二进制构建或者 python 脚本。
如果是选择了下载源码,可能需要使用 make 指令自动化编译。
一个小建议,将下载的 Windows 二进制版本文件夹中的 run
文件夹(存放 *2john
和 john
的二进制构建或者
python 脚本的文件夹)加入环境变量中,这样可以随时随地调用。
使用
破解模式
John 支持四种密码破解模式:
- 字典模式 → 在这种模式下,用户只需要提供字典和密码列表用于破解。
- 单一破解模式 → 这是john作者推荐的首选模式。John会使用登录名、全名和家庭通讯录作为候选密码。
- 递增模式 → 在该模式下john会尝试所有可能的密码组合。这是最具威力的一种。
- 外部模式 → 在这种模式下,用户可以使用 john
的外部破解模式。使用之前,需要创建一个名为
(
list.external:mode
) 的配置文件,其中 mode 由用户分配。
命令参数
参数 | 作用 |
---|---|
–single |
single crack 模式,使用配置文件中的规则进行破解 |
–wordlist=FILE–stdin |
字典模式,从 FILE或标准输入中读取词汇 |
–rules |
打开字典模式的词汇表切分规则 |
–incremental[=MODE] |
使用增量模式 |
–external=MODE |
打开外部模式或单词过滤,使用 [List.External:MODE] 节中定义的外部函数 |
–stdout[=LENGTH] |
不进行破解,仅仅把生成的、要测试是否为口令的词汇输出到标准输出上 |
–restore[=NAME] |
恢复被中断的破解过程,从指定文件或默认为 $JOHN/john.rec 的文件中读取破解过程的状态信息 |
–session=NAME |
将新的破解会话命名为 NAME,该选项用于会话中断恢复和同时运行多个破解实例的情况 |
–status[=NAME] |
显示会话状态 |
–make-charset=FILE |
生成一个字符集文件,覆盖 FILE 文件,用于增量模式 |
–show |
显示已破解口令 |
–test |
进行基准测试 |
–users=[-]LOGIN |
UID[,…] |
–groups=[-]GID[,…] | 对指定用户组的账户进行破解,减号表示反向操作,说明对列出组之外的账户进行破解。 |
–shells=[-]SHELL[,…] | 对使用指定 shell 的账户进行操作,减号表示反向操作 |
–salts=[-]COUNT | 至少对 COUNT 口令加载加盐,减号表示反向操作 |
–format=NAME | 指定密文格式名称,为 DES/BSDI/MD5/BF/AFS/LM 之一 |
–save-memory=LEVEL | 设置内存节省模式,当内存不多时选用这个选项。 LEVEL取值在 1~3 之间 |
实例
一般来说,我们使用 John 自带的脚本将加密文件转换为哈希值后再进行爆破
使用字典爆破密码
1 | john --wordlist=password.lst hash.txt |
OSFP
使用嗅探工具获取 net-md5 哈希值
1 | ettercap -Tqr ospf.pcapng |
随后进行指定爆破
1 | john hash.txt --format=net-md5 --wordlist=password_dict.txt --force |
注意
Python 3.9 版本 xml 库将生成迭代器的函数删去,改为 iter
获取,故一部分 John 脚本运行时会出现错误,故需要进行代码更改。
office2john.py 错误
这是一个旧版本错误,在最新版本的 John 中已经修改。
在第 2857 行中,office2john.py
使用
xml.etree.ElementTree
对象进行读取操作,需要注意的是在
Python3.9 版本以前,使用 getiterator
获取迭代器,而
Python3.9 版本删去了这一函数,改为了使用 iter
函数获取迭代器,故需要将此行进行变更。
旧代码如下:
1 | # old code |
需要更改为:
1 | # new code |