Как использовать Netcat и повысить свои навыки в сетевых технологиях!

Управление сетями и мониторинг потока данных между системами кажется сложным. Но не в том случае, если вы знаете, как использовать Netcat.

Netcat – это инструмент командной строки, который можно использовать для различных целей, таких как сканирование портов, передача файлов и создание минимального веб-сервера для тестирования активности подключения. И в этом руководстве вы узнаете, как использовать Netcat, изучив некоторые из самых распространенных случаев его применения.

Готовы? Читайте далее и поднимайте свои навыки в сетевых технологиях на новый уровень!

Предварительные требования

Этот учебник будет практическим демонстрационным материалом. Если вы хотите следовать за мной, убедитесь, что у вас есть следующее.

  • Два компьютера с Linux: один (ubuntu1) действует как хост-получатель, а другой (ubuntu2) служит в качестве хоста-отправителя. В этом учебнике используется Ubuntu 20.04 для обоих машин.
  • Netcat и bzip2 установлены на обеих машинах.

Сканирование открытых портов

Порты – это входные ворота, которые позволяют сетевому трафику входить и выходить из машины. Когда порт закрыт, на нем не работает никакая служба, и трафик не может проходить через него. Но если порт открыт, ваша сеть подвергается атакам.

Если вы хотите проверить, открыт ли определенный порт на машине для выявления уязвимостей безопасности, Netcat подходит для этой задачи. Как тестировщик на проникновение, вам нужно знать, какие порты открыты, чтобы провести вашу атаку. В любом случае, поиск открытых портов – это обычная потребность.

Базовый синтаксис для сканирования портов с использованием Netcat выглядит следующим образом, где:

  • host – это IP-адрес или имя хоста машины, которую вы хотите проверить.
  • startport – начальный номер порта.
  • endport – конечный номер порта.
netcat options host startport-endport

Команда netcat имеет псевдоним nc, который пригодится для сокращения команд. Но в этом руководстве используется netcat для правильной документации.

Подключитесь по SSH к вашему отправляющему хосту (ubuntu2) и выполните следующую команду для сканирования открытых портов между портами 1-100.

На протяжении этого руководства замените 149.28.86.131 на IP-адрес вашего отправляющего хоста.

В большинстве случаев диапазон портов 1-100 достаточен. Большинство служб используют номера портов по умолчанию, которые, как правило, попадают в этот диапазон, например, 22 для SSH, 80 для HTTP и т. д.

Список ниже объясняет каждый из флагов, управляющих поведением сканирования портов:

  • -z (нулевые режимы ввода/вывода) – Netcat не будет читать из сетевого подключения или записывать в него. Этот параметр делает процесс сканирования более быстрым.
  • -n – Говорит Netcat’у отключить DNS-запросы для избегания задержек.
  • -v – Заставляет Netcat показывать все процессы сканирования портов подробно.
netcat -z -n -v 149.28.86.131 1-100

Вы можете видеть ниже, что подключение к порту 22 (SSH) удалось, но все остальные порты не удалось открыть.

How to Use Netcat : Scanning for Open Ports

Поскольку команда netcat перечисляет все отсканированные порты, вы получаете много информации, в том числе и ту, которая вам не нужна. В таком случае выполните следующую команду, передав ее через конвейер команде grep. Эта команда фильтрует только открытые порты с сообщением "succeeded!" в конце, как показано ниже.

netcat -z -n -v 149.28.86.131 1-100 2>&1 | grep succeeded

Ниже вы можете видеть, что порт 22 открыт для подключения по SSH, как и ожидалось.

Filtering the Successful Port Connection

Отправка файлов безопасно между хостами

Помимо сканирования портов, Netcat позволяет безопасно передавать файлы между двумя машинами. Netcat использует протокол TCP для передачи файлов, который более надежен, чем UDP.

Базовый синтаксис для отправки файла с использованием Netcat следующий:

netcat options host port filename

Чтобы отправить файлы с вашего хоста на другую машину:

1. Выполните следующую команду, чтобы начать прослушивание на порту 4444 на принимающем хосте (ubuntu1).

Эта команда не имеет вывода, но ниже приведены опции, влияющие на то, как команда устанавливает порт прослушивания:

  • -l – говорит netcat прослушивать входящее соединение на указанном TCP-порту. Порт может быть любым числом, но убедитесь, что другие службы не используют ваш предпочтительный порт.
  • > – говорит netcat перенаправить все входящие данные в файл по указанному пути (ata_file).
netcat -l 4444 > ata_file

Только пользователь root может привязываться к портам с номерами меньше 1000, поэтому вам нужно выбрать порт больше 1000 как пользователь без прав root. Если вы попытаетесь использовать номер порта меньше 1000 как пользователь без прав root, вы получите следующую ошибку.

Getting “Permission denied” Error When Using Port Lower Than 1000

2. На отправляющем хосте (ubuntu2) выполните следующую команду echo, которая не имеет вывода, но создает файл с именем ata_file с содержимым “Hello from ATA”.

echo "Hello from ATA" > ata_file

3. Теперь выполните следующую команду netcat, чтобы отправить ata_file на принимающий хост (ubuntu1). Убедитесь, что вы используете тот же номер порта на принимающем хосте (4444), что и на отправляющем хосте.

Эта команда не имеет вывода, но опция < говорит netcat взять ввод из указанного файла.

netcat 149.28.86.131 4444 < ata_file

4. Наконец, переключитесь на принимающий хост (ubuntu1) и выполните команду cat ниже, чтобы проверить содержимое файла ata_file.

cat ata_file

Вы увидите сообщение “Hello from ATA” ниже, указывающее на успешную передачу.

Verifying the Transfer Worked

Отправка каталогов на другой хост

До сих пор вы успешно отправили один файл с одного хоста на другой. Но что если вы хотите отправить целый каталог со всеми его подкаталогами и файлами? Netcat тоже может отправлять каталоги!

Предположим, у вас есть каталог резервных копий под названием apache_backup на отправляющем хосте (ubuntu2). Сначала вам нужно сжать каталог, затем отправить и извлечь каталог на принимающем хосте (ubuntu1).

1. На принимающем хосте (ubuntu1) выполните следующую команду, чтобы создать новый каталог под названием apache_backup и перейти (cd) в этот каталог.

mkdir apache_backup && cd apache_backup
Creating the apache_backup Directory

2. Затем выполните следующую команду, чтобы начать прослушивание порта 4444 и извлечь сжатые файлы, которые отправляющий хост (ubuntu2) отправляет на принимающий хост (ubuntu1).

Эта команда не выводит информацию, но флаги tar xf – берут ввод из Netcat (стандартный ввод) и извлекают все файлы в текущий каталог.

netcat -l 4444 | tar xf -

3. На отправляющем хосте (ubuntu2) выполните следующие команды, чтобы создать каталог (apache_backup), некоторые текстовые файлы и отправить их на принимающий хост (ubuntu1).

Эти команды не выводят информацию, но вы проверите, успешно ли прошла передача, на следующем шаге.

# Создает каталог apache_backup и некоторые текстовые файлы внутри
mkdir apache_backup && cd apache_backup && touch ata{1..5}.txt
# Сжимает рабочий каталог и отправляет его на принимающий хост
tar cf - . | netcat 149.28.86.131 4444

4. Наконец, переключитесь на принимающий хост (ubuntu1), нажмите Ctrl+C, чтобы остановить прослушивание порта 4444, и выполните команду ls, чтобы просмотреть файлы в каталоге apache_backup.

ls

Как видите ниже, файлы каталога apache_backup успешно переданы в каталог apache_backup на принимающем хосте.

Verifying Transferred Files on the Receiving Host

Передача всего диска или раздела на другой хост

Отправка всего вашего диска или раздела на другой хост может показаться амбициозной задачей, но это выполнимо, помимо отправки файлов и каталогов. Этот трюк приходится как нельзя кстати, особенно если вам нужно создать резервную копию всего вашего диска перед решительными действиями, такими как перемещение или удаление огромного количества файлов.

1. Запустите команду на принимающем хосте (ubuntu1), чтобы начать прослушивание порта 4444. Эта команда не выводит никаких данных, но разархивирует все входящие данные (bzip2 -d | dd) на /dev/sdb.

/dev/sdb – это ваш второй жесткий диск на машине. Но в этом случае /dev/sdb – это пустой жесткий диск, подключенный к этой машине для этого руководства.

netcat -l 4444 | bzip2 -d | dd of=/dev/sdb

2. На отправляющем хосте (ubuntu2) выполните следующую команду fdisk, чтобы найти все диски и разделы на вашей машине.

 fdisk -l

Как видно ниже, /dev/vda1/ – это корневой раздел для отправляющего хоста в этом руководстве. Ваш вывод может отличаться в зависимости от конфигурации вашей машины.

Finding All Disks and Partitions

3. Запустите следующую команду на отправляющем хосте (ubuntu2), которая не выводит данных, но отправляет раздел /dev/vda1 на принимающий хост (ubuntu1) через порт 4444.

Сжатие и отправка раздела на принимающий хост занимает некоторое время, в зависимости от размера раздела.

bzip2 -c /dev/vda1 | netcat 149.28.86.131 4444

4. После завершения процесса переключитесь на принимающий хост (ubuntu1), и вы увидите вывод ниже.

Ошибка “Нет свободного места на устройстве” ожидаема, так как /dev/vda1 вероятно больше чем /dev/sdb. Но вы поняли идею! Вы можете использовать Netcat для отправки всего вашего жесткого диска или раздела на другой компьютер.

Viewing the Sending Disk/Partition Process

Наконец, выполните команды на принимающем хосте (ubuntu1), чтобы смонтировать раздел /dev/vda1 и перечислить все файлы в разделе.

# Монтирует раздел /dev/vda1
mount /dev/vda1 /media 
# Перечисляет все файлы в разделе
ls media

Как видно ниже, все файлы и каталоги из /dev/vda1 успешно переданы на /dev/sdb.

Verifying Data Integrity of the File Transfer

Создание минимального веб-сервера

Настройка полноценного веб-сервера, такого как Apache или NGINX, только для диагностики проблемы с веб-сервером, может быть болезненной. Вместо этого создайте минимальный веб-сервер с помощью Netcat, чтобы быстро выявить проблемы с веб-сервером.

Чтобы создать минимальный веб-сервер:

1. Переключитесь на ваш принимающий хост и выполните нижеуказанные команды, чтобы создать корневой каталог (nc-webserver-docroot) для веб-сервера и сценарий оболочки (httpresponse.sh), который генерирует HTTP-ответ.

mkdir -pv /root/nc-webserver-docroot/
Creating a Webserver Root Directory

2. Затем создайте файл index.html в каталоге /root/nc-webserver-docroot/ с помощью вашего предпочтительного редактора и заполните файл указанным ниже кодом. Этот HTML-файл содержит содержимое, которое будет обслуживать веб-сервер Netcat.

<!doctype html>

<html lang="en">

<head>
	<title>NETCAT Testing network connectivity </title>
</head>

<body>
	<h1>NETCAT Test</h1>
	<p>Connection Successful! Your networking skills are awesome!</p>
</body>

</html>

3. Создайте файл сценария оболочки с названием httpresponse.sh в каталоге /root/nc-webserver-docroot/ и заполните указанным ниже кодом.

Этот скрипт оболочки возвращает содержимое файла /root/nc-webserver-docroot/index.html в качестве HTTP-ответа любому клиенту, который отправляет запрос на ваш веб-сервер Netcat.

#!/bin/bash
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat /root/nc-webserver-docroot/index.html)"

4. Теперь выполните команду chmod ниже, которая не имеет вывода, но делает файл httpresponse.sh исполняемым (+x).

chmod +x /root/nc-webserver-docroot/httpresponse.sh

5. Выполните команду ncat ниже, чтобы запустить веб-сервер Netcat на порту 7777.

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

Следующие опции влияют на поведение веб-сервера Netcat:

  • -l – указывает Ncat слушать входящее подключение.
  • -v – включает режим подробного отображения всех входящих HTTP-запросов в вашем терминале.
  • -c - указывает путь к сценарию httpresponse.sh, который генерирует HTTP-ответы.
  • -keep-open – сохраняет открытым слушатель Ncat даже после закрытия первого соединения. Эта опция полезна, если вы тестируете свой веб-сервер с несколькими клиентами.
ncat -lv 7777 -c /root/nc-webserver-docroot/httpresponse.sh --keep-open

Вы увидите следующий вывод, когда веб-сервер Netcat запустится и будет слушать порт 7777 на всех доступных сетевых интерфейсах.

Starting the Ncat Server

6. Теперь откройте еще один терминал и выполните следующую команду, чтобы протестировать ваш веб-сервер Netcat (http://localhost:7777).

curl -vvv http://localhost:7777

Результат ниже показывает, что веб-сервер Netcat работает как ожидается и может возвращать содержимое файла /root/nc-webserver-docroot/index.html в качестве HTTP-ответа.

Testing your Ncat server

7. Наконец, вернитесь к терминалу, где запущен веб-сервер Netcat. Вы увидите, что веб-сервер Netcat получил и обработал HTTP-запрос от клиента curl.

Поздравляем! Вы успешно создали минимальный веб-сервер Netcat для проверки вашей сетевой связи!

Verifying the HTTP Request from the curl Client

Заключение

В этом руководстве вы узнали, как использовать Netcat для повышения уровня ваших навыков сетевого взаимодействия и отладки. Вы сканировали открытые порты, передавали файлы и создали минимальный веб-сервер. И на данном этапе вы можете решать множество проблем сетевого взаимодействия в реальном мире с помощью этой мощной сетевой утилиты!

Имея эти новые знания, почему бы вам не усовершенствовать свои сетевые навыки еще больше и не стать опытным пользователем в области Кибербезопасности?

Source:
https://adamtheautomator.com/how-to-use-netcat/