Обзор возможностей и базовых приемов применения утилиты netcat
Главное назначение утилиты netcat (или ‘nc’, как называется соответствующий выполняемый файл) — предоставить пользователю возможность передавать любые данные через сеть, используя транспортный протокол TCP или UDP. Кроме этого, netcat может выполнять еще несколько интересных функций, например, сканирования UDP- или TCP-Портов.
При этом пользователь может, в частности:
- свободно выбирать порт привязки (как локальный, так и отдаленный);
- выполнять (не выполнять) прямую и обратную трансляцию DNS-Имен;
- привязывать netcat к любому из адресов уровня сети локального узла;
- передавать входные сообщения на обработку другой программе;
- шифровать данные, которые передаются (эта возможность реализована в версии netcat, так называемая cryptcat).
Базовые режимы работы
Базовые режимы работы утилиты netcat — режим клиента и режим сервера.
Простейший вариант запуска в режиме клиента:
(если нужно использовать протокол TCP), или
(если нужно использовать протокол UDP).
Если не включенная опция -u, непосредственно после запуска в этом режиме netcat осуществляет попытку установить TCP-Соединение с портом port узла host.
Работа netcat сводится к передаче на сокет host:port всего, что приходит к ней через стандартный канал ВВОДА, и выдачи в стандартный канал ВЫВОДА всего, что приходит к ней из этого сокета.
Простейший вариант запуска в режиме сервера:
После запуска в этом режиме netcat ждет запросов на установление соединения с TCP-Портом port. После установления соединения выдает все, что приходит к ней через это соединение, в стандартный канал ВЫВОДА, и передает назад все, что приходит к ней через стандартный канал ВВОДА.
Применение при подготовке и проведении программных атак
Такое широкое назначение утилиты netcat открывает множество возможностей по ее применению. При подготовке и проведении программных атак возможное применение netcat для решении следующих, например, задач:
- идентификация сервисов, которые предоставляют узлы сети (путем сканирования TCP- и UDP-Портов);
- идентификация программного обеспечения сервисов, которые предоставляют узлы сети (путем сбора маркеров);
- проникновение на узлы сети или нарушение доступности сервисов, которые они предоставляют;
- создание скрытых каналов управления узлами сети;
- создание скрытых каналов передачи данных.
В последних двух случаях очень полезной есть возможность шифровать обмен между клиентом и сервером netcat (реализованная в cryptcat).
Применение netcat для проникновения на узлы сети или отдаленного нарушения доступности сервисов, которые они предоставляют
О проникновении на узел сети говорят в двух смыслах:
1) как про захват полномочий пользователя узла (субъектом, который к этому не имел никаких полномочий относительно этого узла);
2) как о преодолении ограничений на информационный обмен с узлом, наложенных межсетевым (сетевым) экраном.
netcat может оказаться полезной в обоих случаях.
Захват полномочий возможен путем отдаленной атаки на сервер, который принадлежит объекту атаки (используя, например, такую уязвимость сервера, как переполнение буфера). При этом у атакующего должна быть возможность передать серверу определенные данные. Как правило, это такие данные, которые невозможно передать с помощью обычной клиентской программы (но возможно с помощью netcat, поскольку netcat дает возможность передавать любые данные).
Проникнуть через межсетевой (сетевой) экран может помочь способность netcat привязываться к любому локальному порту (включается опцией -p). Например, если netcat в режиме клиента привязывается к TCP-Порту 20 (ftp-data), во многих случаях межсетевые (сетевые) экраны разрешат устанавливать соединение с узлами (узлом) сети, которые (который) они защищают.
Для нарушения доступности сервисов может применяться та самая способность netcat передавать любому серверу любые данные (например, некорректные запросы, которые приводят к зависанию сервера).
Применение netcat для создания скрытых каналов управления узлами сети
Предположим, что объектом атаки является узел под управлением MS Windows NT. Выполнив на объекте атаки
(где xxxx — произвольный номер порта), получим скрытый канал управления этим объектом. Здесь опция -e включает режим, в котором стандартный поток ВЫВОДА результатов утилиты netcat подключается к стандартному каналу ВВОДА командного интерпретатора cmd.exe, а стандартные потоки ВЫВОДА результатов и сообщений об ошибках командного интерпретатора cmd.exe – к стандартному потоку ВВОДА утилиты netcat. Опция -L действует аналогично -l, с таким различием, что указывает на необходимость перезапуска netcat с теми же аргументами после завершения каждого соединения. Опция -d (detach) служит для скрытия запуска (netcat при этом не создает окна и не отображается в списке задач). Дополнительного эффекта скрытия можно достичь, если переименовать выполняемый файл netcat.
Воспользоваться этим каналом можно, если, например, на другом узле следующим образом запустить netcat:
где troy — адрес или имя объекта атаки.
Опция -e, однако, не всегда поддерживается реализациями netcat. Если эта опция не поддерживается, аналогичного результата можно достичь, запустив по два экземпляра netcat на объекте атаки и на узле атакующего. Можно, например, применить следующий сценарий. На объекте атаки запустить:
где odysseus — адрес или имя узла атакующего.
А на узле атакующего:
nc troy xxxx
Такой сценарий называется перенаправлением портов. Обратите внимание на правильный порядок запуска программ (в данном тексте он отображен неправильно: сервер нужно запускать раньше клиента).
Этот сценарий можно модифицировать. Например, на объекте атаки запускать netcat только в режиме клиента, а на узле атакующего – только в режиме сервера, или наоборот (придерживаясь при этом правильного порядка запуска: сервер должен запускаться ранее клиента).
Манипулирование режимами запуска netcat, вместе с правильным выбором номеров портов, может разрешить во многих случаях преодолеть межсетевой (сетевой) экран, если последний применяется для защиты объекта атаки (например, если используется рассмотренный выше сценарий, во многих случаях может оказаться удачным выбор xxxx = 80 (порт HTTP-Сервера), yyyy = 25 (порт SMTP-Сервера)).
Применение netcat для создания скрытых каналов передачи данных
Рассмотрим, например, как с помощью netcat передать файл из сокета troy:xxxx на сокет mac:yyyy.
Для этого достаточно на узле mac выполнить что-то наподобие:
а на узле troy:
Здесь, снова таки, надлежащее манипулирование режимами запуска netcat и номерами портов может помочь преодолеть ограничения, которые накладываются межсетевыми (сетевыми) экранами.
Твитнуть