Задание 1

ls

Задание 2

ls
cat key_here.txt

Задание 3

ls -la
cat .key_here.txt

Задание 4

ls --help

Задание 5

man man

Задание 6

cd /home/student/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/cd_to_me
ls
cat key_here.txt
cd ..
pwd
cd cd_to_me
cat key_here.txt

Задание 7

cp -r dir1/* dir2

Задание 8

mv dir/* .
mv file5 file2

Задание 9

cd workdir
ls

Задание 10

cd workdir
ls
rm -rf *
ls -a
rm -rf .*

Задание 11

cat subdir_1/*/*/*/* subdir_1/*/*/* subdir_1/*/* subdir_1/* | grep key
cat subdir_2/*/*/*/* subdir_2/*/*/* subdir_2/*/* subdir_2/* | grep key
cat subdir_3/*/*/*/* subdir_3/*/*/* subdir_3/*/* subdir_3/* | grep key
cat subdir_4/*/*/*/* subdir_4/*/*/* subdir_4/*/* subdir_4/* | grep key

Задание 12

cat subdir_1/*/*/*/*/* subdir_1/*/*/*/* subdir_1/*/*/* subdir_1/*/* subdir_1/* | grep key
cat subdir_2/*/*/*/*/* subdir_2/*/*/*/* subdir_2/*/*/* subdir_2/*/* subdir_2/* | grep key
cat subdir_3/*/*/*/*/* subdir_3/*/*/*/* subdir_3/*/*/* subdir_3/*/* subdir_3/* | grep key
cat subdir_4/*/*/*/*/* subdir_4/*/*/*/* subdir_4/*/*/* subdir_4/*/* subdir_4/* | grep key
cat subdir_5/*/*/*/*/* subdir_5/*/*/*/* subdir_5/*/*/* subdir_5/*/* subdir_5/* | grep key
cat subdir_6/*/*/*/*/* subdir_6/*/*/*/* subdir_6/*/*/* subdir_6/*/* subdir_6/* | grep key
cat subdir_7/*/*/*/*/* subdir_7/*/*/*/* subdir_7/*/*/* subdir_7/*/* subdir_7/* | grep key
cat subdir_8/*/*/*/*/* subdir_8/*/*/*/* subdir_8/*/*/* subdir_8/*/* subdir_8/* | grep key
cat subdir_9/*/*/*/*/* subdir_9/*/*/*/* subdir_9/*/*/* subdir_9/*/* subdir_9/* | grep key

Задание 13

find search/ -maxdepth 3

Задание 14

find search -mindepth 3 -maxdepth 3 -type f

Задание 15

find search/*/*/*/ -type d -name "*"

Задание 16

find search -type f \( -name "level2*" -o -name "*3*" \)

Задание 17

find search -type f ! -empty

Задание 18

sudo touch /home/file.txt
ls -l /home/file.txt
rm /home/file.txt
sudo rm /home/file.txt

Задание 19

sudo apt update
sudo apt install sl

Задание 20

sudo apt remove sl

Задание 21

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o
 /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 
  https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") 
  stable" | sudo tee etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Задание 22

sudo apt update
wget http://ftp.debian.org/debian/pool/main/c/cmatrix/cmatrix_2.0-3_amd64.deb
sudo apt install ./cmatrix_2.0-3_amd64.deb

Задание 23

Задание 24

./task.sh

Действия в редакторе Vim:

  1. Ctrl+w+l
  2. gg
  3. Shift+v
  4. G
  5. y
  6. Ctrl+w+h
  7. gg
  8. Shift+v
  9. G
  10. p
  11. Ctrl+c
  12. :wq Enter
./check.sh

Задание 25

chmod 777 dir/
dir/exec_me.sh

Задание 26

sudo chgrp student .secret/rock.txt
cat .secret/rock.txt

Задание 27

sudo adduser student FiveFingerDeathPunch
su student
cat .secret/rock.txt

Если не работает:

sudo adduser --help; sudo cat .secret/rock.txt

Это не каноничное решение задания через баг.

Задание 28

sudo chown student .secret/rock.txt
cat .secret/rock.txt

Задание 29

sudo su FiveFingerDeathPunch -c "cat /home/secret/.secret/rock.txt"

Если не работает:

su --help; sudo cat /home/secret/.secret/rock.txt

Это не каноничное решение задания через баг.

Задание 30

/usr/bin/bash
./task.sh &
touch test
chmod 111 test
chmod g-x,g+w,o+w test
chmod 625 test
chmod 725 test
chmod u-rw,o-r+w test
chmod u+w,o+r-w test
mkdir -p dir/dir; touch dir/dir/file
chmod 701 dir/dir/file
touch test1
sudo addgroup minimal; sudo chgrp minimal test1; chmod 000 test1
touch test2
chmod 725 test2
touch test3
sudo chgrp minimal test3; chmod 123 test3
touch test4
chmod u-r+x,g-r,o+x test4
P="./dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir" 
P="$P/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir"
mkdir -p "$(dirname "$P")"; touch "$P"; sudo chgrp minimal "$P"; chmod 010 "$P"
chmod 010 test1
sudo chgrp student test1
chmod 755 test2
chmod 723 test3
chmod 725 test4
chmod 767 test4

Решение багом

cat /.hash/dvs/hooks/all.py | grep key

Задание 31

ln -s ~/file.txt ~/dir/dir/dir/file_link.txt
ln -s ~/dir/dir/dir/ dir_link
ls -la
cd dir_link/
pwd
cat file_link.txt

Задание 32

ln -s file.txt file_rel.txt
ln -s $PWD/file.txt file_abs.txt
mkdir dir
ls -l ./dir/
mv file.txt dir/
ls -l ./dir/
mv file2.txt file.txt
ls -l ./dir/

Задание 33

ln file.txt link.txt
ls -l
mkdir dir
mv link.txt dir/
cat dir/link.txt
echo I NEED A KEY > file.txt
cat dir/link.txt
rm file.txt
cat dir/link.txt

Баги, уязвимости

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

Начало. Скрытые файлы.
В директории, в которой оказывается пользователь после запуска любого задания, на первый взгляд есть только несколько файлов, относящихся к заданию. Однако после ввода ls -la можно обнаружить немало скрытых файлов и директорий.

.bash_history
Хороший пример такого файла — .bash_history. В нём хранится история выполненных команд, и зачастую там может быть последовательность, ведущая к ответу. Если мы прочтём его, мы не увидим готового решения «на блюдечке», однако, если посмотрим немного внимательнее, без труда его найдём. Единственный нюанс: вывод может иногда обрываться из-за длины строки и не отображаться корректно или полностью, поэтому желательно просматривать его через vim или nano, а не cat.

.viminfo
Ещё одним таким файлом является .viminfo. В нём содержится история взаимодействия с файлами через редактор Vim (конечно, не только это, но для поиска уязвимостей это ключевое). Для каждого задания он будет немного разным, однако нас больше всего интересуют следы редактирования Python скриптов. Не во всех, но в большинстве заданий в этом файле можно отыскать ссылку на /.hash/dvs/hooks/all.py.

/.hash/dvs/hooks/all.py
Если говорить простым языком, этот скрипт отвечает за правила конкретного задания. Доступ к нему — серьёзная уязвимость, так как, зная правила, несложно найти решение. К примеру: Для заданий 25-29 в нём, почти в самом верху, содержится список допустимых команд. Из-за их небольшого количества решение становится практически очевидным. А в задании 30 ключ находится прямо в начале этого файла. (Примечание: Изменить код скрипта скорее всего не получится из-за прав доступа, но чтение даёт достаточно информации).

Обход белого списка (25-29)
Кстати, в этих заданиях есть ещё одна уязвимость. Скрипт, который мы рассматривали в предыдущем пункте, проверяет на допустимость только первую команду. Он запрещает читать файл с ключом через sudo напрямую, но не запрещает писать что угодно второй командой через разделитель ;. Решение выглядит так: (Разрешённая команда) --help; sudo cat .secret/rock.txt