netcat
netcat (NetCat) | |
---|---|
Тип | сетевая утилита (TCP, UDP) |
Разработчик | *Hobbit* |
Написана на | C |
Операционная система | UNIX |
Первый выпуск | 28 октября 1995 |
Аппаратная платформа | Windows |
Последняя версия | 1.12 (21 апреля 2011) |
Лицензия | GPL |
Сайт | netcat.sourceforge.net |
Медиафайлы на Викискладе |
netcat (англ. net сеть cat) — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, данная утилита не входит ни в какой стандарт (например, POSIX).
Действие
[править | править код]В простом случае NetCat вызывается как:
nc host port
Это приводит к созданию TCP-подключения с указанными реквизитами и замыканием стандартного ввода на сетевой вывод и наоборот, стандартного вывода на сетевой ввод. Такая функциональность напоминает команду cat, что обусловило выбор имени «netcat». При невозможности подключения программа выводит сообщение об ошибке на stderr.
Утилита распознаёт следующие ключи:
-h | Справка; ничего не делается |
-v | Дополнительная диагностика (verbose) |
-o выходной_файл | Выводить дампы данных |
-i число | Задержка между отправляемыми данными (в секундах) |
-t | Совместимость с Telnet |
-z | Не посылать данные (сканирование портов) |
-u | Подключаться по UDP (вместо TCP) |
-l | Пассивный режим (прослушивание порта) |
-p число | * Локальный номер порта (для -l) |
-s host | Использовать заданный локальный («свой») IP-адрес |
-n | Отключить DNS и поиск номеров портов по /etc/services |
-w число | Задать тайм-аут (в секундах) |
-q число | Задать время ожидания после EOF на входе (в секундах) ** |
-e исполняемый_файл | ! Запустить указанную программу для обмена данных с сетью (вместо стандартных ввода и вывода) |
-с команда | ! То же, в виде команды для /bin/sh |
-k | Продолжить слушать другие соединения после того как текущее соединение было завершено. |
! — требуется специальная сборка, в поставляемых исполняемых файлах отключено (легко создаёт сетевую уязвимость).
* — в некоторых реализациях номер порта для прослушивания задаётся через -l, а ключ -p отсутствует.
** — имеется не во всех версиях.
Опции:
- -d. Доступна только в Windows. Переводит Netcat в режим невидимки. Можно запустить программу в режиме прослушивания, не открывая окно режима MS-DOS. Это также позволяет взломщикам лучше маскировать работающую программу от системных администраторов.
- -e <command>. Если Netcat скомпилирован с опцией GAPING_SECURITY_HOLE, программа может выполнять команду <command> всякий раз, когда кто-либо устанавливает соединение с прослушиваемым портом, до тех пор, пока клиент Netcat перенаправляет ввод/вывод работающей программе. Использовать эту опцию достаточно опасно, если вы не до конца представляете себе, что вы делаете. Это быстрый и простой способ открыть "черный ход" в вашу систему. Пример будет приведен далее.
- -i <seconds>. Интервал задержки между пересылками порций данных. Если через конвейер Netcat проходит файл, то программа ждет <seconds> секунд перед тем, как передать следующую строку, поступившую на вход. Если вы используете Netcat для управления несколькими портами на одном хосте, Netcat ждет <second> секунд перед тем, как соединится со следующим портом из перечисленных в строке. Это дает возможность немного замаскировать передачу данных или атаку системной службы, и это позволяет замаскировать сканирование портов от некоторых программных средств, анализирующих попытки внедрения, и от системных администраторов.
- -g <route-list>. Использование этой опции может быть весьма нетривиальным. Netcat поддерживает возможность маскировки начала маршрутизации (более подробно обсуждается в разделе "Создайте друга: подмена IP-адресов"). Вы можете определить до восьми -g опций в командной строке, чтобы заставить Netcat передавать трафик через определенные IP-адреса, которые обычно используются в случае, если вы подменяете исходящий IP-адрес, с которого поступает ваш трафик (например, для того, чтобы попытаться преодолеть брандмауэр или проверку разрешенных для доступа хостов). Используя этот прием на машине, с которой вы осуществляете управление процессом, вы можете заставить передаваемые пакеты возвращаться по указанному вами адресу вместо продвижения их по реальному направлению. Заметьте, что это обычно не срабатывает, поскольку большинство маршрутизаторов игнорируют опции источника маршрутизации, а многие фильтры и файрволы протоколируют такие попытки.
- -G <hop pointer>. Эта опция позволяет внести изменения в список маршрутизации, определенный параметром -g с тем, чтобы определить, к какому из адресов переходить. Поскольку IP-адрес - это четырехбайтовое число, этот аргумент всегда представляет собой число, кратное четырем, где 4 означает первый IP-адрес в списке, 8 - второй и так далее. Эта опция обычно используется в том случае, если вы пытаетесь так подделать список маршрутизации, чтобы он выглядел, как будто пакеты приходят откуда-то из другого места. Пропуская первые два IP-адреса, прописанные в списке, определенном опцией -g, и указав в параметре -G число 12, вы определите маршрутизацию пакетов непосредственно на третий адрес в вашем списке маршрутизации. Реальное содержание пакета по-прежнему будет содержать IP-адреса, которые были пропущены, создавая видимость, что пакеты пришли с одного адреса, тогда как на самом деле они пришли откуда-то еще. Этот прием позволяет скрыть, откуда вы пришли на хост, при использовании подмены адресов или списк а маршрутизации, но не факт, что у вас будет возможность получить ответ, поскольку он будет передаваться обратно по маршруту через ваши поддельные IP-адреса.
- -l. Эта опция переключает режим "прослушивания" Netcat. Она используется совместно с опцией -p, чтобы привязать Netcat к определенному TCP-порту и ожидать входящих соединений. Чтобы использовать UDP-порт, воспользуйтесь опцией -u.
- -L. Доступная только в Windows-версии программы, более жесткая опция режима "прослушивания", чем -l. Она указывает программе на необходимость перезапуска с теми же параметрами в случае, если соединение было закрыто. Это дает Netcat возможность отслеживать последующие соединения без вмешательства пользователя, каждый раз после завершения первоначального соединения. Как и в случае с опцией -l, эту опцию необходимо использовать совместно с опцией -p.
- -n сообщает Netcat, что не нужно осуществлять поиск каких-либо хостов. Если вы используете эту опцию, не следует указывать никаких имен хостов в качестве аргументов.
- -o <hexfile> обеспечивает создание шестнадцатеричного дампа данных и сохранение его в файле hexfile. Команда nc -o hexfile записывает данные, проходящие в обоих направлениях, и начинает каждую строку с символов < или > для обозначения соответственно входящих или исходящих данных. Чтобы записывать в файл только входящие данные, вам следует использовать команду nc -o <hexfile. Соответственно для записи только исходящих данных воспользуйтесь командой nc -o >hexfile.
- -p <port>. Опция позволяет вам определить локальный номер порта, который следует использовать Netcat. Этот аргумент требуется в случае, если вы используете опции -l или -L для режима прослушивания. Если эта опция не определена для исходящего соединения, Netcat будет использовать порт, который определен для этого в системе, что и делают большинство TCP или UDP клиентов. Имейте в виду, что в Unix-системах только пользователь root может определять номера портов меньше чем 1024.
- -r. Netcat выбирает локальный и удаленный порт случайным образом. Эта опция полезна в случае, когда Netcat используется для получения информации о большом интервале номеров портов в системе и при этом представить ситуацию так, чтобы это было в меньшей степени похоже на процедуру сканирования портов. В случае если эта возможность используется совместно с опцией -i и с достаточно большим интервалом, то велика вероятность, что сканирование портов не будет обнаружено без внимательного изучения системного журнала администратором.
- -s определяет исходящий IP-адрес, который Netcat использует для установки соединения. Эта опция позволяет взломщикам выполнять несколько изящных фокусов: скрыть свой IP-адрес или подделать что-либо еще. Но чтобы получить информацию, отправляемую на подмененный адрес, им необходимо использовать опцию определения порядка маршрутизации -g. Далее, используя режим прослушивания, вы можете многократно привязываться к уже прослушанному сервису. Все TCP- и UDP-сервисы работают с портами, но не каждый из них работает с конкретным IP-адресом. Многие службы по умолчанию прослушивают все доступные интерфейсы. Syslog, к примеру, прослушивает UDP-порт 514 для считывания трафика syslog. В то же время, если вы запустили Netcat на прослушивание 514 порта и использовали опцию -s для определения исходящего IP-адреса, любой трафик, проходящий через определенный вами IP-адрес, в первую очередь будет направляться через Netcat. Почему? Если сокет определяет и IP-адрес, и номер порта, это определяет его приоритет над сокетом, который не определяет обоих параметров. Позже мы расскажем об этом подробнее и продемонстрируем, как определить, какой сервис в системе может быть определен заранее.
- -t. Откомпилированный с опцией TELNET, Netcat может поддерживать взаимодействие с telnet-сервером в соответствии с установленными соглашениями, отвечая незначащей информацией, но дает вам возможность ввести информацию в ответ на приглашение ввести login, когда вы используете TCP-соединение по 23 порту.
- -u. Опция сообщает программе о необходимости использовать UDP-протокол вместо TCP, работая как в режиме прослушивания, так и в режиме клиента.
- -v определяет, насколько подробно программа информирует вас о том, что она делает. Если не использовать опцию -v, Netcat выдает только принятую информацию. Если опция -v использована один раз, вы сможете узнать, с каким адресом произошло соединение или какой адрес отслеживается в случае, если возникли какие-то проблемы. Повторное использование опции позволит узнать, какое количество данных было послано или принято до завершения соединения.
- -w <seconds> определяет промежуток времени, в течение которого Netcat ждет соединения. Этот параметр также сообщает, как долго следует ожидать после получения сигнала EOF (конец файла) на стандартный вход перед разрывом соединения и завершением работы. Это особенно важно, если вы посылаете команды удаленному серверу с использованием Netcat и ожидаете получить большой объем информации (к примеру, посылая веб-серверу HTTP команду на загрузку большого файла).
- -z. Если вы беспокоитесь только о том, чтобы определить, какой из портов открыт, вам следует использовать nmap (см. лекцию "Сканеры портов"). Но эта опция сообщает Netcat о необходимости послать достаточно данных для поиска открытых портов в заданном диапазоне значений.[1]
Применение
[править | править код]- Тестирование и ручная работа с сетевыми протоколами;
- Проверка доступности портов;
- Сетевой интерфейс для командного интерпретатора UNIX (впрочем, некоторые версии bash умеют подключаться к TCP и UDP самостоятельно);
- (С ключом -l) создание простых серверов, обычно тестовых;
- (Совместно с inetd) перенаправление портов.
Примеры
[править | править код]Под Windows:
Запустить CMD перейти в папку с netCat (например C:\netcat\)
Для создания чата между хостами
[править | править код]На одной машине (10.10.10.1) открываем порт 1234 для прослушивания: nc -l -p 1234 На другой машине необходимо выполнить подключение к хосту 10.10.10.1 на порт 1234: nc 10.10.10.1 1234
Отправка текста по Enter. Разрыв соединения CTRL C
Для ubuntu удалите из ключей "-p ".
Отображение тестовой HTML-странички клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080
Передача файла клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200 OK\nContent-Disposition: attachment; filename=целевое-имя-которое-увидит-клиент\nContent-Type: application/octet-stream\nConnection: close\n"; cat имя-файла-на-диске ) | nc -vv -l -p 8080
Передача текущего каталога со всеми файлами и подкаталогами по Интернету или Интранету, порт 3333, с распаковкой в текущий каталог (tarpipe):
nc -l -p 3333 | tar xv (выполняется на приёмной стороне)
tar cv * | nc -q 0 ip.адрес.приёмной.стороны 3333 (выполняется на передающей стороне)
Имена команды
[править | править код]nc, netcat, ncat, pnetcat (в разных системах).
См. также
[править | править код]Примечания
[править | править код]- ↑ fker. все про NETCAT (англ.). ANTICHAT - Security online community (23 февраля 2009). Дата обращения: 5 декабря 2019. Архивировано 5 декабря 2019 года.
Ссылки
[править | править код]- GNU Netcat (англ.) — официальный сайт проекта
- Netcat для Windows