Программа Netcat — сетевая утилита Unix, с помощью которой можно анализировать и моделировать работу многих сетевых протоколов, выполнять команды на удалённой машине, принимать или передавать на нее данные, перенаправлять трафик с одного порта на другой или с одной машины на другую.
У netcat (nc) много вариантов названий, например ncat, gnu-netcat, openbsd-netcat, dbd, sbd, cryptcat.
Ncat имеет два основных режима: режим подключения и режим прослушивания.
При режиме подключения, программа соединяется с сетевыми службами, среди которых может быть как другой экземпляр запущенной Ncat, так и большинство других сервисов, например, HTTP (веб-сервер), почтовый сервер, FTP сервер, Telnet и так далее.
Второй режим работы Ncat называется «прослушивание», для включения этого режима необходимо указать ключ -l и IP адрес интерфейса, на котором выполнять прослушивание (по умолчанию слушает все интерфейсы) и порт для прослушивания (по умолчанию используется порт 31337).
В данном режиме с ключами позволяет Ncat:
— передавать полученные данные системе в качестве команд для выполнения;
— возвращать подключившемуся хосту файл (выполняла роль веб-сервера или использовалась для скачивания файла с удалённого хоста)
перенаправляла запросы на другой порт или адрес;
— работать в качестве прокси.
Причём подключиться к Ncat в режиме прослушивания может как другой экземпляр Ncat (например, для передачи команд), так и другая программа — например, веб-браузер для просмотра или скачивания файла, либо другая программа поддерживающая работу через прокси.
Какие ключи Netcat можно использовать ?
-h — получение справки о командах;
-v — дополнительная диагностик; Если не использовать опцию -v, Netcat выдает только принятую информацию. Если опция -v использована один раз, вы сможете узнать, с каким адресом произошло соединение или какой адрес отслеживается в случае, если возникли какие-то проблемы. Повторное использование опции позволит узнать, какое количество данных было послано или принято до завершения соединения.
-o выходной_файл — выводить дампы данных в файл;
-i число — устанавливать в секундах задержку между отправляемыми данными;
-t — совместимость с Telnet;
-z — не посылать данные (сканирование портов);
-u — подключаться по UDP (вместо TCP);
-l — переход в пассивный режим (прослушивание порта);Если эта опция не определена для исходящего соединения, Netcat будет использовать порт, который определен для этого в системе, что и делают большинство TCP или UDP клиентов. Имейте в виду, что в Unix-системах только пользователь root может определять номера портов меньше чем 1024.
-p число — локальный номер порта (для -l);
-s host — использовать заданный локальный («свой исходящий») IP-адрес; Эта опция позволяет взломщикам выполнять несколько изящных фокусов: скрыть свой IP-адрес или подделать что-либо еще. Но чтобы получить информацию, отправляемую на подмененный адрес, им необходимо использовать опцию определения порядка маршрутизации -g. Далее, используя режим прослушивания, вы можете многократно привязываться к уже прослушанному сервису. Все TCP- и UDP-сервисы работают с портами, но не каждый из них работает с конкретным IP-адресом. Многие службы по умолчанию прослушивают все доступные интерфейсы. Syslog, к примеру, прослушивает UDP-порт 514 для считывания трафика syslog. В то же время, если вы запустили Netcat на прослушивание 514 порта и использовали опцию -s для определения исходящего IP-адреса, любой трафик, проходящий через определенный вами IP-адрес, в первую очередь будет направляться через Netcat. Почему? Если сокет определяет и IP-адрес, и номер порта, это определяет его приоритет над сокетом, который не определяет обоих параметров.
-n — отключить DNS и поиск номеров портов по /etc/services. сообщает Netcat, что не нужно осуществлять поиск каких-либо хостов. Если вы используете эту опцию, не следует указывать никаких имен хостов в качестве аргументов.
-w число — задать тайм-аут (в секундах).Определяет промежуток времени, в течение которого Netcat ждет соединения. Этот параметр также сообщает, как долго следует ожидать после получения сигнала EOF (конец файла) на стандартный вход перед разрывом соединения и завершением работы. Это особенно важно, если вы посылаете команды удаленному серверу с использованием Netcat и ожидаете получить большой объем информации (к примеру, посылая веб-серверу HTTP команду на загрузку большого файла).
-q число — задать время ожидания после EOF на входе (в секундах) **
-e исполняемый_файл — ! запустить указанную программу для обмена данных с сетью (вместо стандартных ввода и вывода)
-с команда — ! то же, в виде команды для /bin/sh
-k — продолжить слушать другие соединения после того как текущее соединение было завершено.
-d — Доступна только в Windows. Переводит Netcat в режим невидимки. Можно запустить программу в режиме прослушивания, не открывая окно режима MS-DOS. Это также позволяет взломщикам лучше маскировать работающую программу от системных администраторов;
-e <command> — Если Netcat скомпилирован с опцией GAPING_SECURITY_HOLE, программа может выполнять команду <command> всякий раз, когда кто-либо устанавливает соединение с прослушиваемым портом, до тех пор, пока клиент Netcat перенаправляет ввод/вывод работающей программе. Использовать эту опцию достаточно опасно, если вы не до конца представляете себе, что вы делаете. Это быстрый и простой способ открыть «черный ход» в вашу систему. Пример будет приведен далее;
-r — Netcat выбирает локальный и удаленный порт случайным образом. Эта опция полезна в случае, когда Netcat используется для получения информации о большом интервале номеров портов в системе и при этом представить ситуацию так, чтобы это было в меньшей степени похоже на процедуру сканирования портов. В случае если эта возможность используется совместно с опцией -i и с достаточно большим интервалом, то велика вероятность, что сканирование портов не будет обнаружено без внимательного изучения системного журнала администратором.
Примеры использования утилиты NetCat.
1. Проверить открытый tcp-порт 22 на хосте 192.168.0.10 :
ncat -vn 192.168.0.10 22
если порт закрыт, то получим ответ:
ncat: connect to 192.168.0.10 22 (tcp) failed: Connection refused
если порт открыт, то команда выведет:
Connection to 192.168.0.10 22 port [tcp/ssh] succeeded! SSH-2.0-OpenSSH
2. Просканировать хост 192.168.0.10 на порты 20-24:
ncat -vnz 192.168.0.10 20-24
Вывод:
nc: connectx to 192.168.0.10 port 20 (tcp) failed: Connection refused nc: connectx to 192.168.0.10 port 21 (tcp) failed: Connection refused found 0 associations found 1 connections: 1: flags=82<CONNECTED,PREFERRED> outif en0 src 192.168.0.10 port 50168 dst 192.168.0.10 port 22 rank info not available TCP aux info available Connection to 192.168.0.10 port 22 [tcp/*] succeeded! nc: connectx to 192.168.0.10 port 23 (tcp) failed: Connection refused nc: connectx to 192.168.0.10 port 24 (tcp) failed: Connection refused
3. Просканировать хост 192.168.0.10 на UDP-порты 5550-5560:
ncat -vnzu 192.168.0.10 5550-5560
Вывод:
Connection to 192.168.0.10 port 5555 [udp/*] succeeded!
4. Отправить UDP-пакет на 161 порт:
echo -n "foo" | ncat -u -w1 192.168.0.10 161
5.Прием данных на UDP-порту 7777:
ncat -u localhost 7777
После первого сообщения вывод будет остановлен. Если необходимо принять несколько сообщений, то необходимо использовать while true:
hile true; do ncat -u localhost 7777; done
6. Передача файлов. С помощью netcat можно как получать файлы, так и передавать на удаленный хост:
Получить файл с удаленного компьютера:
ncat -l 192.168.0.10 7777 < file.txt
ncat -lvp 7777 > /tmp/1.txt
7. Запустить Netcat в роли веб-сервера.
Создадим файл index.http и добавим в него следующее содержимое:
HTTP/1.0 200 OK <html> <body> <h1>Hello, world!</h1> </body> </html>
Запустим на сервере Ncat:
ncat -l 4433 < hello.http
В веб-браузере откроем адрес удалённого хоста с указанием порта: http://1.1.1.1:4433
Ещё один пример из официального мануала по ncat:
ncat -lk -p 8080 --sh-exec "echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html"
Или, если вы пользователь Windows:
ncat -lk -p 8080 --sh-exec "echo HTTP/1.1 200 OK& echo(&type index.html"
Эти команды запустят HTTP сервер, делающий доступным файл index.html из текущей рабочей директории. Чтобы открыть этот файл нужно в браузере посетить страницу http://localhost:8080/. Если вместо -p 8080 указать -p 80, то из URL можно удалить :8080. Обратите внимание, что этот файл будет отправлен независимо от запрошенного URL — чтобы изменить файл, который отправляется, нужно изменить команду Ncat или использовать скрипт httpd.lua.
8. Чат между узлами Netcat.
На первом узле (192.168.0.10):
ncat -lp 5555
На втором узле:
nc 192.168.0.10 5555
После выполнения команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.
9. В качестве прокси сервера Ncat поддерживает только тип HTTP.
Поддерживается создание HTTP прокси как к аутентификацией, так и без:
ncat -l 3128 --proxy-type http ncat -l 3128 --proxy-type http --proxy-auth <пользователь>:<пароль>
Здесь:
-l — включает режим прослушивания
3128 — означает прослушивать указанный номер порта
—proxy-type http — означает выбор типа прокси
—proxy-auth <пользователь>:<пароль> — устанавливает учётные данные для авторизации на прокси сервере
К примеру, на хостинге запускаем прокси сервер:
ncat -l 43210 --proxy-type http --proxy-auth user:pass
Теперь в настройках веб-браузера указываем соответствующий IP и порт, которые прослушивает ncat, и галочку, чтобы использовать этот прокси для всех соединений.
Теперь при попытке зайти на сайт какой-нибудь мы попадаем на авторизацию прокси.