Найти в Дзене
B0rn2beR00T

Решение Codeby Games (UFU)

Приветствую! В данной статье разберём таск с File upload vulnerability. Приступим! File Upload Vulnerability — это уязвимость, связанная с небезопасной загрузкой файлов на сервер. Она возникает, когда веб-приложение позволяет пользователю загружать файлы (например, изображения, документы) без достаточной проверки их типа, содержимого, расширения или назначения. Это может привести к выполнению произвольного кода, утечке данных или получению полного доступа к серверу. Нам предоставляют форму с загрузкой файла, предупреждая, что хост принимает только картинки формата PNG. Игнорируем написанную просьбу и пробуем скормить хосту другие форматы файлов. Хост фыркнул и настоял на своём. Тогда сыграем по правилам. Загрузим ему PNG. Согласен, всё было бы совсем просто, но мы это делали для другого :) Перехватим запрос с загружаемой картинкой на хост: Засунем в картинку дефолтный пейлоад php <?php system('ls -ahli'); ?>) Проверим подгрузилась ли картинка по указанному пути в href: Мы получаем код

Приветствую!

В данной статье разберём таск с File upload vulnerability. Приступим!

File Upload Vulnerability — это уязвимость, связанная с небезопасной загрузкой файлов на сервер. Она возникает, когда веб-приложение позволяет пользователю загружать файлы (например, изображения, документы) без достаточной проверки их типа, содержимого, расширения или назначения. Это может привести к выполнению произвольного кода, утечке данных или получению полного доступа к серверу.

Нам предоставляют форму с загрузкой файла, предупреждая, что хост принимает только картинки формата PNG.

-2

Игнорируем написанную просьбу и пробуем скормить хосту другие форматы файлов.

-3

Хост фыркнул и настоял на своём. Тогда сыграем по правилам. Загрузим ему PNG.

-4

Согласен, всё было бы совсем просто, но мы это делали для другого :)

Перехватим запрос с загружаемой картинкой на хост:

-5

Засунем в картинку дефолтный пейлоад php

<?php system('ls -ahli'); ?>)

-6

Проверим подгрузилась ли картинка по указанному пути в href:

-7

Мы получаем код 200, но ничего особенного не происходит. В комментариях видим намёк на check_file.php. Нужно проверить!

-8

Скорее всего тут есть как-то параметр, о котором мы не знаем. Засунем данный путь в Intruder и попробуем перебрать различные варианты:

-9

В итоге параметр file оказался верным.

-10

Попробуем вместо /etc/passwd указать путь к нашей картинке со вшитым php-пейлоадом.

-11

Вроде ничего примечательного, но если посмотреть в самый низ, то видим, что команда сработала.

-12

При просмотре исходного кода всё выглядит лучше:

-13

В параметре file укажем наш флаг .t4k3_4nd_g0_away! и уходим победителями :)

Выводы

Одна из самых недооценённых, но при этом крайне опасных уязвимостей — небезопасная загрузка файлов. Механизм, который должен принимать изображения и документы, в руках атакующего легко превращается в точку входа на сервер.

Когда веб-приложение позволяет загружать файлы и не проверяет их должным образом, это становится уязвимостью. Злоумышленник может загрузить вредоносный файл, например:

  • .php, .asp, .jsp, .py
  • .php.jpg — расширение-обманка
  • .phtml, .phar — редкие, но исполняемые типы
  • даже .svg с внедрённым JavaScript

Если файл сохраняется в публично доступной директории и веб-сервер его интерпретирует, злоумышленник получает удалённое выполнение кода (RCE) — один из самых опасных сценариев.

Внедрение полезной нагрузки в изображение, что мы и делали в разборе этого кейса, довольно коварный приём.

Формат JPEG допускает вставку произвольных данных до заголовка изображения. Пример:

<?php system($_GET['cmd']); ?>
����ÿØÿà JFIF ...

То есть сначала — PHP-код, потом начинается валидная часть изображения. Это в том случае, если сервер уязвим к данной атаке.

Серверные фильтры могут проверить только "валидность картинки", а не то, что в начале файла находится исполняемый код. В таком случае шансов на успех мало.

Если сервер принимает только картинки, это не значит, что он защищён. Проверка расширения и MIME-типа — не защита. Только комплексный подход, включая проверку содержимого, настройку сервера и контроль доступа, способен реально закрыть дыру.

Спасибо за внимание! Не забывайте оценивать моё творчество лайком. Всех благ!