DownUnderCTF 2020: fix my pc

fix my pc

500 punktów

My boss’s computer died recently. We managed to dump some of the drive, but can’t figure out a way to unlock it. Download (233MB) https://cloudstor.aarnet.edu.au/plus/s/lIZ7mV36US93DhA

Rozwiązanie

Zaczynamy z archiwum rescue.zip, które zawiera dwa pliki:: system.bin oraz crash.bin

fixmypc1

Pierwszy z nich jest obrazem dysku, drugi wygląda na zrzut pamięci.
Rozpocząłem od próby podmontowania dysku.
modprobe nbd max_part=8
qemu-nbd –connect=/dev/nbd0 /<em>tmp</em>/system.bin
Niestety, okazało się, iż dysk jest zaszyfrowany.

fixmypc2

Skoro dysk jest zaszyfrowany, oznaczać to mogło jedno - należy odzyskać klucze szyfrujące ze zrzutu pamięci.
W tym celu użyłem narzędzia findaes (źródło: https://sourceforge.net/projects/findaes/)

fixmypc3

Moje podejrzenia okazały się słuszne, gdyż po chwili byłem w posiadaniu dwóch części klucza.
Połączyłem je w całość i zapisałem do pliku w postaci binarnej.

echo 094e2adf58cfb17d85f0f6933f7b44efa00a3cda7bbe01873e09ff4ee7a60539ff98d76761147024ebb0c8d4e1141814214d2a83d7936609377755e5180a3c57 | xxd -r -p &gt; /tmp/key

And then tried to use it.

cryptsetup luksAddKey /dev/nbd0p2 --master-key-file /tmp/key

fixmypc4

cryptsetup luksOpen /dev/nbd0p2 rescue
lsblk
mount /<em>dev/mapper/rescue /mnt</em>

fixmypc5

Na odszyfrowanej partycji można było znaleźć trochę plików z uszkodzonymi nazwami. Ich zawartość jednakże wyglądała na kompletną, dzięki czemu znalazłem klucz do odszyfrowania kolejnej partycji.

fixmypc6

cryptsetup luksOpen /dev/nbd0p3 crypthome --key-file /mnt/etc/crypttab.d/home.key

fixmypc7

Na nowopodmontowanej partycji interesujące okazały się znajdujące się tam klucze ssh oraz plik .ash_history

fixmypc8

Użyłem więc kluczy boba aby sklonować repozytorium i przejrzeć jego zawartość.
export GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i /mnt2/bob/.ssh/id_rsa"
git clone [email protected]:cornochips/configs
cd configs

fixmypc9

Zawartość plików nie wydawała mi się szczególnie ciekawa, wyglądała jak randomowe znaki. Natomiast, gdy zajrzałem w git diff…

for i in `git log --all --oneline | awk -F ' ' '{print $1, $8}'`; do git diff ${i}; done

fixmypc10

DUCTF{aTl3astIhadAB3ck8py4n63xOVX4A}

fixmypc11