Как использовать захват баннеров для выявления потенциальных угроз в целевой системе
Как мы уже могли убедиться на примере других инструментов и утилит, некоторые вещи, которые используются администраторами для повышения эффективности своей работы, могут бессовестно эксплуатироваться злоумышленниками для подготовки к осуществлению несанкционированного доступа в систему. В конце концов, взлом — это всего лишь процесс, заставляющий компьютер делать что-то непредусмотренным образом в интересах хакера. В рамках данной статьи мы на практических примерах рассмотрим различные способы захвата баннеров. Эти навыки помогут вам выявлять потенциальные информационные угрозы для вашей системы до того, как этим смогут воспользоваться злоумышленники.
Захват баннеров — это метод, который используется для сбора информации о запущенных службах в компьютерной системе. Баннеры относятся к сообщениям, размещенным на хосте, и обычно выполняют роль приветствия и/или предоставляют некоторую информацию о версиях используемых служб и программных продуктов. Злоумышленники могут в своих интересах воспользоваться данными, находящимися в баннере, получив тем самым конкретные номера версий используемых служб, что значительно облегчит им задачу проведения разведки и планирования взлома.
В рамках нашего практического руководства по захвату баннеров мы будем использовать виртуальную машину Metasploitable 2 в качестве цели (уязвимого сервера) и Kali Linux в качестве нашей локальной машины.
Для начала проведем быстрое сканирование цели с помощью Nmap, чтобы понимать, что на этом сервере запущено. Для этого в командной строке набираем команду «nmap» с указанием целевого IP-адреса или имени хоста:
«nmap 10.10.0.50»
Как вы уже успели заметить, в нашем случае IP-адрес целевого сервера — 10.10.0.50.
Результат сканирования тестовой цели с помощью Nmap представлен ниже:
~# nmap 10.10.0.50
Starting Nmap 7.70 ( https://nmap.org ) at 2019-08-08 09:00 CDT
Nmap scan report for 10.10.0.50
Host is up (0.0024s latency).
Not shown: 977 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:1D:09:55:B1:3B (Dell)
Nmap done: 1 IP address (1 host up) scanned in 0.32 seconds
1. Захват баннеров с помощью Telnet
Первый инструмент, который мы будем использовать для захвата баннеров, — это telnet. На первый взгляд эта скромная маленькая утилита может показаться не очень полезной, когда дело доходит до тестирования на проникновение, но основная ее ценность заключается в том, что она присутствует практически в любой системе.
Например, мы можем использовать telnet для получения информации о версии FTP-сервера, который работающего на порту 21. Для этого в командной строке наберите синтаксис команды «telnet», затем IP-адрес компьютера, к которому вы хотите подключиться, а затем номер порта:
«telnet 10.10.0.50 21»
Собранная информация в результате выполнения команды утилиты telnet для подключения к порту 21, на котором работает FTP-сервера, представлена ниже:
~# telnet 10.10.0.50 21
Trying 10.10.0.50...
Connected to 10.10.0.50.
Escape character is '^]'.
220 (vsFTPd 2.3.4)
Мы можем сделать то же самое для службы SSH (Secure Shell, «Безопасная оболочка»), предоставляющей удаленный доступ и работающей на порту 22:
«telnet 10.10.0.50 22»
Собранная информация в результате выполнения команды утилиты telnet для подключения к порту 22, на котором работает SSH-сервер, представлена ниже:
~# telnet 10.10.0.50 22
Trying 10.10.0.50...
Connected to 10.10.0.50.
Escape character is '^]'.
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
Мы даже можем использовать утилиту telnet для захвата баннера веб-сервера, который обычно работает на порту 80:
«telnet 10.10.0.50 80»
После подключения введите какую-нибудь фразу (в нашем примере это слово «help»), и веб-сервер может вам предоставить некоторую интересную информацию.
Собранная информация в результате выполнения команды утилиты telnet для подключения к порту 80, на котором работает веб-сервер, представлена на скриншоте ниже:
Как вы можем увидеть на представленном выше скриншоте, в результате выполнения команды для подключения к порту 80 с целью захвата баннера веб-сервера с помощью утилиты telnet мы получили немного HTML-текста, включая атрибуты и ту часть, которая выглядит как каталоги, а также приветственный баннер системы. Нам также повезло, так мы получили и адрес электронной почты, и учетные данные для входа.
2. Захват баннеров с помощью NetCat
Следующий инструментарий, который мы будем использовать для захвата баннеров, — это netcat, утилита, которая нашла широкое применение в Linux и других Unix-подобный системах, а также может использоваться злоумышленниками в различных целях. В рамках данного практического руководства мы покажем, как использовать утилиту netcat для подключения к определенным портам и сбора информации.
Для начала, давайте с помощью сканера TCP-портов утилиты netcat подключимся к службе FTP через порт 21, как мы это сделали в предыдущем примере с telnet:
«nc 10.10.0.50 21»
Собранная информация в результате выполнения команды сканера TCP-портов утилиты netcat с целью подключения к порту 21, на котором работает FTP-сервер, представлена ниже:
~# nc 10.10.0.50 21
220 (vsFTPd 2.3.4)
Выполним тоже самое для порта 22, на котором работает SSH:
«nc 10.10.0.50 22»
Собранная информация в результат выполнения команды сканера TCP-портов утилиты netcat для подключения к порту 22, на котором работает SSH-сервер, представлена ниже:
~# nc 10.10.0.50 22
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
И еще раз для порта 80:
«nc 10.10.0.50 80»
Собранная информация в результате выполнения команды сканера TCP-портов утилиты netcat для подключения к порту 80, на котором работает веб-сервер, представлена на скриншоте ниже:
Кроме того, мы можем использовать утилиту netcat для некоторой коммуникации с веб-сервером и сборе информации о нем. Например, с помощью метода «HEAD» мы получим возможность добраться до содержимого HTTP-заголовка, часто предоставляющего много полезной информации, в том числе название используемого веб-сервера и номер запущенной версии. Для этого мы сразу должны установить TCP-соединение с целевым веб-сервером:
«nc 10.10.0.50 80»
А после того, как соединение будет установлено, необходимо ввести команду метода «HEAD»:
«HEAD / HTTP/1.1»
Собранная информация в результате установления TCP-соединения с веб-сервером и выполнения команды метода «HEAD» утилиты netcat, представлена ниже:
~# nc 10.10.0.50 80
HEAD / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Wed, 19 Jun 2019 18:28:12 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
Connection: close
Content-Type: text/html; charset=iso-8859-1
Как вы, вероятно, заметили, несмотря на то, что ответ содержал сообщение об ошибке «400 Bad Request», мы все равно смогли узнать название веб-сервера (Apache) и точный номер используемой версии.
Мы также можем отправить GET-запрос по HTTP, который вернет нам содержимое веб-страницы. Для этого нам также понадобиться дважды нажать «Enter». Сперва устанавливаем TCP-соединение с целевым веб-сервером:
«nc 10.10.0.50 80»
А затем отправляем GET-запрос:
«GET / HTTP/1.1»
Собранная информация в результате установления TCP-соединения с веб-сервером и отправки GET-запроса с помощью утилиты netcat, представлена на скриншоте ниже:
В нашем примере мы опять получили сообщение об ошибке «400 Bad Request», но этот метод помог нам больше узнать об HTML и собрать другую полезную информацию.
3. Захват баннеров с помощью Curl
Curl, написание которого часто стилизованно как cURL (Client URL), чтобы избежать путаницы с одноименным языком программирования, представляет собой кроссплатформенный служебный инструмент командной строки, используемый для передачи данных. Он чаще всего используется для HTTP, но поддерживает и множество других протоколов.
Мы также можем использовать программу curl, чтобы захватить баннер веб-сервера. Однако, на этот раз нам не нужно явно указывать номер порта, как мы делали при работе с двумя предыдущими инструментами:
«curl 10.10.0.50»
Собранная информация в результате захвата баннера веб-сервера с помощью служебной программы curl, представлена на скриншоте ниже:
Для получения заголовка HTTP используйте флаг «-I»:
«curl -I 10.10.0.50»
Собранная информация в результате получения заголовка HTTP с помощью служебной программы curl, представлена ниже:
~# curl -I 10.10.0.50
HTTP/1.1 200 OK
Date: Wed, 19 Jun 2019 18:32:06 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.24
Content-Type: text/html
Как вы можете видеть, на этот раз мы не получили сообщение об ошибке, и в качестве бонуса у нас появилась некоторая информация, касающаяся версии PHP.
4. Захват баннеров с помощью Nmap
Еще одним инструментом, который мы можем использовать для захвата баннеров, является бесплатное открытое программное обеспечение для исследования и аудита безопасности сетей и выявления активных сетевых сервисов Nmap. Так, при использовании стандартной возможности по обнаружению служб инструментарий Nmap возвращает информацию о работающих сервисах, которая может быть нам интересна, например, номера версий этих служб. Но в Nmap также есть возможность использовать скрипты NSE (Nmap Scripting Engine), которая позволяет как использовать уже готовые скрипты, так и написать собственные. Одним из предустановленных скриптов мы и воспользуемся, чтобы выполнить захват баннера.
Для этого в окне командной строки набираем команду «nmap», после чего задаем опцию «--script», за которым следует имя конкретного скрипта, который мы планируем использовать (в данном случае — это «banner»), а также указываем IP-адрес или имя хоста целевого сервера:
«nmap --script banner 10.10.0.50»
Собранная информация в результате захвата баннеров со всех портов с помощью скрипта «banner» инструментария Nmap, представлена ниже:
~# nmap --script banner 10.10.0.50
Starting Nmap 7.70 ( https://nmap.org ) at 2019-08-08 09:15 CDT
Nmap scan report for 10.10.0.50
Host is up (0.0026s latency).
Not shown: 977 closed ports
PORT STATE SERVICE
21/tcp open ftp
|_banner: 220 (vsFTPd 2.3.4)
22/tcp open ssh
|_banner: SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
23/tcp open telnet
|_banner: \xFF\xFD\x18\xFF\xFD \xFF\xFD#\xFF\xFD'
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
|_banner: root@metasploitable:/#
2049/tcp open nfs
2121/tcp open ccproxy-ftp
|_banner: 220 ProFTPD 1.3.1 Server (Debian) [::ffff:10.10.0.50]
3306/tcp open mysql
| banner: >\x00\x00\x00\x0A5.0.51a-3ubuntu5 \x00-\x00\x00\x00$&0_n-0L\x00,
|_\xAA\x08\x02\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00...
5432/tcp open postgresql
5900/tcp open vnc
|_banner: RFB 003.003
6000/tcp open X11
6667/tcp open irc
| banner: :irc.Metasploitable.LAN NOTICE AUTH :*** Looking up your hostna
|_me...
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:1D:09:55:B1:3B (Dell)
Nmap done: 1 IP address (1 host up) scanned in 15.90 seconds
Как вы можете видеть, мы смогли захватить баннеры для нескольких служб. И некоторые из них легче прочитать, чем другие.
Чтобы сузить фокус внимания до одного или нескольких портов, используйте флаг «-p» и укажите через запятую конкретные порты, баннеры которых вы хотите захватить (также не лишним будет добавить флаг «-sV», чтобы исследовать только открытые порты для получения информации о службе и ее версии):
nmap -sV --script banner 10.10.0.50 -p 80
Собранная информация в результате захвата баннера веб-сервера с порта 80 с помощью скрипта «banner» инструментария Nmap, представлена ниже:
~# nmap -sV --script banner 10.10.0.50 -p 80
Starting Nmap 7.70 ( https://nmap.org ) at 2019-08-08 09:25 CDT
Nmap scan report for 10.10.0.50
Host is up (0.00065s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
|_http-server-header: Apache/2.2.8 (Ubuntu) DAV/2
MAC Address: 00:1D:09:55:B1:3B (Dell)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.76 seconds
Как вы можете видеть на скриншоте, в нашем случае запуск скрипта «banner» инструментария Nmap с указанием порта 80 предоставил нам некоторую интересную информацию о веб-сервере Apache.
5. Захват баннеров с помощью Metasploit
Последний способ захвата баннеров, который мы рассмотрим в рамках данного руководства, — это программа Metasploit. Инструментарий Metasploit имеет модули, которые могут собирать информацию о службах telnet, веб-серверов, SMTP и многом другом.
Для начала следует запустить командную оболочку Metasploit, набрав «msfconsole» в окне командной строки. После этого, используя команду «search», мы можем провести поиск любых модулей, связанных с захватом баннеров. Например, вводим запрос:
«search banner»
Скриншот выполнения запроса «banner» для поиска модулей командной оболочки Metasploit, связанных с захватом баннеров, представлен ниже:
msf5 > search banner
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/http/f5_bigip_virtual_server normal Yes F5 BigIP HTTP Virtual Server Scanner
1 auxiliary/scanner/imap/imap_version normal Yes IMAP4 Banner Grabber
2 auxiliary/scanner/pop3/pop3_version normal Yes POP3 Banner Grabber
3 auxiliary/scanner/smtp/smtp_version normal Yes SMTP Banner Grabber
4 auxiliary/scanner/telnet/lantronix_telnet_version normal Yes Lantronix Telnet Service Banner Detection
5 auxiliary/scanner/telnet/telnet_version normal Yes Telnet Service Banner Detection
6 exploit/multi/http/auxilium_upload_exec 2012-09-14 excellent Yes Auxilium RateMyPet Arbitrary File Upload Vulnerability
7 exploit/unix/webapp/openx_banner_edit 2009-11-24 excellent Yes OpenX banner-edit.php File Upload PHP Code Execution
8 exploit/unix/webapp/wp_easycart_ unrestricted_file_upload 2015-01-08 excellent No WordPress WP EasyCart Unrestricted File Upload
9 exploit/windows/ftp/proftp_banner 2009-08-25 normal No ProFTP 2.9 Banner Remote Buffer Overflow
Первый модуль, который мы будем использовать, может предоставить нам некоторую информацию о службе telnet на целевом сервере. Загружаем модуль «telnet_version» с помощью команды «use»:
«use auxiliary/scanner/telnet/telnet_version»
И просматриваем текущие настройки с помощью команды «options».
Скриншот текущих настроек модуля командной оболочки Metasploit для захвата баннера службы telnet представлен ниже:
msf5 auxiliary(scanner/telnet/telnet_version) > options
Module options (auxiliary/scanner/telnet/telnet_version):
Name Current Setting Required Description
---- --------------- -------- -----------
PASSWORD no The password for the specified username
RHOSTS yes The target address range or CIDR identifier
RPORT 23 yes The target port (TCP)
THREADS 1 yes The number of concurrent threads
TIMEOUT 30 yes Timeout for the Telnet probe
USERNAME no The username to authenticate as
Как мы можем видеть на скриншоте, единственная настройка, которую нам необходимо задать, до того, как запустить модуль, — это опция «rhosts». Установим туда IP-адрес нашей цели. Так как мы планируем использовать данный IP-адрес и с другими модулями, используем команду «setg», чтобы установить его глобально:
«setg rhosts 10.10.0.50»
Теперь все, что нам осталось сделать, — это запустить модуль «telnet_version», используя команду «run».
Скриншот выполнения модуля командной оболочки Metasploit для захвата баннера службы telnet представлен ниже:
msf5 auxiliary(scanner/telnet/telnet_version) > run
[+] 10.10.0.50:23 - 10.10.0.50:23 TELNET
_ _ _ _ _ _ ____
_ __ ___ ___| |_ __ _ ___ _ __ | | ___ (_) |_ __ _| |__ | | ___|___ \
| '_ ` _ \ / _ \ __/ _` / __| '_ \| |/ _ \| | __/ _` | '_ \| |/ _ \ __)
| | | | | | __/ || (_| \__ \ |_) | | (_) | | || (_| | |_) | | __// __/
|_| |_| |_|\___|\__\__,_|___/ .__/|_|\___/|_|\__\__,_|_.__/|_|\___|_____|
|_|
Warning: Never expose this VM to an untrusted network!
Contact: msfdev[at]metasploit.com
Login with msfadmin/msfadmin to get started
metasploitable login:
[*] 10.10.0.50:23 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Как вы можете убедиться, мы получили приветственный баннер и еще некоторую полезную информацию.
Далее мы будем использовать модуль «http_version», чтобы получить информацию о веб-сервере. Загрузим его с помощью команды «use»:
«use auxiliary/scanner/http/http_version»
И проверим настройки с помощью команды «options».
Скриншот текущих настроек модуля командной оболочки Metasploit для захвата баннера веб-сервера представлен ниже:
msf5 auxiliary(scanner/http/http_version) > options
Module options (auxiliary/scanner/http/http_version):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 10.10.0.50 yes The target address range or CIDR identifier
RPORT 80 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
THREADS 1 yes The number of concurrent threads
VHOST no HTTP server virtual host
Все обязательные настройки есть, так что запустим модуль с помощью команды «run».
Скриншот выполнения модуля командной оболочки Metasploit для захвата баннера веб-сервера представлен ниже:
msf5 auxiliary(scanner/http/http_version) > run
[+] 10.10.0.50:80 Apache/2.2.8 (Ubuntu) DAV/2 ( Powered by PHP/5.2.4-2ubuntu5.24 )
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Как вы можете видеть, мы смогли получить информацию о названии и номере версии веб-сервера Apache, а также версию используемого PHP.
Далее, мы можем просканировать систему с помощью модуля «smtp_version» для определения версии запущенной службы SMTP. SMTP (Simple Mail Transfer Protocol) — это сетевой протокол, предназначенный для передачи электронной почты. Загружаем модуль, используя команду «use»:
«use auxiliary/scanner/smtp/smtp_version»
И проверяем настройки командой «options».
Скриншот текущих настроек модуля командной оболочки Metasploit для определения версии запущенной службы SMTP представлен ниже:
msf5 auxiliary(scanner/smtp/smtp_version) > options
Module options (auxiliary/scanner/smtp/smtp_version):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 10.10.0.50 yes The target address range or CIDR identifier
RPORT 25 yes The target port (TCP)
THREADS 1 yes The number of concurrent threads
Все обязательные настройки есть, так что мы можем запускать модуль «smtp_version» с помощью команды «run», что даст нам определенное представление о службе SMTP, запущенной на целевом сервере.
Скриншот текущих настроек модуля командной оболочки Metasploit для определения версии запущенной службы SMTP представлен ниже:
msf5 auxiliary(scanner/smtp/smtp_version) > run
[+] 10.10.0.50:25 - 10.10.0.50:25 SMTP 220 metasploitable.localdomain ESMTP Postfix (Ubuntu)
[*] 10.10.0.50:25 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Metasploit также имеет несколько других полезных сканеров, например, для протоколов IMAP и POP3. Работа с ними очень похожа на те модули, которые мы уже рассмотрели в рамках данного практического руководства. Поэтому воспользоваться ими при необходимости вам не составит труда.
Как предотвратить захват баннера?
Из-за особенностей работы этих сервисов предотвратить захват баннеров трудно, но не невозможно. Очевидный способ остановить этот тип атак — ограничить информацию, передаваемую службой. Но для многих служб это неминуемо негативно повлияет на их функциональность. Тем не менее, простое отключение баннеров сможет обеспечить вам лучшую защиту от злоумышленников, ищущих легкой наживы.
Другой способ, который может быть использован для, например, веб-серверов, заключается в размещении прокси-сервера между сервером и Интернетом. Он поможет отфильтровать определенную часть информации или переформатировать заголовки, что сделает обнаружение гораздо более трудной задачей. Существуют также специальные программы, позволяющие скрыть информацию от злоумышленников, например, ServerMask и IIS Lockdown.
Выводы
В рамках данного практического руководство мы больше узнали о захвате баннеров и о том, как эти знания могут быть использованы злоумышленниками для сбора информации о службах, работающих в системе. Мы также детально рассмотрели несколько способов захвата баннеров с помощью таких инструментов, как telnet, NetCat, curl, Nmap и Metasploit. Вся эта информация может быть использована хакерами для проведения разведки и, в конечном итоге, лучшей организации проникновения в вашу систему.
Появились вопросы или нужна консультация? Обращайтесь!
Вечный параноик, Антон Кочуков.
См. также:
Авторизуйтесь для этого