Перейти к основному содержанию

CTF — File upload - ZIP

CTF

Тренируем мозг, продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "File upload - ZIP". За решение задачки дают 30 баллов, средний уровень.

ctf

Наша цель — прочитать содержимое файла index.php. Всё понятно.

В процессе поиска решения мы столкнёмся в уязвимостью Zip-symlink. Суть уязвимости заключается в том, что в архив можно вложить символьную ссылку, которая ссылается на нужный нам файл системы. При распаковке архива ссылка будет указывать на файл, прописанный в ней. Таким образом можно получить доступ к любому файлу на уязвимом сервере. 

Ссылки

CTF - Capture The Flag

Символические и жёсткие ссылки в Linux

Решение

Переходим на страницу задания:

challenge01.root-me.org/web-serveur/ch51/

ctf

Нам предлагают загрузить ZIP файл. Создаю текстовый файл 123.txt, запаковываю его в ZIP и загружаю.

ctf

Архив загружен, нам дают на него ссылку "File unzipped here". Посмотрим что там.

ctf

Прекрасно, здесь наш архив, который здесь же распакован. Хм, а если туда загрузить PHP файл? Попробуем. Создаю какой-нибудь PHP файл, пакую, загружаю архив.

ctf

Файл загружен, распакован.

ctf

Однако, он нее выполняется. Shell нам загрузить не удастся.

Не расстраиваемся. Само задание нам подсказывает, что уязвимость в самом процессе распаковки ZIP архива. Попробуем воспользоваться уязвимостью Zip-symlink.

ОФФТОПИК: поскольку в задаче у нас Linux, то и ссылку нам нужно будет делать в Linux. Потому как ссылка Windows отличается. Я попробовал, на Linux виндовая ссылка не работает.

Подготовим ZIP архив в любом Linux. Я использую Kali Linux. Создадим ссылку:

ln -s "../../../index.php" ./internet-lab.txt

Здесь:

  • "../../../index.php" — относительный путь к файлу, к которому нам нужно получить доступ по устовию задачи.
  • internet-lab.txt — имя ссылки

Запакуем ссылку в ZIP архив:

zip --symlinks -r internet-lab.zip ./internet-lab.txt

Здесь:

  • --symlinks — атрибут, разрешающий архивировать ссылки.
ctf

Загружаем полученный архив.

ctf

Архив загрузился, распаковался. И, судя по размеру файла internet-lab.txt, там что-то у нас есть.

ctf

По ссылке вместо нашего текстового файла распаковался искомый файл index.php. А в нём флаг. Валидируем.

ctf

И зарабатываем 30 баллов.

Безопасность

Уязвимость Zip-symlink — это не баг, а особенность. Просто не распаковывайте в своём коде чужие архивы. И тем более не давайте доступ к результатам распаковки. 

Пример работы уязвимости:

Теги

 

Похожие материалы