Crack the Vault

Задание

Старый терминал убежища требует пароль для входа. Наши разведчики нашли данные, которые могут помочь тебе получить к нему доступ, но не спеши радоваться: это только начало…

Решение

Подключение для выполнения данного задания происходит по Netcat.

Для выполнения задания был дан дан файл database.txt:

raider		09053dbc39a10cab79b0c0d5b1bb2793cad99291245ea4c0fcb953cffb7bb644
user		04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb
overseer	4b737a6e020152523b615f610a579378a852ede9d16f067a069d0b06d590d39f
dweller		2c2d994080247ee0f9b88ad20c99ae604ae86bfbf91c1971506eba11abc0c874
test		9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

При подключении к сервису пользователю доступно такое меню:

ROBCO INDUSTRIES UNIFIED OPERATING SYSTEM
COPYRIGHT 2075-2077 ROBCO INDUSTRIES

Press any key to start


Welcome to ROBCO Industries (TM) Termlink
Login required
Attempts Remaining: [][][]
Login:
>

Легко догадаться, что для выполнения задания даны хеши паролей пользователей. Далее необходимо отпределить тип хеша. Это можно сделать с помощью различных сервисов, например, этого. В данном задании был использован SHA256.

Далее необходимо определиться, какие пользователи есть в системе. При попытке входа под пользователями raider, overseer и dweller возвращается сообщение “Invalid password”, а при попытках входа под пользователями user и test - сообщение “Invalid login”. Исходя из этого, можно сделать вывод о том, что есть смысл подбирать пароли только для пользователей raider, overseer и dweller.

Login:
>overseer
Password:
>
Invalid password
Login:
>user
Password:
>
Invalid login

Сначала попробуем имя пользователя как пароль. Заметим, что для пользователей raider и dweller пароли совпадают с именами пользователей.

hacker@hacker:~$ echo 'raider' | sha256 -x
09053dbc39a10cab79b0c0d5b1bb2793cad99291245ea4c0fcb953cffb7bb644

raider		09053dbc39a10cab79b0c0d5b1bb2793cad99291245ea4c0fcb953cffb7bb644
hacker@hacker:~$ echo 'dweller' | sha256 -x
2c2d994080247ee0f9b88ad20c99ae604ae86bfbf91c1971506eba11abc0c874

dweller		2c2d994080247ee0f9b88ad20c99ae604ae86bfbf91c1971506eba11abc0c874
hacker@hacker:~$ echo 'overseer' | sha256 -x
e117fc61b613553c380b34b0ed4f7afe087008fab3d56bb7d08b825353a55d5c

overseer	4b737a6e020152523b615f610a579378a852ede9d16f067a069d0b06d590d39f

При входе под учетной записью пользователя raider сервис блокируется.

Login:
>raider
Password:
>raider
Access denied
Terminal locked

При входе под учетной записью пользователя dweller пользователю доступно меню:

1 - System Info
2 - Available Resources
3 - Inventory
4 - Log Out

Раздел System Info содержит следующие данные:

Robco Industries(TM) MF Boot Agent v2.3.0
RETROS BIOS
RBIOS-4.02.08.00 52EE5.E7.E8
Copyright 2075-2077 Robco Ind.
Uppermem: 64 KB
Root (5A8)
Maintenance Mode

RSA public key:
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArpjYLAHWE+nqIqCF5y7D
8UGqe6p1LKhazxsEBAWNqPw5FjBcDoyyuCefNg5LQlrfckJs82woz9GcJLqtKlLs
XxZ3rtEvBoE4ToU2mqkkYPcb/3btriPjTeDpf0FMH9NEf+OAfHy2yLObA18fPjil
mQEw3YMW5z0iLxWqA1WDFK80kjKmQZ7HJNjuP+Pou7IH4XTUw8vTCDe9DkoPg86o
DMxAtWU4stW6LtKdwGieWYxO4SGp3zSFFAaklbrcRiUFktzF9+FwQZXzpsvA5CCd
CrcA9Dr+ruI/HYj66xO4FTkFmyk2IhO1w7KBK/CidlDRtY+DZUGc3VszHZcB15Nw
xT73WUDY3Ok029UXRTCMkxGIJ/GXomU4HeBRd28JjNHJg8m9Uy82/3J17odR++La
ganEuj3nHwOV1lo3BbMhKFI7OZccPLgdZ8yb7IYvHHtIG3Mt3hGUccoeZkRSR0D9
gsDEFv9Yx3qCtfEA3ccGaKmMSZMW26UX19U693R8XMsr8p+fPc1EN0ctzzU7+F/I
VdGIZic2O86sx4h7PWG0QzUMq3SeadMHxjYwVO03avFmpArR19BPKzNBWrB2LbjE
EE4fjSRKXXq7UPXbwmK7Bw+EBfRouRVY3cGdXDHrqw6mw3o4HfAS6IWZhcyTpRjC
64x1xqs8Vk7+DetB3lCTmuUCAwEAAQ==
-----END PUBLIC KEY-----

При этом разделы Available Resources и Inventory недоступны пользователю:

1 - System Info
2 - Available Resources
3 - Inventory
4 - Log Out
>2
Access denied

1 - System Info
2 - Available Resources
3 - Inventory
4 - Log Out
>3
Access denied

Таким образом, делаем вывод о том, что необходимо найти пароль для пользователя overseer. Для подбора пароля необходимо было использовать словарь rockyou. В данном случае воспользуемся hashcat. Команда для запуска и результат подбора приведены ниже.

hashcat -m 1400 hash rockyou.txt
...
4b737a6e020152523b615f610a579378a852ede9d16f067a069d0b06d590d39f:ironbook748

Авторизовавшись с найденными данными, можно получить доступ к ранее закрытым разделам. Раздел Available Resources просто генерирует случайное количество ресурсов по номеру убежища:

Enter Vault number
>102

Vault 102
Power: [########            ]
Food:  [#################   ]
Water: [####################]

В разделе Inventory доступно еще одно подменю:

1 - Avaliable inventory
2 - Item Reference Guide
3 - Exit

В подразделе Avaliable inventory выводится список доступных предметов, а в Item Reference Guide содержатся описания этих предметов.

Enter Vault number
>100

Vault 100
RadAway: 69
Stimpak : 63
Nuka-Cola: 26
Vault jumpsuits: 14
Flag: 1
Power armor: 55
Raider armor: 17
Laser pistol: 35
Hunting rifle: 87
Enter item name or e to exit:
>RadAway

RadAway is a chemical solution that bonds with radioactive particles and removes them from the user's system. While Rad-X is designed to increase the body's natural resistance to radiation, RadAway is designed to be used after exposure. It is administered intravenously, using an IV bag or syringe, and is one of the only ways to remove accumulated irradiation. As such, it's a major trade good for places that can manufacture it, such as Vault City.

Заметим, что пользователю доступен Flag в количестве 1 штуки.

Flag: 1

Попробуем получить описание этого предмета:

Enter item name or e to exit:
>Flag

This section is encrypted with RSA PKCS1.
You need a private key to decrypt it.

aQOkMOPezxukE5a0vSn2ARB7EBfHQLwr07Nc/DyVM2EAp89WaS0R3Cn+wHNDRWNGwWtvgWm22MOkmFxg4zO0Wn9Z2/1SHDMG81noyocHF+Mbl8hOWD2YG/crOx8ANRLv8MKKrRnIQXlt6AcwstXdKB3SofQuOqZMTy45NVBSBjbN8nC1hzoGgITkKX516w3qShLh/pDA3cx38G79hKfYzVo7dkA1NRISlFxKEJ2UToQ2C8gj+59ViFt4sFFoTDw0ftWQethaGQzo2mtR9+E/voPLNd8bt4hEWE7RoZ/0gt8czzTrDBmgAG8JFojK0ZLe/wyKDmoaUfvowbnvOqgELybD6LhuEUXx7V4Y6uKiCiAICGOUs4CzzNVw8RdLes5XtGbrLAKypbjm8CLMh5+pAJxCdeYQNoice3mb5z4ejtNYWakGZme9niojKaUQJFLbPV3887qM0c6+w7DvMjiayW2hN/sMez/KTCv1anAbXjh+H7in92X1/JqCOu9z1UcDJwfiOokIVh2caXmRLDFzQ62+SBpTlscoM0UAxvhn+hX6judEQPjCTkR6nXES8dKu+UzZ/NO/OZVeycylESRhuho3ZAMPRuI6b+H6e1MnKBlbFbOnAZ5K+Thp60nLw0NrQLU7hdr74TdRrC631f1r5rfKvgUjv51RW79sm8I6vJU=

Видим, что данный раздел зашифрован с помощью RSA, и нам нужен закрытый ключ для его расшифровки, которого у нас нет. Вспомним, что в разделе System Info дан открытый ключ RSA. Таким образом, задача сводится к восстановлению закрытого ключа по открытому. Для этого используем инструмент RsaCtfTool.

Предварительно сохраним открытый ключ в файл public и запустим восстановление закрытого ключа:

hacker@hacker:~$ RsaCtfTool/RsaCtfTool.py --publickey public --private
['public']

[*] Testing key public.
attack initialized...
attack initialized...
[*] Performing pastctfprimes attack on public.
[+] Time elapsed: 0.0011 sec.
[*] Performing mersenne_primes attack on public.
 35%|████████████████████▊                                      | 18/51 [00:00<00:00, 315889.00it/s]
[+] Time elapsed: 0.0065 sec.
[*] Performing nonRSA attack on public.
[+] Time elapsed: 0.0191 sec.
[*] Performing lucas_gcd attack on public.
100%|████████████████████████████████████████████████████████| 9999/9999 [00:00<00:00, 52120.74it/s]
[+] Time elapsed: 0.1926 sec.
[*] Performing factordb attack on public.
[*] Attack success with factordb method !
[+] Total time elapsed min,max,avg: 0.0011/0.1926/0.0548 sec.

Results for public:

Private key :
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

Теперь у нас есть закрытый ключ, сохраним его в отдельный файл. Можно приступать к расшифровке раздела. Для этого будем использовать утилиту openssl. Заметим, что данные в зашифрованном разделе представлены в base64. Для дешифровки с помощью openssl необходим файл в бинарном виде. Предварительно сохраним информацию из зашифрованного раздела в файле base64. С помощью команды приведенной ниже выполним преобразование:

hacker@hacker:~$ openssl base64 -d -in base64 -out encrypted_file

Далее расшифруем данные с помощью команды, приведенной ниже, и получим искомый флаг.

hacker@hacker:~$ openssl pkeyutl -decrypt -inkey private -in encrypted_file -out decrypted_file
hacker@hacker:~$ cat decrypted_file
ptech2024{f02d883960c76d4bd3b9f591d3dcce564fb6b072}