Найти в Дзене
B0rn2beR00T

Решение PortSwigger (File path traversal)

Приветствую! В статье мы детально разберём простые примеры уязвимости Path Traversal (обход пути) и решим вот такой перечень лаб: Path Traversal — это уязвимость, которая позволяет злоумышленникам
получать доступ к файлам и каталогам, к которым они не должны иметь
доступа. Обычно они возникают в веб-приложениях, но могут возникать в
любом программном обеспечении, которое обрабатывает пути к файлам. Уязвимости обхода пути могут использоваться для доступа к
конфиденциальным данным, таким как учетные данные, а в некоторых
случаях их даже можно использовать для запуска произвольного кода, что
может привести к полному захвату цели. При открытии нашего атакуемого веб-ресурса посмотрим раздел History, не включая перехват запроса. Наш прокси отобразил в истории запросы, где есть параметр с указанием имени изображения, которая будет подтягиваться с хоста. Можно кликнуть по одному из запросов и перенести в Repeater. Изменим путь в параметре filename: ../../../../../etc/passwd При помощи ../ про
Оглавление

Приветствую!

В статье мы детально разберём простые примеры уязвимости Path Traversal (обход пути) и решим вот такой перечень лаб:

-2

Path Traversal — это уязвимость, которая позволяет злоумышленникам
получать доступ к файлам и каталогам, к которым они не должны иметь
доступа. Обычно они возникают в веб-приложениях, но могут возникать в
любом программном обеспечении, которое обрабатывает пути к файлам.

Уязвимости обхода пути могут использоваться для доступа к
конфиденциальным данным, таким как учетные данные, а в некоторых
случаях их даже можно использовать для запуска произвольного кода, что
может привести к полному захвату цели.

Простой кейс с Path traversal

При открытии нашего атакуемого веб-ресурса посмотрим раздел History, не включая перехват запроса.

-3

Наш прокси отобразил в истории запросы, где есть параметр с указанием имени изображения, которая будет подтягиваться с хоста. Можно кликнуть по одному из запросов и перенести в Repeater.

-4

Изменим путь в параметре filename:

../../../../../etc/passwd
При помощи ../ происходит перемещение на директорию выше (родительскую). Повторение таких ../../ приводит к корню системы, что в итоге позволяет нам получить доступ вне начальной директории.

-5

Таким образом, сервер отдаёт нам файл passwd в ответ. Если покреативить, то можно попробовать ещё достать полезную информацию о таргете.

Вот ещё примеры:

-6

Имя хоста уже есть.

-7

Конфиг hosts тоже достали.

-8

Вот ещё и crontab имеется. В общем, вы поняли почему эта уязвимость так неприятна.

Перейдём к более сложным примерам.

Абсолютный путь

Поговорим о различии абсолютного пути и относительного в линухе:

Абсолютный путь: это путь от корня файловой системы (/) до нужного файла или папки. Пример: /etc/passwd

Относительный путь: это путь относительно текущей рабочей директории, в которой ты сейчас находишься (её можно узнать через pwd). Пример: ../file.txt

Теперь понимая это можем проэксплуатировать уязвимость:

-9

Приложение блокирует последовательности переходов (../../../), но обрабатывает указанное имя файла как относительное к рабочему каталогу по умолчанию.

Используя абсолютный путь можно обойти данный ненадёжный фильтр.

Нерекурсивное удаление символов обхода

В данном случае хост проходится один раз по последовательности с ../../../.. и убирает вредоносные символы.

То есть ../../../../etc/passwd --> etc/passwd, что может не понять хост и выдать ошибку.

Для обхода фильтра будем использовать ....//. Если хост убирает ../, то по итогу проходясь по последовательности мы получим те же ../

Повторной проверки не предвидится из-за отсутствия рекурсии в проверке.

-10

Двойная URL-кодировка

Двойного URL-кодирования (double URL encoding), часто используемого в веб-атаках, особенно при попытке обхода фильтров directory traversal.

Принцип:

../ --> ..%2f --> ..%252f

Таким образом получаем следующий payload:

..%252f..%252f..%252fetc/passwd

Таким образом, сервер, который сначала раскодирует %25 в %, а потом %2f в /, получит обычный path traversal:

-11

Разработчики веб-сервисов тоже не дураки и могут настроить фильтрацию на запросы с кодировкой, которую могут применять хакеры. Так можно обойти такой фильтр, но а что если такой шаг уже продуман разработчиком?

Ох... это может продолжаться бесконечно...

Проверка начала пути

Приложение передаёт полный путь к файлу через параметр запроса и проверяет, что указанный путь начинается с ожидаемой папки. В данном случае с /var/www/images/

-12

Тут всё просто.

Проверка расширения файла

-13
../../../../etc/password%00.png
%00 — это нулевой байт (null byte).
Он сигнализирует об окончании строки в языках программирования на C-подобных системах (в т.ч. PHP до версии 5.3).

Идея следующая: обрезать остаток строки, чтобы сервер "забыл" про .png. В итоге выходит следующее:

../../../../etc/passwd%00.png ➝ ../../../../etc/passwd

Таким образом, можно было обмануть фильтрацию расширений, которая ожидала только .png, .jpg, .php и т.д.

Полезные материалы

Payloads - список payloads для Path Trevelsal
URL Encoder/Decoder - онлайн кодировщик и декодировщик URL
DotDotPwn - автоматический перебор полезных нагрузок

Выводы

Path Traversal является очень простой в изучении веб-атакой. Решение этих 6-ти лаб не вызвало затруднения.

Обсудим какие меры защиты от Path Traversal существуют:

  • Разрешение доступа только к конкретным допустимым файлам или директориям, явно указав их.
  • Назначьте ограниченные права доступа к файловой системе (например при помощи chroot).
  • Использовать современные фреймворки (например, Spring Boot, Django). Они имеют встроенные механизмы защиты от Path Traversal.

Самый эффективный способ предотвратить уязвимости, связанные с обходом путей, — полностью отказаться от передачи пользовательских данных в API файловой системы.

Всех благ!