Некоторые задания 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