Ncat, Netcat, nc

Описание Ncat

Программа Ncat является написанным с нуля популярной (но давно не поддерживаемой) программы Netcat, nc. Кроме Ncat имеются и другие варианты Netcat, которые переписаны из оригинального кода или написаны с нуля. Поэтому аналогичные программы с аналогичными функциями могут называться по-разному, также они могут отличаться друг от друга возможностями и набором опций, но главная функция у них одинаковая.

Данный справочный материал описывает Ncat — вариант Netcat от авторов Nmap. Программа Ncat является популярной и в некоторых дистрибутивах предустановлена по умолчанию вместо Netcat.

Ncat — это многофункциональная сетевая утилита, которая считывает и записывает данные в сети из командной строки. Ncat была написана для Nmap Project в качестве сильно улучшенной реинкарнации почтенной программы Netcat. Она использует TCP и UDP для коммуникации и создана быть надёжным движком для мгновенно подключения по сети к другим приложениям и пользователям. Ncat не только работает с IPv4 и IPv6, но и обеспечивает пользователя потенциально безграничным числом вариантов использования.

Среди большого количество числа функций Ncat, там имеется возможность выстраивать цепи из Ncat, перенаправляя TCP и UDP порты на другие сайты, поддержка SSL, поддержка соединений через прокси через SOCKS4 или HTTP прокси (метод CONNECT) (также с опциональной возможностью аутентификации). Некоторые общие принципы применимы к большинству приложений и, таким образом, дают вам возможность мгновенно добавлять сетевую поддержку к программному обеспечению, которое обычно никогда не поддерживает его.

Ncat интегрирована с Nmap и доступна в стандартных пакетах при загрузке Nmap (включая исходный код, а также исполнимые файлы для Linux, Windows, и Mac) — всё это доступно на странице загрузки Nmap. Также имеется репозиторий исходного кода SVN.

Домашняя страница: https://nmap.org/ncat/

Авторы: Chris Gibson,

Лицензия: GPLv2

Справка по Ncat

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

ncat [опции] [имя_хоста] [порт]

Опции:

Опции, принимающие время, подразумевают секунды. Добавьте 'ms' для миллисекунд,
's' для секунд, 'm' для минут или 'h' для часов (например, 500ms).
  -4                         Использовать только IPv4
  -6                         Использовать только IPv6
  -U, --unixsock             Использовать только доменные сокеты Unix
  -C, --crlf                 Использовать CRLF для последовательности EOL (конец строки)
  -c, --sh-exec <команда>    Выполнить данную команду через /bin/sh
  -e, --exec <команда>       Выполнить заданную команду
      --lua-exec <имя_файла> Выполнить данный скрипт Lua
  -g hop1[,hop2,...]         Свободные исходные точки перехода (максимум 8)
  -G <n>                     Свободный исходный указатель маршрута (4, 8, 12, ...)
  -m, --max-conns <n>        Максимум <n> одновременных подключений
  -h, --help                 Показать справку
  -d, --delay <время>        Ожидание между чтением/записью
  -o, --output <имя_файла>   Сохранить данные сессии в файл
  -x, --hex-dump <имя_файла> Сохранить данные сессии в шестнадцатеричном виде в файл
  -i, --idle-timeout <время> Таймаут бездействия чтения/записи
  -p, --source-port порт     Указать порт источники для использования
  -s, --source addr          Указать адрес источника для использования (не оказывает влияния -l)
  -l, --listen               Прослушивать порт ожидая входящие соединения
  -k, --keep-open            Принимат несколько соединений в режиме прослушивания
  -n, --nodns                Не преобразовывать имена хостов через DNS
  -t, --telnet               Отвечать на переговоры Telnet
  -u, --udp                  Использовать UDP вместо дефолтного TCP
      --sctp                 Использовать SCTP вместо дефолтного TCP
  -v, --verbose              Установить уровень вербальности (можно указать несколько раз)
  -w, --wait <время>         Таймаут соединения
  -z                         Режим нулевого ввода/вывода, сообщать только о статусе соединения
      --append-output        Добавлять, а не закрывать указанные выходные файлы
      --send-only            Только отправлять данные, игнорировать получение; выйти на EOF
      --recv-only            Только получать данные, никогда ничего не отправлять
      --allow                Разрешить подключаться к Ncat только заданному хосту
      --allowfile             Файл со списком хостов, разрешённым для подключения к Ncat
      --deny                 Запретить указанным хостам подключаться к Ncat
      --denyfile              Файл со списком хостов, кому запрещено подключаться к Ncat
      --broker               Включить режим посредничества подключений Ncat
      --chat                 Запустить простой чат-сервер Ncat
      --proxy <адрес[:порт]> Указать адрес хоста, через который выполнять проксирование
      --proxy-type <тип>     Указать тип прокси ("http" или "socks4" или "socks5")
      --proxy-auth <auth>    Аутентификация с прокси сервером HTTP или SOCKS
      --ssl                  Подключиться или прослушивать с SSL
      --ssl-cert             Указать файл SSL сертификата (PEM) для прослушивания
      --ssl-key              Указать приватный ключ SSL (PEM) для прослушивания
      --ssl-verify           Верифицировать надёжность и доменное имя сертификата
      --ssl-trustfile         Файл PEM содержащий доверенные SSL сертификаты
      --ssl-ciphers          Список шифров, содержащий SSL шифры для использования
      --ssl-alpn             Список ALPN протоколов для использования.
      --version              Показать версию Ncat и выйти

Руководство по Ncat

Название

ncat — конкатенация и перенаправление сокетов

Синопсис

ncat [ОПЦИИ...] [имя_хоста] [порт]

Режим подключения (connect mode) и режим прослушивания (listen mode)

Ncat работает в двух главных режимах: режим подключения и режим прослушивания. Другие режимы, такие как HTTP прокси сервер, выступают как специальные случаи двух основных режимов. В режиме подключения Ncat работает как клиент. В режиме прослушания это сервер.

В режиме подключения аргументы имя_хоста и порт говорят, к чему подключиться. Имя_хоста нужно указать обязательно, это может быть имя хоста (такое как доменное имя, например) или IP адрес. Если порт указан, то это должно быть десятичное число. Если порт пропущен, то используется значение по умолчанию 31337.

В режиме прослушивания, имя_хоста и порт контролирует адрес сервера, к которому будет сделана привязка (bind). В режиме прослушивания оба аргумента являются опциональными. Если пропущено имя хоста, то по умолчанию прослушиваются все доступные адреса по IPv4 и IPv6. Если пропущен порт, то по умолчанию прослушивается порт 31337.

Опции протоколов

-4 (только IPv4)

Принудительно использовать только IPv4.

-6 (только IPv6)

Принудительно использовать только IPv6.

-U, --unixsock (Используйте доменные сокеты Unix)

Используйте доменные сокеты Unix, а не сетевые сокеты. Эта опция может использоваться сама по себе для потоковых сокетов или в сочетании с --udp для датаграмных сокетов. Описание режима -U будет далее в подразделе с названием «Доменные сокеты Unix».

-u, --udp (Использовать UDP)

Использовать UDP для подключений (по умолчанию используется TCP).

--sctp (Использовать SCTP)

Использовать для подключений SCTP (по умолчанию используется TCP). SCTP поддержка реализована в совместимом с TCP режиме (TCP-compatible mode).

Опции режима подключения

Чтобы понимать следующие опции программы Ncat нужно знать об опциях Интернет протокола (Internet Protocol). Имеется ряд опциональных параметров, которые могут присутствовать в датаграммах Internet Protocol 4 версии. Как правило, они настраивают ряд вариантов поведения, таких как метод, который будет использоваться во время маршрутизации источника, некоторые средства управления и проверки и ряд экспериментальных функций.

Свободная исходная маршрутизация

Свободная маршрутизация от источника — это опция IP, которую можно использовать для трансляции адресов. LSR также используется для реализации мобильности в IP-сетях.

Свободная исходная маршрутизация использует опцию исходной маршрутизации в IP для записи набора маршрутизаторов, которые должен посетить пакет. Пункт назначения пакета заменяется следующим маршрутизатором, который пакет должен посетить. Установив агент пересылки (FA) на один из маршрутизаторов, которые должен посетить пакет, LSR эквивалентен туннелированию. Если соответствующий узел хранит параметры LSR и реверсирует их, это эквивалентно функциональности в мобильном IPv6.

Наименование свободной исходной маршрутизации происходит из-за того, что заранее задана только часть пути.

Строгая исходная маршрутизация

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

-g hop1[,hop2,…] (Свободная исходная маршрутизация)

Устанавливает хопы (hop, узлы) свободной исходной маршрутизации. Вы можете использовать -g один раз со списком, в котором через запятую перечислены хопы, используйте -g несколько раз с одним узлом для построения списка или комбинирования двух. Хопы могут быть заданы как IP адреса или имена хостов.

-G ptr (Установить указатель исходной маршрутизации)

Устанавливает «указатель» исходного маршрута IPv4 для использования с -g. Аргумент должен быть кратным 4 и не более 28. Не все операционные системы поддерживают установку этого указателя на что-либо кроме четырёх.

-p порт, --source-port порт (Указать порт источника)

Установить номер порта для привязки Ncat.

-s хост, --source хост (Указать адрес источника)

Указать адрес для привязки Ncat.

Опции режима прослушивания

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

-l, --listen (Прослушивать подключения)

Прослушивать подключения, а не подключаться к удалённой машине.

-m numconns, --max-conns numconns (Указывает максимальное число подключений)

Максимальное число одновременных подключений, принимаемых экземпляром Ncat. По умолчанию это 100 (в Windows это 60).

-k, --keep-open (Разрешить множественные подключения)

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

--broker (Посреднические соединения)

Разрешить нескольким сторонам подключаться к централизованному серверу Ncat и общаться друг с другом. Ncat может обеспечивать связь между системами, которые находятся за NAT или иным образом не могут напрямую подключиться. Эта опция используется в сочетании с --listen, в результате чего на порту --listen включён режим брокера.

--chat (Ad-hoc “чат сервер”)

Опция --chat включает режим чата, предназначенный для обмена текстом между несколькими пользователями. В режиме чата, включены посреднические соединения. Перед отправкой другим подключившимся, Ncat предваряет каждое полученное сообщение идентификатором. Идентификатор уникален для каждого подключённого клиента. Это помогает различать, кто что отправил. Дополнительно непечатные символы, такие как контрольные символы, экранируются, чтобы они не навредили терминалу.

Опции SSL

--ssl (Использовать SSL)

В режиме подключения этот параметр прозрачно согласовывает сеанс SSL с сервером SSL для безопасного шифрования соединения. Это особенно удобно для общения с HTTP-серверами с поддержкой SSL и т. д.

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

В режиме UDP-подключения эта опция включает Datagram TLS (DTLS). Это не поддерживается в режиме сервера.

--ssl-verify (Верификация сертификатов сервера)

В режиме клиента, --ssl-verify это как --ssl кроме того, эта опция также требует верификацию сертификатов сервера. Ncat поставляется со стандартным набором доверенных сертификатов в файле ca-bundle.crt. Некоторые операционные системы предоставляют дефолтный список доверенынх сертификатов, они также будут использоваться, если доступны. Используйте --ssl-trustfile, чтобы указать свой собственный список.

Используйте -v один или более раз для получения подробностей о неудачах верификации. Ncat не проверяет сертификаты на отозванность.

Эта опция не имеет эффекта в серверном режиме.

--ssl-cert certfile.pem (Указать SSL сертификат)

Эта опция передаёт расположения файлов сертификата в PEM кодировке, используемых для аутентификации сервера (в режиме прослушивания) или клиента (в режиме подключения). Используйте её в комбинации с --ssl-key.

--ssl-key keyfile.pem (Указать приватный ключ SSL)

Эта опция передаёт расположения приватного файла ключа в PEM кодировке, который идёт с сертификатом, указанным опцией --ssl-cert.

--ssl-trustfile cert.pem (Список доверенный сертификатов)

Эта опция устанавливает список сертификатов, которые являются доверенными для целей проверки сертификатов. Она не имеет эффекта если не совмещена с --ssl-verify. Аргумент этой опции — это имя PEM файла, содержащего доверенные сертификаты. Обычно этот файл будет содержать сертификаты Центров Сертификации (certification authorities), хотя он может также содержать напрямую сертификаты сервера. Когда используется эта опция, Ncat не использует свои дефолтные сертификаты.

--ssl-ciphers список шифров (Указывает список шифров SSL)

Эта опция устанавливает список набора шифров, которые Ncat будет использовать при подключении к серверам или когда принимает SSL подключения от клиентов. Синтаксис описан в man странице OpenSSL ciphers(1):

man 1 ciphers

и по умолчанию установлен на:

ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!MD5:@STRENGTH

--ssl-alpn список ALPN (Указывает список протокола ALPN)

Эта опция позволяет указать разделённый запятой список протоколов для отправки файлов через TLS расширение Application-Layer Protocol Negotiation. Поддерживается не всеми версиями OpenSSL.

Опции прокси

--proxy хост[:порт] (Указывает адрес прокси)

Запросы проксируются через хост:порт, используя протокол, указанный с --proxy-type.

Если порт не указан, используется распространённый порт для прокси протоколов (1080 для SOCKS и 3128 для HTTP). Тем не менее при указании прокси сервера IPv6 HTTP используя IP адрес, а не имя хоста, также НУЖНО указать номер порта. Если прокси требует аутентификации, используйте --proxy-auth.

--proxy-type протокол (Указывает протокол прокси)

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

Доступными в данный момент протоколами в режиме подключения являются: http (CONNECT), socks4 (SOCKSv4) и socks5 (SOCKSv5). Сейчас сервер поддерживает только http. Если эта опция не используется, то протоколом по умолчанию является http.

--proxy-auth пользователь[:пароль] (Указывает учётные данные прокси)

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

Для использования с --proxy-type http или --proxy-type socks5, форма должна быть имя_пользователя:пароль. Для --proxy-type socks4 должно быть только имя_пользователя.

Опции выполнения команд

-e команда, --exec команда (Выполнить команду)

Выполнить указанную команду после того, как соединение было установлено. Команда должна быть указана как полный путь до файла. Весь вывод с удалённого клиента будет отправлен приложению, а ответы отправлены обратно удалённому клиенту через сокет, что делает ваше приложение командной строки интерактивным через сокет. При комбинации с --keep-open, Ncat будет обрабатывать несколько одновременных соединений к указанному вами порту/приложению как inetd. Ncat будет принимать только максимально определённое количество одновременных соединений, управляемых параметром -m. По умолчанию это значение равно 100 (60 в Windows).

-c команда, --sh-exec команда (Выполнить команду через sh)

То же, что и -e, за исключением что она пытается выполнить команду через /bin/sh. Это означает, что вам необязательно указывать полный путь до команды, и доступны такие возможности оболочки как переменные окружения.

--lua-exec файл (Выполнить скрипт .lua)

После установления соединения, запускает указанный файл как Lua скрипт используя встроенный интерпретатор. Стандартный ввод скрипта и стандартный вывод перенаправляются в потоки данных соединения.

Все опции выполнения (exec) добавляют следующие переменные к дочернему окружению:

NCAT_REMOTE_ADDR, NCAT_REMOTE_PORT

IP адрес и номер порта удалённого хоста. В режиме подключения, это целевой адрес, в режиме прослушивания — это клиентский адрес.

NCAT_LOCAL_ADDR, NCAT_LOCAL_PORT

IP адрес и номер порта локального конца соединения.

NCAT_PROTO

Используемый протокол: один из TCP, UDP или SCTP.

Опции контроля доступа

--allow хост[,хост,…] (Разрешить все соединения)

Для подключения к процессу Ncat будет допущены только хосты из указанного списка. Все другие попытки доступа будут отключены. В случае конфликта между --allow и --deny, приоритет имеет --allow. Спецификации хостов имеют такой же синтаксис, какой используют Nmap.

--allowfile файл (Разрешить подключение хостам из файла)

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

--deny хост[,хост,…] (Отклонить соединения)

Запускает Ncat со списком хостов, кому будет неразрешено подключаться к прослушивающему процессу Ncat. Если они попытаются подключиться, у указанных хостов будет тихо терминирована сессия. В случае конфликта --allow и --deny, приоритет имеет --allow. Синтаксис указания хостов такой же, как и у Nmap.

--denyfile файл (Отклонять подключения от хостов из файла)

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

Опции настройки времени

Эти опции принимают параметр времени. Он по умолчанию указывается в секундах, хотя вы можете добавить префикс ms, s, m или h, чтобы значения трактовались как миллисекунды, секунды, минуты или часы.

-d время, --delay время (Указывает время задержки)

Устанавливает интервал задержки для отправленных строк. Это эффективно ограничивает количество строк, которые Ncat отправит за указанный период. Это может быть полезно для сайтов с низкой пропускной способностью или для других целей, например для работы с раздражающими опциями iptables --limit

-i время, --idle-timeout время (Specify idle timeout)

Устанавливает фиксированный таймаут для соединений в простое. Если достигнут таймаут соединение прекращается.

-w время, --wait время (Указывает таймаут соединения)

Устанавливает фиксированный таймаут для попытки соединения.

Опции вывода

-o файл, --output файл (сохраняет данные сессии)

Сохраняет (дампит) данные сессии в файл.

-x файл, --hex-dump файл (Сохраняет данные сессии в шестнадцатеричном формате)

Сохраняет данные сессии в шестнадцатеричном формате в файл.

--append-output (Дописывает вывод)

Запустите Ncat с --append-ouput вместе с -o и/или -x и она будет добавлять результирующий вывод вместо усечения указанных файлов вывода.

-v, --verbose (Быть вербальной)

Запустите Ncat с -v и она будет вербальной и отобразит всякого рода полезную информацию о подключении. Использование более чем одного раза (-vv, -vvv…) увеличит вербальность.

Прочие опции

-C, --crlf (Использовать CRLF как EOL)

Эта опция говорит Ncat конвертировать окончание строки LF в CRLF когда принимается ввод из стандартного ввода. Это полезно для разговора с некоторыми строгими серверами напрямую из терминала по одному из многих протоколов в виде простого текста, которые используют CRLF в качестве конца строки (end-of-line).

-h, --help (Справка)

Показывает короткую справку с популярными опциями и параметрами, а затем выходит.

--recv-only (Только получать данные)

Если эта опция передана, Ncat будет только получать данные и не будет пытаться что-либо отправить.

--send-only (Только отправлять данные)

Если эта опция передана, тогда Ncat будет только отправлять данные и будет игнорировать всё полученное. Эта опция также приводит к тому, что Ncat закроет сетевое соединение и завершит работу после получения по стандартному вводу EOF.

--no-shutdown (Без отключения и полудуплексный режим)

Если передана эта опция, Ncat не будет вызывать отключение (shutdown) сокета после того, как увидит EOF в stdin. Это сделано для обратной совместимости с OpenBSD netcat, которая демонстрирует это поведение когда выполняется в опцией '-d'.

-t, --telnet (Отвечать на переговоры Telnet)

Обрабатывает переговоры Telnet DO/DONT WILL/WONT Telnet. Это делает возможным скриптовать Telnet сессии с Ncat.

--version (Показать версию)

Показать номер версии Ncat и выйти.

Доменные сокеты Unix (Unix domain sockets)

Опция -U (то же самое что и --unixsock) приводит к тому, что Ncat начинает использовать доменные сокеты Unix (Unix domain sockets), а не сетевые сокеты. Доменные сокеты Unix существуют в качестве записей в файловой системе. Вы должны передать имя сокета для подключения или для прослушивания. Например, чтобы сделать подключение:

ncat -U ~/unixsock

Для прослушивания на сокете:

ncat -l -U ~/unixsock

Режим прослушивания создаст сокет, если он не существует. Сокет продолжит существование после выхода из программы.

Поддерживаются оба типа: потоковые и датаграмнные доменные сокеты. Используйте -U саму по себе для потоковых сокетов или комбинируйте её с --udp для датаграмнных сокетов. Датаграмнные сокеты требует исходный сокет для подключения. По умолчанию, если нужно, будет создан исходный сокет с произвольным именем файла; при выходе из программы он будет удалён. Используйте --source с указанием пути для задействования сокета с определённым именем.

Код выхода

Код выхода отражает, было ли сделано соединение и завершено успешно. 0 означает, что ошибок не было, 1 означает, что произошла какого-то рода ошибка сети, например, “Connection refused” (В соединение отказано) или “Connection reset” (Соединение сброшено). 2 зарезервирована для всех других ошибок, таких как неверная опция или несуществующий файл.

Примеры запуска Ncat

Подключение к example.org используя протокол TCP на порту 8080:

ncat example.org 8080

Прослушивать входящие соединения используя протокол TCP на порту 8080:

ncat -l 8080

Перенаправить TCP порт 8080 на локальной машине на хост на порт 80:

ncat --sh-exec "ncat example.org 80" -l 8080 --keep-open

Прослушивать порт 8081 и прикрепить /bin/bash для исполнения переданных команд:

ncat --exec "/bin/bash" -l 8081 --keep-open

Привязать шелл (оболочку) к TCP порту 8081, ограничить доступ к хостам из локальной сети и ограничить максимальное число одновременных подключений на тремя:

ncat --exec "/bin/bash" --max-conns 3 --allow 192.168.0.0/24 -l 8081 --keep-open

Подключиться к smtphost:25 через сервер SOCKS4 на порту 1080:

ncat --proxy socks4host --proxy-type socks4 --proxy-auth joe smtphost 25

Подключиться к smtphost:25 через сервер SOCKS5 на порту 1080:

ncat --proxy socks5host --proxy-type socks5 --proxy-auth joe:secret smtphost 25

Создать HTTP прокси сервер на localhost на порту 8888:

ncat -l --proxy-type http localhost 8888

Отправить файл через TCP порт 9899 с host2 (клиент) на host1 (сервер):

HOST1$ ncat -l 9899 > outputfile
HOST2$ ncat HOST1 9899 < inputfile

Отправить в другом направлении, превратив Ncat в сервер «одного файла»:

HOST1$ ncat -l 9899 < inputfile
HOST2$ ncat HOST1 9899 > outputfile

Установка Ncat

Установка в Kali Linux

sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install ncat

Установка в BlackArch

Программа предустановлена в BlackArch.

sudo nmap -S nmap

Установка в Debian, Ubuntu, Linux Mint и их производные

sudo apt install nmap

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты Ncat

Инструкции по Ncat

Близкие программы:

  • PoisonTap (100%)
  • Weevely (92.3%)
  • PhpSploit (92.3%)
  • webshells (92.3%)
  • Pupy (92.3%)
  • WPForce (RANDOM - 42.3%)
  • Рекомендуется Вам:

    Comments are Closed