[TOC]

什么是john

John the Ripper 是一款大受欢迎的、免费的开源软件。也是一个基于字典的快速破解密码的工具,是一款用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法,如 DESMD4MD5 等。 John the Ripper 支持字典破解方式和暴力破解方式。它支持多种不同类型的系统架构,包括 UnixLinuxWindowsDOS 模式、 BeOSOpenVMS ,主要目的是破解不够牢固的 Unix/Linux 系统密码。

john一般是kali自带。

john参数表

john 命令的具体参数选项如下表:

选 项 描 述
–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 之间

etc/passed和etc/shadow文件

首先要知道 /etc/passwd文件和 /etc/shadow文件

/etc/passwd文件格式

1
2
3
4
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin

上面数据为passwd文件的一个片段,我们可以发现每一行都被分号分为了7部分。这七部分分别为:

  1. 用户名
  2. 密码(passwd文件人人可读,所以不放明文密码,真正的密码在/etc/shadow文件中)
  3. uid
  4. gid
  5. 用户注释
  6. 主目录
  7. 登陆的shell类型(bash/zsh/sh等)

/etc/shadow文件格式

1
root:$6$f0EotKbw$sLAujh0EleiXNAuoph20iL517cXlcExWLATwz3xgCEyYlsIECUa9nuDdiT5/ntWfJDfxFhYGcMknkCq5Awgf20:15118:0:99999:7:::

也是被分号隔开格式为:

1
2
3
4
5
6
7
8
用户名
密码,其中\$6\$是表示一种类型标记为6的密码散列suans fa,这里指SHA-512哈希算法,1 代表 MD5,5 代表 SHA-256,6 代表 SHA-512,salt 表示密码学中的 Salt, 系统随机生成 encrypted 表示密码的 hash,其中f0EotKbw为salt。
“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。
“最小时间间隔”指的是两次修改口令之间所需的最小天数。
“最大时间间隔”指的是口令保持有效的最大天数。
“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

爆破linux用户密码实例

利用 unshadow 组合 /etc/passwd/etc/shadow 两个文件

unshadow 命令会将 /etc/passwd 的数据和 /etc/shadow 的数据结合起来,创建 1 个含有用户名和密码详细信息的文件。

我们可以通过以下命令将这两个文件结合起来:

1
2
cd ~
sudo unshadow /etc/passwd /etc/shadow > test_passwd

使用 John the Ripper 破解 Linux 用户登录密码

我们这时候还需要一个字典,由于 John 自带了一个字典,字典位于 /usr/share/john/password.lst 。当然你也可以自行去网上选择适合你的字典。

我们可以开始对Linux登录用户名和密码进行破解:

1
john --wordlist=/usr/share/john/password.lst test_passwd

破解结果如下:

img

我们可以看到, test_passwd 文件中存在的三个用户名 roottestpython 的密码,均被破解了。

我们可以查看破解信息:

1
john --show test_passwd

img

出现报错: UTF-8 No password hashes loaded

John the Ripper 正确使用方法
现在 John the Ripper 爆破linux的shadow文件时需要加上 --format=crypt

所以现在 John the Ripper 的使用命令为:

1
2
3
sudo john /etc/shadow --format=crypt
sudo john /etc/shadow --format=crypt --wordlist=/usr/share/john/password.lst
sudo john /etc/shadow --format=crypt --wordlist=/home/kali/Desktop/rockyou.txt

原因是,如果查看合并后的文件或者没合并使用的shadow文件,并在用户名后面看到 $y$,则表明密码已使用 yescrypt 进行哈希处理。

img