Skip to content

symlink archive

Maxim Pivko edited this page Mar 11, 2018 · 4 revisions

Задержаны мошенники, уговаривавшие пенсионеров покупать биткоины

Условие

Сегодня в Комсомольске-на-Амуре задержаны двое подозреваемых в мошенничестве. По данным следствия, задержанные приходили к пенсионерам и под видом сотрудников пенсионного фонда убеждали их вложиться в криптовалюту Bitcoin. После этого пенсионеры переводили им деньги и получали от мошенников документ, на котором утверждалось, что на переведённые деньги выполнен вклад в Bitcoin и что с ростом курса криптовалюты будет регулярно увеличиваться пенсия.

В ходе обыска на месте задержания сотрудники правоохранительных органов изъяли ноутбук, принадлежащий одному из подозреваемых, однако, к сожалению, не нашли на нём никаких улик. Им лишь удалось выяснить, что подозреваемый пользовался известным облачным хранилищем. Следователи уже связались с разработчиками этого сервиса, однако те отказались от сотрудничества.

Решение

В условии дана ссылка на сайт — облачное хранилище.

При входе на сайт мы видим единственный файл под названием secret.txt загруженный пользователем admin и предложение загрузить дополнительные файлы или архив в формате tar. Вероятно, в этом файле secret.txt и лежит флаг.

Попробуем что-нибудь загрузить:

Интересно, но пока ничего особенного. А что с архивами?

Создадим архив из двух изображений:

tar cf files.tar another_image.jpg one_more_image.gif

И загрузим его:

Сайт распаковал для нас архив и сохранил файлы из него для дальнейшего скачивания. Запомним это, а пока поизучаем механику работы сайта. Загруженные нами файлы можно скачивать и удалять. Причем параметром для этих операций является абсолютный путь до файла:
<form action="/download" id="download_form_1">
  <input type="hidden" name="path" value="/var/user_data/nitwnkldhu/iyvgluhj/image.jpg"/>
</form>

Такой путь есть и у секретного файла:

<form action="/download" id="download_form_4">
  <input type="hidden" name="path" value="/var/user_data/nitwnkldhu/admin/secret.txt"/>
</form>

Почему бы не попытаться скачать его напрямую, подсмотрев формат ссылки, используемой при скачивании обычного файла?

https://storage.contest.qctf.ru/download?path=/var/user_data/nitwnkldhu/admin/secret.txt

Неудача:

Вспомним, что сайт позволяет загрузить архивы. Различные попытки использовать path traversal не приводят к успеху, однако на этом возможности tar не заканчиваются. Формат tar поддерживает символические ссылки. Создадим архив с символической ссылкой на secret.txt (ведь мы уже знаем абсолютный путь до него).

ln -s /var/user_data/nitwnkldhu/admin/secret.txt hack.txt
tar cf hack.tar hack.txt

И загрузим его:

Попробуем скачать файл:

Успех!