**Уязвимость загрузки файлов** возникает тогда, когда сервер позволяет пользователям загружать файлы в свою файловую систему без надлежащей проверки имени файла, типа, размера и содержимого файла. Неспособность должным образом применить ограничения означает, что даже самая базовая функция загрузки изображения может быть ипользована для загрузки и эксплуатации опасных файлов. В некоторых случаях, сам факт загрузки файла может нести в себе опасность. Некоторые атаки могут включать последующий HTTP запрос на иполнение файла. ## Как возникает уязвимость? Учитывая довольно очевидную опасность, редко встретишь сайт без ограничений на загрузку файлов. Например, разработчики могут создать blacklist для опасных типов файлов, но не учитывать расхождения в анализе при проверке расширения файла. Как и в любом черном списке, легко можно опустить менее явные типы файлов, которые всё еще могут быть опасными. ## Использование неограниченную загрузку файлов для вызова консоли Самый худший сценарий - когда сайт дает возможность загружать и запускать файлы php, js, python. Поэтому стоит попробовать залить файл на сервер и выполнить его (через запрос в url) ```php ``` Если стоит ограничение на **Content-type**, проверить можно ли подменить его в заголовке. ```http 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 ```