Россия, Москва, Московский Государственный Открытый Университет, 2007 |
NETCAT и CRYPTCAT
Незаметное сканирование портов
Поскольку Netcat может опрашивать диапазон портов, вероятно использование его для их сканирования. Вы сразу захотите установить соединение с большим количеством портов на контролируемом хосте.
[root@originix nc]#./nc target 20-80
Но это не сработает. Запомните, что Netcat не предназначен специально для сканирования портов. В указанной ситуации Netcat соединится с 80-м портом, и будет пытаться установить TCP-соединение до тех пор, пока не дождется ответа. Как только по этому порту придет ответ, Netcat будет ожидать получения информации по стандартному входу, установленному перед соединением. Это не совсем то, чего вы добивались.
Решением будет опция -z. Эта опция указывает программе на необходимость передать минимальное количество данных для получения ответа от открытого порта. Используя эту опцию, не следует ожидать от Netcat получения каких-либо данных на вход или ждать вывода какой либо информации (таким образом вы заставите перейти программу в режим "нулевого ввода/вывода"). Поскольку опция -v дает возможность получать более подробную информацию о работе программы, вы можете использовать ее для просмотра результатов сканирования портов. Иначе вы ничего не увидите.
[root@originix nc]#./nc -z 192.168.1.100 20-80 [root@originix nc]#./nc -v -z 192.168.1.100 20-80 originix [192.168.1.100] 80 (www) open originix [192.168.1.100] 23 (telnet) open originix [192.168.1.100] 22 (ssh) open originix [192.168.1.100] 21 (ftp) open [root@originix nc]#
Использовав опцию -v, вы увидите, что несколько наиболее очевидных сервисов работают в заданном промежутке номеров TCP-портов. Как это будет выглядеть в системном журнале?
Feb 12 03:50:23 originix sshd[21690]: Did not receive ident string from 192.168.0.105 Feb 12 03:50:23 originix telnetd[21689]: ttloop: read: Broken pipe Feb 12 03:50:23 originix ftpd[21691]: FTP session closed
Обратите внимание, что все эти события произошли в одно время и с увеличивающимися идентификаторами процессов (от 21689 до 21691). Представьте, если бы вы сканировали больший интервал портов. Вы получили бы существенно больший объем вывода. К тому же некоторые службы, такие, как sshd, ведут себя весьма молчаливо по отношению к сканерам IP-адресов.
Всякий раз, когда вы делаете попытку сканирования портов, по которым ничего не проходит, в большинстве сетей есть системы обнаружения попыток вторжения, которые немедленно отмечают этот вид активности в сети и сообщают об этом системному администратору. Некоторые брандмауэры могут автоматически блокировать IP-адрес, если от него за короткий промежуток времени исходит большое количество запросов на соединение.
Netcat позволяет производить сканирование достаточно незаметно. Вы можете использовать опцию -i и задать интервал для попыток соединения. Использование опции -r для задания случайной последовательности сканирования портов из выбранного интервала также поможет замаскировать вашу деятельность по сканированию портов.
./nc -v -z -r -i 42 192.168.1.100 20-80
Эта командная строка определяет случайную последовательность выбора портов и задает интервал в 42 секунды между попытками соединения. Это введет в заблуждение любые автоматические средства защиты, но свидетельства попыток сканирования все равно останутся в системном журнале исследуемого хоста; правда в более разбросанном виде.
Netcat - не самый подходящий инструмент для сканирования портов. Поскольку он может использоваться для решения общих задач значительно лучше, чем для решения конкретных, возможно, вам следует использовать для сканирования инструмент, созданный специально для этого.
Идентифицируйте себя, и службы расскажут о себе все
Использовав Netcat или специально предназначенную для сканирования портов программу (вроде nmap, см. лекцию ""Сканеры портов"" ) для определения, какие порты в системе открыты, вы можете получить более подробную информацию об этих портах. Обычно это можно сделать, подключившись к порту; служба немедленно сообщит вам номер версии, экземпляр и, возможно, сведения об управляющей операционной системе. В результате вы получите возможность использовать Netcat для сканирования определенного интервала портов и получения сведений о работающих службах.
Имейте в виду, что, используя Netcat в автоматическом режиме, вы не сможете вводить команды в командной строке, поскольку программа не ожидает ввода информации от пользователя на стандартный ввод. Если вы просто запустите на выполнение команду nc 192.168.1.100 20-80, вы не сможете ничего узнать, поскольку программа остановится на первом же установленном соединении (возможно, это будет web-сервер, прослушивающий 80 порт) и затем будет ожидать, когда вы что-либо сделаете. Так что вам понадобится вычислить, что подавать на вход всем этим службам, чтобы вынудить их сообщить нам о себе нечто большее. Как только вы это сделаете, передав службе команду QUIT и внеся путаницу, информация посыплется на вас, как бобы из корзинки.
[root@originix nc]#echo QUIT | ./nc -v 192.168.1.100 21 22 80 originix [192.168.1.100] 21 (ftp) open 220 originix FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready. 221 Goodbye originix [192.168.1.100] 22 (ssh) open SSH-2.0-OpenSSH_2.3.0p1 Protocol mismatch. originix [192.168.1.100] 80 (www) open <!Doctype HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>501 Method Not Implemented</TITLE> </HEAD><BODY> <H1>Method Not Implemented</H1> QUIT to /index.html not supported.<P> Invalid method in request QUIT<P> <HR> <ADDRESS>Apache/1.3.14 Server at 127.0.01 Port 80</ADDRESS> </BODY></HTML> [root@originix nc]#
Полученный результат не слишком красив, но мы узнали о версиях трех работающих служб. Взломщик может использовать информацию для поиска версий, имеющих слабые места (http://www.securityfocus.com/ - прекрасное место для поиска информации о слабых местах разных версий программ). Взломщик, который нашел привлекательный с его точки зрения порт, может попытаться получить больше информации о нем, сосредоточившись на исследовании этой службы и попытавшись говорить на ее языке.
Сосредоточимся на web-сервере Apache. QUIT - команда, которую протокол HTTP не понимает. Попытаемся сказать что-нибудь более подходящее.
[root@originix nc]#./nc -v 192.168.1.100 80 originix [192.168.1.100] 80 (www) open GET / HTTP HTTP/1.1 200 OK Date% Tue, 12 Feb 2002, 09:43:07 GMT Server: Apache/1.3.14 (Unix) (Red-Hat/Linux) Last Modified: Sat, 05 Aug 2000 04:39:51 GMT Etag: "3a107-24-398b9a97" Accept-Ranges: bytes Content-Length: 36 Connection: Close Contebt-Type: text/html I don't think you mean to go here. [root@originix nc]#
Какая прелесть! Мы сказали коротенькую HTTP-фразу (набрав команду GET/HTTP и затем дважды нажав клавишу Enter) и Apache ответил. Он показал нам корневой файл index.html и все HTTP заголовки в нетронутом виде без преобразований, которые обычно выполняют браузеры на прикладном уровне. Заголовки сервера сообщили нам не только то, что мы имеем дело с сервером Apache на Unix-машине, но и то, что это машина находится под управлением Red-Hat.