- Установка NetCat
- Установка NetCat на Windows
- Виртуальный сервер на базе Windows
- Что это такое
- Установка
- Примеры использования
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Как пользоваться netcat (nc), ncat
- Оглавление
- Для чего Netcat
- Версии Netcat
- netcat (nc)
- gnu-netcat
- openbsd-netcat или netcat-openbsd
- cryptcat
- netrw
- webhandler
- Ncat: ваш универсальный сетевой коннектор
- Принципы работы Ncat
- Подключение к HTTP в Ncat
- Подключение через SSL (HTTPS) в Ncat
- Режим прослушивания Ncat
- Запуск команд через ncat
- Подключение к Ncat если удалённая машина находиться за NAT
- Как сделать так, чтобы при закрытии клиента Ncat, не отключался сервер Ncat
- Как передать файлы на удалённый компьютер
- Как загрузить файл с удалённого компьютера
- Как сделать веб-сервер с Ncat
- Как с помощью Ncat получить доступ к службам, доступным только в локальной сети
- Использование SSH через туннель Ncat
- Как Ncat превратить в прокси
- Как разрешить подключение к Ncat с определённых IP
- Отправка почты
- Создание цепей последовательной передачи трафика между нескольких Ncat
- Очистка от SSL
- Ncat как SSL сервер
- Сканирование портов
- Закрепление на удалённой машине
- Эмуляция диагностических служб
- Заключение
Установка NetCat
Рассмотрим процесс установки системы.
Введите в адресной строке браузера адрес сайта. В том случае, если система у вас ещё не установлена, вы автоматически попадёте на страницу установщика:
Нажмите на кнопку «Приступить к проверке».
Введите данные доступа к базе данных.
Обратите внимание на возможные предупреждения системы. Следите за тем, чтобы не было критических ошибок.
На следующем шаге нужно выбрать тип установки: демо или коммерческая версия.
Как и указано на скриншоте, демо—версия устанавливается только на 60 дней, после чего её нужно будет активировать. Для установки коммерческой версии вам понадобится ввести регистрационный номер и ключ активации.
Выберите нужный тип установки и нажмите на кнопку «Продолжить».
На следующем шаге нужно определиться с вариантами установки. Их всего три:
- Установить минимальный набор. Будет установлена чистая система, без демо–сайтов, без макетов дизайна, компонентов и виджет–компонентов. Этот вариант идеально подходит для опытных разработчиков.
- Выбрать комплектацию системы вручную. Вы сами можете выбрать, какие элементы системы должны быть установлены.
- Установить систему с готовыми сайтами и данными. Если выбрать этот параметр, система будет установлена в полной комплектации. В полную комплектацию будут включены: демо-сайты, набор компонентов, виджет-компонентов и списков.
Введите пароль администратора либо сгенерируйте его и нажмите на кнопку «Установить NetCat».
На следующем шаге будут установлены все необходимые компоненты системы, а так же создана база данных. Нажмите на кнопку «Завершить установку».
На последнем шаге вам будут выведены все необходимые адреса: сайта, системы администрирования и режима редактирования. Обязательно удалите папку install с сервера после завершения установки.
После установки системы рекомендуется выставить следующие права:
Установка NetCat на Windows
В этом руководстве будет рассмотрен процесс установки и использования утилиты netcat на виртуальных серверах под управлением операционной системы семейства Windows.
Виртуальный сервер на базе Windows
- Лицензия включена в стоимость
- Тестирование 3-5 дней
- Безлимитный трафик
Что это такое
Netcat — сетевая утилита, которую часто называют “Швейцарским армейским ножом”, используется для чтения или записи по TCP и UDP соединениям, используя простой интерфейс.
Установка
Загрузите архив с утилитой.
Перейдите в каталог с загрузками и распакуйте содержимое архива в любое удобное место.
В нашем примере мы будем использовать каталог “C:\Program files\netcat”.
При перемещении Вам необходимо ввести пароль “nc”.
Содержимое каталога после перемещения файлов.
Далее откройте командную строку Windows или PowerShell. С помощью команды cd перейдите в каталог с файлами: cd ‘C:\Program files\netcat’
Запустите утилиту netcat: .\nc.exe
В поле открывшейся командной строки можно начинать работу с утилитой. Для вывода доступных опций воспользуйтесь ключом -h: nc -h
-d | detach from console, background mode | фоновый режим работы |
-e prog | inbound program to exec [dangerous!!] | программа на исполнение для обмена данными с сетью |
-g gateway | source-routing hop point[s], up to 8 | свободная маршрутизация пакета от источника по указанному маршруту, максимум 8 точек |
-G num | source-routing pointer: 4, 8, 12, … | свободная маршрутизация пакета от источника по указанному количеству указателей |
-h | this cruft | вывод справочной информации |
-i secs | delay interval for lines sent, ports scanned | задержка между отправляемыми данными в секундах |
-l | listen mode, for inbound connects | режим прослушивания порта, для входящих подключений |
-L | listen harder, re-listen on socket close | повторное прослушивание сокета закрытия |
-n | numeric-only IP addresses, no DNS | использование IP-адреса, а не DNS записи |
-o file | hex dump of traffic | вывести дамп данных |
-p port | local port number | локальный номер порта |
-r | randomize local and remote ports | cлучайные локальные и удаленные порты |
-s addr | local source address | определяет заданный IP-адрес для использования |
-t | answer TELNET negotiation | совместимость с telnet |
-u | UDP mode | режим подключения по UDP |
-v | verbose [use twice to be more verbose] | дополнительная диагностика |
-w secs | timeout for connects and final net reads | таймаут подключения в секундах |
-z | zero-I/O mode [used for scanning] | не посылать данные |
Примеры использования
На первой машине с IP-адресом X.X.X.X выполните команду nc с указанием порта, например 80.
Для Linux: nc -l -p 80
Для Windows после запуска утилиты netcat: -l -p 80
На другой машине, которая подключается, выполните команду, указав IP-адрес первой машины и порт.
Для Linux: nc X.X.X.X 80
- Получаем код страницы и дополнительную информацию с помощью GET-запроса. PS C:\Program Files\netcat> .\nc.exe
- Сканирование портов. PS C:\Program Files\netcat> .\nc.exe PS C:\Program Files\netcat> .\nc.exe
- Чат-сервер
Для Windows: X.X.X.X 80
В пустой строке начинайте писать сообщение, после нажатия Enter оно будет отправлено.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как пользоваться netcat (nc), ncat
Оглавление
Для чего Netcat
Программа Netcat — это полезная сетевая утилита, с помощью которой можно анализировать и моделировать работу многих сетевых протоколов (например, как это делать с HTTP и почтовым протоколом будет показано далее), можно выполнять команды на удалённой машине и закачивать или скачивать с неё файлы, перенаправлять трафик с одного порта на другой или с одной машины на другую. Безусловно, пентестеру (аудитору сетевой безопасности) нужно хорошо разбираться в сетевых протоколах и уметь использовать Netcat в процессе обучения.
Но по-настоящему ценность Netcat для пентестера в том, что это самый настоящий бэкдор! Причём поскольку утилита весьма полезная для администраторов сети, то она во многих системах, в том числе серверах, установлена по умолчанию.
Кстати: Если вы попали на эту статью так как вас интересует вопрос, как создать шелл (и что это такое, в чём отличие прямого и обратного шелла), то вам должна больше подойти тема «Как сделать прямой и обратный шелл (бэкдор) с Netcat».
То есть если в веб-приложении найдена уязвимость, к примеру, выполнение произвольных команд уровня системы, то среди разных путей эксплуатации, можно выбрать запуск Netcat, которая, если правильно её запустить, будет выполнять функции полноценного бэкдора, передавая наши команды системе. Причём Netcat имеет два режима: режим прослушивания и режим подключения. Если удалённый компьютер находиться за NAT и нет никакой возможности подключиться к нему напрямую по IP, то Netcat опять придёт на помощь! В режиме подключения она сама подсоединится к вашему компьютеру.
В статье про RouterSploit («Инструкция по использованию RouterSploit») в одном из проверяемых роутеров (это был мой собственный роутер) была найдена уязвимость удалённого выполнения команд, правда было ограничение на количество возвращаемой информации — она обрезалась после определённого числа символов. В подобных ситуациях можно использовать Netcat: в качестве команды на уязвимом роутере нужно запустить nc, затем подключиться к нему; в этом случае появится возможность выполнять команды через Netcat без ограничения на количество выводимой информации.
Можно предположить более трудный вариант — когда уязвимость удалённого внедрения команд присутствует, но вывод любых сообщений подавляется. В этом случае вновь удобнее работать через Netcat.
Кстати, Netcat настолько популярна, что по умолчанию присутствует даже в некоторых продвинутых роутерах — в том моём роутере Netcat установлена.
Само собой, использовать Netcat можно не только в деструктивных целях. Эта программа по своему прямому назначению будет очень полезна для сетевых администраторов и веб-мастеров. Например, у меня на виртуальном хостинге Netcat тоже присутствует.
Версии Netcat
Так получилось, что у Netcat много вариантов написанных разными авторами. Оригинальная версия называлась netcat (nc). Она быстро получила признание, но в какой-то момент автор перестал её разрабатывать и, несмотря на её популярность, также никто другой не стал поддерживать. По этой причине программу несколько раз переписывали разные авторы, причём иногда полностью с нуля.
netcat (nc)
Это оригинальная программа, последний выпуск которой состоялся в январе 2007 года. Её версия 1.10.
В некоторых системах, например, в Kali Linux, эта версия называется nc.traditional:
Выведет справку по этой программе и покажет версию [v1.10-41.1]
Это современный вариант netcat, который написан с нуля, без использования кода оригинальной netcat. Авторами ncat являются авторы знаменитой программы Nmap.
Ncat повторяет практически всю функциональность оригинальной программы и содержит дополнительные функции.
Ncat стала официальной заменой для оригинальной netcat в некоторых дистрибутивах Linux, например, в Red Hat Enterprise Linux, CentOS, которые часто используются в качестве веб-серверов. По этой причине на многих компьютерах в сети вы найдёте именно Ncat — к примеру, на моём виртуальном хостинге в качестве Netcat установлена Ncat.
Ncat поставляется в пакете Nmap и, следовательно, доступна для разных платформ, в том числе для Windows. То есть для установки Ncat на Windows достаточно установить NMap.
В Kali Linux Ncat почему-то содержится в пакетах для архитектуры i386 и не содержится в пакете NMap, поэтому установка выполняется так:
В Arch Linux, BlackArch и их производные для установки Ncat достаточно установить NMap:
gnu-netcat
GNU версия netcat, как сказано в описании «network piping application».
openbsd-netcat или netcat-openbsd
Вариант от OpenBSD. Как сказано в описании, армейский нож для работы с TCP/IP.
Ещё один клон Netcat, создан быть портативным и предлагает надёжное шифрование. Он работает на Unix подобных операционных системах и на Microsoft Win32.
И ещё один клон Netcat, портативный, предлагает надёжное шифрование, среди функций: шифрование AES-128-CBC + HMAC-SHA1, выполнение программ (-e), выбор порта источника, непрерывное переподключение с задержкой и другие возможности.
Или как сказано в другом описании: безопасный бэкдор для Linux и Windows.
cryptcat
Легковесная версия netcat, с добавленным шифрованием twofish.
netrw
Похожий на netcat инструмент с удобными функциями передачи файлов по сети.
webhandler
Обработчик системных функций PHP, а также альтернативный обработчик netcat.
Другие варианты этого классического инструмента включают в себя удивительно универсальный Socat, OpenBSD nc, Cryptcat, Netcat6, pnetcat, SBD и так называемый GNU Netcat.
В некоторых системах модифицированные версии или аналогичные утилиты netcat используют имена команд: nc, ncat, pnetcat, socat, sock, socket, sbd.
Итак, для своей работы вы можете выбрать одну из этих версий, какая вам больше нравится. При поиске интересных программ на чужих машинах, не нужно забывать об альтернативных вариантах, если сама netcat там отсутствует.
В этой инструкции я буду рассматривать преимущественно ncat.
Ncat: ваш универсальный сетевой коннектор
Начнём с описания Ncat взятого с официального сайта, чтобы как можно полнее охватить список возможностей этой программы. А затем мы перейдём к конкретным практическим примерам исходя из разных сценариев использования.
Ncat — это инструмент командной строки общего назначения для чтения, записи, перенаправления и шифрования данных в сети. Он призван стать вашим армейским швейцарским ножом при работе в сети, решающим широкий спектр задач по тестированию безопасности и администрированию. Ncat подходит для интерактивного использования или в качестве подключённого к сети бэкенда для других инструментов. Ncat может:
- Выступать в качестве простого клиента TCP/UDP/SCTP/SSL для взаимодействия с веб-серверами, серверами Telnet, почтовыми серверами и другими сетевыми службами TCP/IP. Часто лучший способ понять службу (для устранения проблем, поиска уязвимостей в безопасности или тестирования пользовательских команд) — это взаимодействовать с ней с помощью Ncat. Это позволяет вам контролировать каждый отправленный символ и просматривать необработанные, нефильтрованные ответы.
- Выступать в качестве простого сервера TCP/UDP/SCTP/SSL для предоставления услуг клиентам или просто для понимания того, что делают существующие клиенты, захватывая каждый байт, который они отправляют.
- Перенаправить или проксировать TCP/UDP/SCTP трафик на другие порты или хосты. Это можно сделать с помощью простого перенаправления (все, что отправлено на порт, автоматически ретранслируется в другое место, указанное вами заранее) или в качестве прокси-сервера SOCKS или HTTP, чтобы клиенты указывали свои собственные назначения. В режиме клиента Ncat может подключаться к адресатам через цепочку анонимных или аутентифицированных прокси.
- Работать на всех основных операционных системах. Имеются скомпилированные исполнимые файлы для Linux, Windows и Mac OS X, и в целом Ncat может быть скомпилирована на большинстве других систем. Надёжный инструмент должен быть доступен в любое время, независимо от того, какой компьютер вы используете.
- Шифровать связь с помощью SSL и передавать её по IPv4 или IPv6.
- Выступать в качестве сетевого шлюза для выполнения системных команд с перенаправлением ввода/вывода в сеть. Программа была разработана, чтобы работать как Unix утилита cat, но для сети.
- Выступать в качестве посредника соединений, позволяя двум (или даже более) клиентам подключаться друг к другу через третий (посреднический) сервер. Это позволяет нескольким машинам, скрытым за шлюзами NAT, обмениваться данными друг с другом, а также включает режим простого чата Ncat.
Эти возможности становятся ещё более мощными и универсальными в сочетании друг с другом.
Ncat — это современная реинкарнация почтенного инструмента Netcat (nc), выпущенного Хоббит (Hobbit) в 1996 году. Хотя Ncat по духу похож на Netcat, они не имеют общего исходного кода. Вместо этого Ncat использует хорошо оптимизированные и протестированные сетевые библиотеки Nmap. Поддерживается совместимость с исходным Netcat и некоторыми хорошо известными вариантами, когда он не конфликтует с улучшениями Ncat и не вызывает проблем с удобством использования. Ncat добавляет много возможностей, которых нет в оригинальном nc Хоббит, включая поддержку SSL, прокси-соединения, IPv6 и посреднические (брокерские) соединения. Оригинальный nc содержал простой сканер портов, но авторы Ncat не стали добавлять эту функцию.
Принципы работы Ncat
Ncat имеет два основных режима: подключения и прослушивания.
При режиме подключения, программа соединяется с сетевыми службами, среди которых может быть как другой экземпляр запущенной Ncat, так и большинство других сервисов, например, HTTP (веб-сервер), почтовый сервер, FTP сервер, Telnet и так далее.
Второй режим работы Ncat называется «прослушивание». В этом режиме Ncat ожидает подключение от другого хоста. В данном режиме опциями можно включить дополнительные функции, например, сделать так, чтобы Ncat:
- передавала полученные данные системе в качестве команд для выполнения
- возвращала подключившемуся хосту файл (выполняла роль веб-сервера или использовалась для скачивания файла с удалённого хоста)
- перенаправляла запросы на другой порт или адрес
- работала в качестве прокси
Причём подключиться к Ncat в режиме прослушивания может как другой экземпляр Ncat (например, для передачи команд), так и другая программа — например, веб-браузер для просмотра или скачивания файла, либо другая программа поддерживающая работу через прокси.
Подключение к HTTP в Ncat
При подключении к удалённой службе вы вводите в виде простого текста команды (заголовки) данного протокола. Рассмотрим на примере протокола HTTP.
Подключимся к хосту hackware.ru на порту 80 (это служба HTTP сервера):
Кажется, что ничего не произошло:
Но на самом деле перед нами приглашение для ввода данных. Мы будем вводить заголовки протокола HTTP (это как команды, директивы — этими заголовками мы говорим веб-серверу, чего мы от него хотим; также заголовки используются в качестве передатчика метаинформации):
Обратите внимание, что после последней директивы (Host: hackware.ru) кнопка ENTER нажата дважды.
Сервер прислал нам ответ — HTML код.
Мы отправили правильные с точки зрения протокола HTTP заголовки (запросы). В первом мы указали использовать метод GET, показать главную страницу (/ означает запрос к корневой папке, а можно было бы указать конкретный путь, например, /index.php), и версию протокола HTTP/1.0.
Затем мы использовали директиву Host и вместе с ней указали интересующий нас хост (поскольку запрос делается к удалённому серверу по IP, а на этом IP множество виртуальных хостов). Кстати, можете попробовать сделать этот же запрос без указания хоста или с указанием другого хоста — полученные данные будут другими.
Вместо метода GET можно использовать метод HEAD и, например, сделаем запрос к произвольной странице:
Как можно увидеть, использование метода HEAD приводит к показу только заголовков ответа.
То есть с веб-сервером можно общаться редактируя HTTP директивы посимвольно, отправляя буквально что угодно. В случае, если «на той стороне» роль веб-сервера выполняет какое-нибудь нестандартное решение, то описанным способом можно провести тестирование того, что поддерживает удалённая служба и как реагирует на необычные заголовки и команды протокола.
Также таким способом можно тестировать методы обхода блокировок путём модификации запросов в рамках допустимого протоколом, благодаря чему можно добиться того, что основанные на паттернах системы DPI будут пропускать этот трафик к заблокированным ресурсам. Некоторые такие способы описаны в GoodbyeDPI: замена слова Host в заголовке на hoSt, удаление пробелом между именем заголовка и значением в заголовке Host, добавление лишних пробелов между HTTP методом (GET, POST и т.д.) и URI, смешение регистров значения заголовка Host и т.д. То есть с помощью ncat можно делать низкоуровневые проверки, отладки фильтров сети и работы удалённых служб. Это как Ассемблер, но только для сети.
Причём HTTP приведена просто в качестве примера — можно работать с разными службами у которых заголовки или команды представляют собой простой текст.
Вернёмся к нашей первой команде
В простейшем виде команда подключения имеет вид:
Ещё мы использовали опцию -C, она включает замену CRLF. То есть любые символы конца строки, которые мы вводим, будут заменены на CRLF. В качества конца строки требуется CRLF во многих протоколах, в том числе в HTTP, хотя многие серверы всё равно нормально принимают и обычный символ newline (LF). То есть на самом деле в данном случае можно было бы обойтись и без -C.
Подключение через SSL (HTTPS) в Ncat
Как мы можем увидеть что в первом, что во втором случае нам возвращается код ответа 302 Moved Temporarily — то есть делается редирект на другую страницу:
Как можно понять из директивы Location, нас перенаправляют на HTTPS протокол.
Чтобы в Ncat подключиться по SSL нужно:
- указать опцию —ssl
- указать соответствующий номер порта
Для протокола HTTPS портом по умолчанию является 443, поэтому подключаемся следующим образом:
В результате наконец-то нам показан HTML код запрашиваемой страницы:
Режим прослушивания Ncat
В этом режиме программа начинает прослушивать указанный порт в ожидании подключений. Для включения этого режима достаточно указать опцию -l. Опционально можно указать IP адрес интерфейса, на котором выполнять прослушивание (если не указать, то будет сделана привязка ко всем интерфейсам) и порт для прослушивания (если не указать, то по умолчанию используется порт 31337.
Для подключения к серверу, мне нужно будет знать IP адрес удалённого хоста, поэтому начинаю с команды, чтобы узнать его:
Запускаем программу на удалённом хосте в режиме прослушивания с привязкой к порту 43210
Кстати, я это делаю в SSH панели с веб доступом своего хостинга — потрясающая штука — работает прямо из личного кабинета:
Теперь с локального компьютера выполняю подключение:
В этом примере и далее я буду использовать IP адрес 185.26.122.50 — очевидно, что в своей работе вам нужно поменять его на IP адрес (или имя хоста) машины, к которой вы выполняете подключение. Ещё я использую порт 43210 — вы можете выбрать любой другой не занятый на удалённой машине порт.
В любом из окон ncat (сервер или клиент) можно вводить текст и он будет отображён в другом окне с подключённым экземпляром ncat.
Суть работы очень проста — из одного окна в другое передаётся введённый текст и выводиться в стандартный вывод — это поведение программы по умолчанию. С помощью других опций можно настроить более интересные варианты деятельности — например, передавать присланный текст в операционную систему для выполнения в качестве команд.
Запуск команд через ncat
С помощью опции -e прослушиващую Ncat можно подключить к программе, которой она будет передавать команды для выполнения. В качестве частного случая в качестве такой команды можно указать «/bin/bash«, то есть все переданные строки будут отправляться в оболочку Bash.
На удалённом сервере запускаем Ncat следующим образом:
И подключаемся с локального компьютера:
В локальной ncat я выполнил:
И получил список файлов на удалённом компьютере. То есть команды выполняются по аналогии с SSH.
Для обслуживания веб-сайтов можно прямо в локальной консоли вводить разные команды, например, делать резервные копии, загружать установочные файлы с официальных сайтов прямо на сервер, а не через свой компьютер.
Ну и функции бэкдора тоже заключены в этой же команде — если на сайте присутствует уязвимость, позволяющая выполнять команды уровня системы, то формируется соответствующий запрос к странице, чтобы в результате была запущена ncat с передачей команд в ОС. Затем атакующий подключается уже к серверу (к ncat) напрямую, минуя уязвимый сайт, чтобы отправлять ему команды. Немного дополнительной информации есть в примерах в статье «Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 1)».
Если команды нужно выполнять в Windows системе, то нужно указать следующую опцию: -e cmd.exe
Подключение к Ncat если удалённая машина находиться за NAT
Если удалённая машина находится за NAT, то подключиться к ней невозможно (объяснения этому здесь).
Но с помощью Ncat можно настроить подключение между машинами, одна из которых за NAT. То есть конечный результат будет такой, как будто бы подключились к компьютеру за NAT.
В этом случае опции указываем немного по-другому.
На своём локальном компьютере запускаем
Обратите внимание, что мы включили прослушивание, но не включили передачу команд в оболочку — потому что на локальном компьютере не нужно выполнять никакие команды!
А на удалённом компьютере мы запускаем программу так:
В ней вместо ХОСТ должен быть IP адрес или имя хоста локального компьютера, на котором ncat запущена в режиме прослушивания. Также на удалённом компьютере указана опция -e «/bin/bash», которая позволит выполнять присланные команды.
Этим мы добьёмся подключения с компьютером за NAT и возможности выполнять на нём команды.
Как сделать так, чтобы при закрытии клиента Ncat, не отключался сервер Ncat
Если в консоли клиента нажать CTRL+c или CTRL+d, то закроется не только Ncat на локальном компьютере, но и Ncat к которой выполнялось подключение. Если вы хотите чтобы Ncat на сервере не закрывалась, то используйте опцию —keep-open:
Теперь если подключиться к удалённому компьютеру:
А затем закрыть подключение к Ncat в режиме прослушивания, то экземпляр Ncat в удалённой системе продолжит свою работу и можно вновь подключиться к Ncat выступающей в роли сервера.
Как передать файлы на удалённый компьютер
С помощью Ncat можно выгрузить файлы на удалённый сервер. К примеру, мне нужно отправить файл some_stuff.txt. Тогда на сервере (куда будет загружен файл), запускаю:
А на локальном компьютере (с которого будет выгружен файл) запускаю:
Когда закончится передача, обе сессии ncat завершаться.
Как загрузить файл с удалённого компьютера
Предположим, мне нужно скачать с удалённого компьютера файл some_stuff.txt. Тогда на сервере я запускаю:
А на локальном компьютере, куда будет скачен файл, запускаю Ncat следующим образом:
Обратите внимание, что не будет ничего показано и после загрузки файла оба экземпляра Ncat продолжат работу.
Как сделать веб-сервер с Ncat
На самом деле, это будет веб-сервер одного файла, но, тем не менее, всё-таки это интересная возможность.
Итак, создадим файл hello.http и добавим в него следующее содержимое:
Запустим на сервере Ncat:
В веб-браузере откроем адрес удалённого хоста с указанием порта: http://185.26.122.50:43210
Кстати, ncat на сервере покажет какие именно заголовки прислал веб-браузер:
Ещё один пример из официального мануала по ncat:
Или, если вы пользователь Windows:
Эти команды запустят HTTP сервер, делающий доступным файл index.html из текущей рабочей директории. Чтобы открыть этот файл нужно в браузере посетить страницу http://localhost:8080/. Если вместо -p 8080 указать -p 80, то из URL можно удалить :8080. Обратите внимание, что этот файл будет отправлен независимо от запрошенного URL — чтобы изменить файл, который отправляется, нужно изменить команду Ncat или использовать скрипт httpd.lua.
Как с помощью Ncat получить доступ к службам, доступным только в локальной сети
С помощью уже рассмотренной опции —sh-exec можно любую программу, которая не является сетевой, сделать доступной по сети. Правда, из-за особенностей ввода-вывода (буферизация и всё такое) в интерактивном режиме не все программы будут работать хорошо.
Рассмотрим ещё один вариант: изначально сетевая программа настроена на прослушивание только локального адреса (localhost) и подключиться к ней из вне (с удалённого компьютера) невозможно. Самым распространённым таким примером является СУБД MySQL. Эта служба является сетевой и другие программы (например, обработчик PHP скриптов) связывается с ней по сети. Но многие системные администраторы настраивают MySQL так, чтобы с локального компьютера к ней можно было обратиться, а с удалённого — нет. В результате достигается следующее: веб-сайты, в том числе использующие базы данных MySQL, работают нормально, без изменений, поскольку подключение к MySQL выполняется в любом случае локально; но атакующий уже не может подключиться к MySQL (например, для подбора пароля). Правда, при этом и становится недоступной возможность удалённого обслуживания MySQL и легитимным системным администратором или веб-мастером.
С помощью Ncat можно разрешить эту проблему — вновь на некоторое время сделать MySQL доступной для удалённого подключения. Это достигается умением Ncat перенаправлять трафик.
Начнём с того, что с помощью Whatportis вспомним, какой порт использует MySQL:
Теперь на сервере, где работает доступная только локально служба, запускаем команду вида:
- КОНЕЧНЫЙ_IP — тот адрес, куда будет сделано перенаправление
- КОНЕЧНЫЙ_ПОРТ — тот порт, на который будет сделано перенаправление
- ПРОСЛУШИВАЕМЫЙ_ПОРТ — порт на сервере, к которому мы будем подключаться с нашего локального компьютера
Причём в качестве КОНЕЧНЫЙ_IP может выступать локальный адрес, в данном случае я использую 127.0.0.1. Итак, моя команда, которую я запускаю на сервере:
На своём локальном компьютере я запускаю:
- IP — адрес сервера, где сетевая служба доступна только локально
- ПОЛЬЗОВАТЕЛЬ — имя пользователя MySQL
- ПОРТ — номер порта, который прослушивает ncat
- Опция -p — означает запросить пароль пользователя
- —protocol=tcp — означает, что будет использоваться протокол TCP (это не принципиально, можно использовать и UDP — главное, указать соответствующую опцию в ncat, которая умеет работать и с UDP, но по умолчанию использует TCP)
Как видим, всё работает:
Использование SSH через туннель Ncat
С Ncat и OpenSSH вы можете делать SSH подключения к хосту за NAT роутером без необходимости делать форвардинг (проброску) портов на роутере. Роутер должен иметь установленную Ncat. В этой команде показано, как подключиться по SSH к через :
Опция ProxyCommand в ssh говорит как открыть SSH соединение к . Она делает это открывая другую SSH сессию к и подключая его к с Ncat.
Если администратор вашего SSH сервера не отключил туннелирование (которое в большинстве конфигураций включено), вы можете использовать встроенный в SSH прокси сервер. Используйте следующую команду для открытия прокси сервера на TCP порту 8080 вашей локальной машины, который туннелирует трафик через SSH соединение:
Теперь вы можете делать подключения внутри сети используя возможности прокси клиента Ncat. Например, для подключения к хосту с IP адресом 192.168.1.123, то есть за вашим роутером, вы можете использовать следующую команду если вы открыли туннель:
Как Ncat превратить в прокси
Свои подключения Ncat может выполнять через прокси, поддерживаются следующие типы: SOCKS 4, SOCKS 5 и HTTP. Подробнее об опциях подключения с прокси вы можете найти на справочной странице Ncat: https://kali.tools/?p=4578
Я предлагаю рассмотреть более интересный вариант — превращение самой Ncat в прокси. В качестве прокси сервера Ncat поддерживает только тип HTTP.
Поддерживается создание HTTP прокси как к аутентификацией, так и без:
- -l — включает режим прослушивания
- 3128 — означает прослушивать указанный номер порта
- —proxy-type http — означает выбор типа прокси
- —proxy-auth : — устанавливает учётные данные для авторизации на прокси сервере
К примеру, на своём хостинге я запускаю прокси сервер:
Теперь в настройках веб-браузера я указываю соответствующий IP и порт, которые прослушивает ncat, также ставлю галочку, чтобы использовать этот прокси для всех соединений:
Открываю сайт где можно проверить свой IP: https://suip.biz/ru/?act=myip
У меня сразу запрашиваются учётные данные для авторизации на прокси:
И вместо моего реального IP теперь показывается адрес моего хостинга, который я с помощью Ncat использую в качестве прокси:
В режиме прослушивания, если не установлен порт, то по-прежнему будет использоваться 31337, а не другие популярные для прокси порты. Прокси поддерживает в веб сёрфинге методы GET, HEAD и POST, а также метод CONNECT, который позволяет туннелировать произвольные TCP соединения (когда Ncat подключается как клиент, она использует CONNECT).
Для HTTP поддерживается Basic и Digest схемы аутентификации, причём как на клиентской, так и на серверной стороне. Digest более безопасна, поэтому если она доступна, то Ncat будет её предпочитать более чем Basic. Сервер предлагает клиентам обе схемы. Basic отправляет учётные данные в открытом виде, а Digest — нет. Реализация Digest в Ncat позволяет атаки повторного воспроизведения (replay attacks) в течение до 10 секунд (с Basic всегда возможна атака повторного воспроизведения и другие атаки).
Предупреждение от авторов Ncat: HTTP proxy поднятый на Ncat разработан таким образом, чтобы не мешать вам и помогать вам создавать временные сетевые подключения. Его не следует использовать как повседневный прокси, открытый для Интернета. Вы можете ограничить, кто может подключаться, используя опции —allow, —deny и —proxy-auth, но это не сильная форма аутентификации. Прокси без аутентификации опасен, поскольку он может быть использован другими в выполнении атак и помочь им избежать обнаружения. Возможность CONNECT особенно опасна, поскольку она включает трафик любого рода, а не только HTTP.
Как разрешить подключение к Ncat с определённых IP
В Ncat имеется механизм контроля доступа, который позволяет настроить находящуюся в режиме прослушивания Ncat таким образом, что только определённые IP смогут к ней подключаться или определённые IP будут заблокированы для подключения. Это достигается использованием опций:
- —allow
- —allowfile
- —deny
- —denyfile
Подробности о них смотрите в справке.
Отправка почты
Это ещё один пример, в котором демонстрируется, как может использоваться Ncat для работы с протоколами уровня приложений.
Очень интересно взаимодействовать с текстовыми сетевыми протоколами, используя только Ncat и клавиатуру. Вот короткий пример, показывающий, как отправлять электронную почту, общаясь с SMTP-сервером. SMTP описан в RFC 5321, но вам не нужно много знать о протоколе, чтобы отправить простое сообщение. Номер порта, назначенный сервису, равен 25, и мы используем -C, потому что он требует окончания строки CRLF. Пример содержит стенограмму сеанса.
Пример. Ncat как почтовый клиент:
Чтобы этот пример работал для вас, измените mail.example.com на ваш SMTP-сервер и client.example.com на ваше доменное имя. Естественно, вы захотите изменить адреса электронной почты и сообщения тоже. Вероятно, он будет работать только при использовании обычного почтового сервера с вашим реальным адресом электронной почты или при использовании почтового сервера получателя (найдите запись MX для доменного имени в его адресе электронной почты).
Очевидно, что эта техника может быть использована не только для отправки почты. Ncat — отличный интерактивный инструмент отладки для любого текстового протокола. Такая отладка иногда выполняется с помощью команды telnet, потому что она предоставляет что-то вроде необработанного текстового потока. Тем не менее Ncat предлагает несколько преимуществ по сравнению с Telnet. Ncat не печатает ничего, кроме того, что отправлено удаленным хостом. Telnet не подходит для произвольных двоичных данных, потому что он резервирует некоторые байты в качестве управляющих символов. Команда telnet завершается, когда заканчивается её ввод, поэтому вы можете не увидеть, что отправлено с другого конца. И, наконец, telnet не может использовать UDP.
Создание цепей последовательной передачи трафика между нескольких Ncat
Ncat создана работать в потоке ввода и вывода других утилит (pipeline), поэтому естественно, что вывод от одного экземпляра Ncat можно скормить на вводу другого. Далее пример одного из способов отправки файла лога с host1 на host3 через host2:
Возможная проблема с этим методом заключается в том, что он односторонний: хост1 может отправлять на хост3, но хост3 не может отправить что-либо обратно на хост1. В этом случае это не имеет значения, но при желании можно настроить двухстороннюю связь, к примеру:
Ncat, прослушивающий хост2, после получения соединения создаёт новый Ncat для связи с хостом 3 и соединяет входы и выходы программ, работающих на хосте 1 и хосте 3, вместе. Тот же трюк можно использовать и на локальном хосте. В этом примере перенаправляется локальный порт 8080 на веб-сервер на example.org:
Очистка от SSL
Предположим, вам нужно подключиться к серверу IMAP, который требует SSL, но ваш почтовый ридер не поддерживает SSL. Ncat может выступать в качестве зашифрованного моста для соединения клиента и сервера. Вы подключите почтовый клиент к локальному порту, и Ncat перенаправит зашифрованный трафик на сервер. Вот как подключить IMAP (порт 143) на локальном хосте к IMAP через SSL (порт 993) на imap.example.com.
Как только это произойдёт, дайте указание почтовому клиенту подключиться к серверу IMAP на локальном хосте.
Этот приём работает для протоколов, которые передают трафик строго между двумя хостами. Он не работает хорошо для HTTP, потому что HTTP обычно знает имена хостов и часто включает в себя несколько хостов.
Ncat как SSL сервер
Выше уже рассмотрена опция использования Ncat в режиме подключения к HTTPS и SSL.
В режиме сервера Ncat также может использовать SSL. Режим сервера предоставляет сертификат, которые клиент при желании может проверить.
Если запустить SSL сервер без опций —ssl-cert —ssl-key, то Ncat автоматически сгенерирует сертификат и 1,024-битный ключ RSA. Конечно, такому сертификату не будет доверять ни одно приложение, выполняющее верификацию сертификатов. В вербальном режиме будет напечатан отпечаток ключа, поэтому при желании вы можете выполнить ручную проверку.
Пример автоматической генерации сертификата:
По возможности рекомендуется использовать существующий сертификат и ключ, поскольку он обеспечивает надёжную проверку подлинности сервера. Используйте параметры —ssl-cert и —ssl-key для указания файлов в кодировке PEM. В целях тестирования вы можете создать самозаверенные сертификат и приватный ключ. Если у вас установлен OpenSSL, используйте эту команду:
Для целей проверки сертификата, commonName в сертификате должен соответствовать полному доменному имени (fully qualified domain name) хоста, на котором работает сервер. После генерации этих файлов, запустите сервер:
Чтобы установить проверенное клиентское соединение, скопируйте файл test-cert.pem куда-нибудь, где клиент сможет получить к нему доступ, затем запустите:
Дополнительные подробности по использованию SSL смотрите в справке.
Сканирование портов
Ncat не поддерживает эту функцию, но оригинальная nc умеет сканировать порты.
Для запуска сканера TCP портов в диапазоне [начальныйПорт] до [конечныйПорт]:
Закрепление на удалённой машине
На удалённой машине установка запуска ncat с помощью Cron каждые 10 минут:
Эмуляция диагностических служб
Поскольку Ncat может выступать в роли сервера который принимает что угодно и выводит это на экран (или сохраняет в файл), то можно запустить Ncat в режиме прослушивания, а в программе, чья сетевая активность нас интересует, мы можем указать адрес Ncat. В результате программа обратиться к Ncat, а в свою очередь Ncat покажет нам всё, что ей прислала эта программа.
Допустим, мне интересно, какой запрос отправляет команда dig — эта команда используется для преобразования имён хостов в IP адреса и обратно. Я знаю, что по умолчанию она использует UDP протокол на 53 порту. Поэтому у себя на компьютере я запускаю ncat с опцией -l (включает прослушивания), с опцией -u (означает использовать порт UDP) и с указанием порта 53:
На этом же компьютере в другой консоли я делаю запрос, где в качестве сервера, к которому должна обратиться программа, указываю localhost:
Как оказалось, программа dig использует не простой текст, а двоичные данные, поэтому в консоли ncat отобразились нечитаемые символы. Хотя даже так видно, что домен передаётся в виде простого текста (почти) и делается 3 попытки. Кстати, у Ncat есть опции для сохранения бинарных данных. То есть при желании я могу их правильно сохранить и затем анализировать в шестнадцатеричном редакторе.
Дополнительные подробности и примеры смотрите на странице: https://nmap.org/ncat/guide/ncat-simple-services.html
Заключение
В данной статье рассмотрено много примеров использования Ncat, но далеко не все. О других опциях Ncat вы можете узнать на её справочной странице.
Что касается случаев применения Ncat, то их может быть ещё больше. Не забывайте о возможности комбинировать между собой функции данной утилиты.