介绍
某社区组织停用了员工门户。在一次事件演练中,一份合成的旧密码导出文件出现了,而当前员工档案服务仍在运行。请确认提供的候选实际能够恢复哪些密码,并保留旧记录与人员之间的对应关系。
你将使用正常运行的档案服务,在 Kali Linux 中运行 John the Ripper,并制作私密的恢复清单。所有身份均为虚构。审计与目标容器相互隔离,共享一个 VM 内核。范围仅限提供的文件和服务;无需安装软件或编程。
前置要求是能够输入终端命令并识别路径。本实验会解释所用选项和文件操作。预计约需 45 分钟,包括阅读和普通错误处理;这是作者估计。下一节引导实验有独立环境,用来检查当前影响。
使用档案服务并保护结果
在这一步中,你将在调查导出文件之前观察正常访问。打开 Auditor。终端以 auditor 身份进入 Kali 审计容器,位于 /home/auditor/project。档案服务运行在另一个容器中。
SSH 是一种加密的远程登录协议。这个档案服务接受密码,并且只返回认证成功的账户名,不提供通用 shell。先使用不含敏感信息的演示账户。-p 选择服务端口。两个 -o 选项选择准备好的服务器密钥文件,并要求密钥匹配。主机密钥识别服务器,密码验证你的身份。最后的 whoami 请求返回远端账户名。
ssh -o UserKnownHostsFile=/etc/reuse/known_hosts -o StrictHostKeyChecking=yes -p 12222 demo@staff-archive whoami
看到 demo@staff-archive's password: 时,输入 welcome-7 并按 Enter。密码字符不会显示。预期先出现 demo,随后返回本地提示符。不要把密码作为 shell 命令输入。输入错误时,按 Ctrl+C,再执行 SSH 命令。连接或主机密钥错误不代表凭据被拒绝;不要禁用主机密钥检查。
读取授权范围。cat 显示文件;相对路径从当前目录开始。inputs 中是只读原始文件。
cat inputs/scope.tsv
以制表符分隔的列为 employee_id、current_login、host 和 port。只允许测试 staff-archive:12222 上列出的当前身份,以及 demo。不要猜测额外的用户名、主机或候选列表。
即使在演练中,恢复的密码也是敏感信息。umask 077 会从当前终端会话中新建的文件移除组和其他用户的访问权限。mkdir -m 700 创建只有所有者能够进入的目录。分别运行:
umask 077
mkdir -m 700 findings
findings 是可写结果区域。如果重连时它已经存在,请保留它;新会话中重新执行 umask 077。相对路径出错时,用 pwd 查看当前目录,用 cd /home/auditor/project 返回。整个审计过程中保留所有输入文件、档案账户及其当前密码。
恢复提供的字典匹配项
在这一步中,你将用五个候选测试四个真实密码哈希。哈希是由密码单向派生的值。离线恢复按照已存储的设置计算候选哈希并比较,不会解密密码,也不会登录档案服务。
留在 Auditor 的 /home/auditor/project。分别读取两个小型输入文件:
cat inputs/legacy.txt
cat inputs/candidates.txt
旧记录的每一行是 record_id:hash。$6$ 表示 SHA-512 crypt。存储值中包含盐,使相同密码产生不同的存储值。始终保留每个记录标识符。这个小型合成字典是为了让练习快速完成;其速度不能估计生产环境密码的强度。
John 的 --format=sha512crypt 选择该格式;--wordlist 读取提供的候选。pot 文件保存恢复出的哈希与密码对。--pot 选择私密文件,避免使用共享默认文件。--session 选择本次运行的恢复与日志位置。OMP_NUM_THREADS=2 仅限制本条命令的工作线程数。这些路径不含空格,因此无需引号。
OMP_NUM_THREADS=2 john --format=sha512crypt --wordlist=inputs/candidates.txt --pot=/home/auditor/project/findings/audit.pot --session=/home/auditor/project/findings/recovery inputs/legacy.txt
等待提示符返回。预期恢复三个哈希;时间和顺序可能不同。重复运行时,No password hashes left to crack 可能表示 pot 中已有结果,而非输入为空。--show 读取保存的结果,不会再次启动恢复:
john --show --format=sha512crypt --pot=/home/auditor/project/findings/audit.pot inputs/legacy.txt
预期看到以下对应关系,顺序可以不同:
portal-17:cedar42
portal-23:pebble7
portal-41:birch81
3 password hashes cracked, 1 left
导出实际输出。> 将标准输出重定向到文件;重复执行会替换该结果文件,不会编辑原始哈希。
john --show --format=sha512crypt --pot=/home/auditor/project/findings/audit.pot inputs/legacy.txt > findings/recovered.txt
cat findings/recovered.txt
导出结果必须保留记录标识符与恢复的密码。路径拼写错误时,修正后重跑受影响的命令。如果结果文件可被其他用户读取,chmod 600 findings/recovered.txt 可恢复为仅所有者可读写;其他结果文件也可采用同样的修复方式。不要把 pot 或明文导出文件当作事件摘要分享。
保留身份对应关系与不确定性
在这一步中,你将制作不含密码的恢复清单。留在 Auditor,读取旧人员表:
cat inputs/legacy-roster.tsv
它将 record_id 对应到稳定的 employee_id 和显示名称。有两个人都叫 Morgan Rivera:portal-17 属于 E101;portal-41 属于 E103。不能靠姓名把旧记录安全地对应到当前登录名。
这里的 recovered 表示原始哈希匹配了一个提供的候选。not-recovered 表示在这次已经完成、范围有限的运行中没有候选匹配。它不意味着密码强、账户安全、账户不存在或没有复用。目前每条记录在当前服务中是否会被接受都还未知。
创建 findings/recovery.tsv,包含 record_id、employee_id、recovery 三列。printf 将 \t 解释为制表符,将 \n 解释为换行。单引号让这些序列保留到 printf 读取时再解释;> 创建或替换这份不含密码的清单。
printf 'record_id\temployee_id\trecovery\nportal-17\tE101\trecovered\nportal-23\tE102\trecovered\nportal-41\tE103\trecovered\nportal-58\tE104\tnot-recovered\n' > findings/recovery.tsv
cat findings/recovery.tsv
自检四条记录是否各出现一次,并使用人员表中的员工 ID:三条已恢复,一条在此预算之外仍未解决。修复某个值时,修改 printf 文本后重新执行。私密 pot 和导出文件支持后续授权工作,而这份清单能在不披露密码的情况下传达结果。
总结
你使用了正常运行的 SSH 服务,通过 John 恢复了三个合成旧密码,并保留了它们的原始身份。私密结果和不含密码的清单区分了成功的离线匹配与字典耗尽后的认知边界。目前尚未证明任何恢复的密码能够访问当前员工账户。下一节引导实验将通过获准的准确凭据对作出这个独立判断。



