2.9 KiB
Уязвимость загрузки файлов возникает тогда, когда сервер позволяет пользователям загружать файлы в свою файловую систему без надлежащей проверки имени файла, типа, размера и содержимого файла. Неспособность должным образом применить ограничения означает, что даже самая базовая функция загрузки изображения может быть ипользована для загрузки и эксплуатации опасных файлов.
В некоторых случаях, сам факт загрузки файла может нести в себе опасность. Некоторые атаки могут включать последующий HTTP запрос на иполнение файла.
Как возникает уязвимость?
Учитывая довольно очевидную опасность, редко встретишь сайт без ограничений на загрузку файлов. Например, разработчики могут создать blacklist для опасных типов файлов, но не учитывать расхождения в анализе при проверке расширения файла. Как и в любом черном списке, легко можно опустить менее явные типы файлов, которые всё еще могут быть опасными.
Использование неограниченную загрузку файлов для вызова консоли
Самый худший сценарий - когда сайт дает возможность загружать и запускать файлы php, js, python.
Поэтому стоит попробовать залить файл на сервер и выполнить его (через запрос в url)
<?php echo file_get_contents('/path/to/target/file'); ?>
Если стоит ограничение на Content-type, проверить можно ли подменить его в заголовке.
POST /images HTTP/1.1
Host: normal-website.com
Content-Length: 12345
Content-Type: multipart/form-data;
boundary=---------------------------012345678901234567890123456 ---------------------------012345678901234567890123456
Content-Disposition: form-data; name="image"; filename="example.jpg" Content-Type: image/jpeg [...binary content of example.jpg...]
---------------------------012345678901234567890123456 Content-Disposition: form-data; name="description" This is an interesting description of my image.
---------------------------012345678901234567890123456 Content-Disposition: form-data; name="username" wiener