Расскажите друзьям о статье...
Share on VK
VK
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter

Программа 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, и галочку, чтобы использовать этот прокси для всех соединений.
Теперь при попытке зайти на сайт какой-нибудь мы попадаем на авторизацию прокси.

Расскажите друзьям о статье...
Share on VK
VK
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.