Сканирование конкретного виртуального хоста с помощью Nikto

Kali LinuxBeginner
Практиковаться сейчас

Введение

Nikto — популярный сканер веб-серверов с открытым исходным кодом, который выполняет комплексные тесты веб-серверов на наличие множества элементов, включая более 6700 потенциально опасных файлов/программ, проверяет устаревшие версии более чем 1250 серверов и проблемы, специфичные для версий, на более чем 270 серверах.

Распространенной конфигурацией веб-сервера является виртуальный хостинг, при котором один сервер с одним IP-адресом размещает несколько веб-сайтов (например, site1.example.com и site2.example.com). При сканировании IP-адреса сервера напрямую, сканер, такой как Nikto, может тестировать только веб-сайт по умолчанию, настроенный на сервере, полностью пропуская другие сайты.

В этой лаборатории вы научитесь использовать опцию -vhost Nikto для целенаправленного нацеливания на один из виртуальных хостов на сервере, гарантируя точность и сфокусированность вашего сканирования.

Определение сервера, размещающего несколько веб-сайтов на одном IP-адресе

На этом шаге вы убедитесь, что веб-сервер в нашей среде размещает два разных веб-сайта на одном IP-адресе (127.0.0.1). Мы можем сделать это, отправляя HTTP-запросы с различными заголовками Host с помощью команды curl. Заголовок Host сообщает веб-серверу, к какому веб-сайту клиент хочет получить доступ.

Сначала отправим запрос к site1.labex.io. Опция --header "Host: site1.labex.io" указывает curl отправить указанный заголовок хоста.

curl --header "Host: site1.labex.io" http://127.0.0.1

Вы должны увидеть HTML-содержимое первого сайта:

<html><body><h1>Welcome to Site 1</h1></body></html>

Далее отправим запрос к site2.labex.io, изменив заголовок Host.

curl --header "Host: site2.labex.io" http://127.0.0.1

На этот раз вы увидите содержимое второго сайта:

<html><body><h1>This is Site 2</h1><p>This site has a test.txt file.</p></body></html>

Это подтверждает, что наш сервер по адресу 127.0.0.1 обслуживает разный контент в зависимости от имени хоста, что и является определением виртуального хостинга.

Определение имени хоста целевого виртуального хоста

На этом шаге мы подтвердим имена хостов, настроенные для нашего локального сервера. В реальных условиях для поиска виртуальных хостов используются методы разведки, такие как перечисление DNS или анализ SSL-сертификатов. В данной лаборатории имена хостов были предварительно настроены в файле /etc/hosts. Этот файл используется операционной системой для сопоставления имен хостов с IP-адресами.

Давайте изучим содержимое файла /etc/hosts с помощью команды cat, чтобы увидеть эти сопоставления.

cat /etc/hosts

Вывод покажет стандартные сопоставления localhost, а также две пользовательские записи, которые мы добавили для наших виртуальных хостов:

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 site1.labex.io
127.0.0.1 site2.labex.io

Из этого вывода мы можем подтвердить, что site1.labex.io и site2.labex.io являются именами хостов, которые мы можем использовать для нашего целевого сканирования. В следующих шагах мы будем нацеливаться на site2.labex.io.

Использование опции -vhost для указания целевого имени хоста

На этом шаге вы узнаете об опции Nikto, используемой для сканирования конкретного виртуального хоста. По умолчанию nikto -h 127.0.0.1 будет сканировать первый настроенный виртуальный хост (site1.labex.io). Чтобы указать Nikto сканировать другой виртуальный хост, мы должны использовать опцию -vhost (или -host+).

Эта опция инструктирует Nikto использовать предоставленное имя хоста в заголовке Host всех своих HTTP-запросов, гарантируя, что веб-сервер направит запросы на правильный веб-сайт.

Синтаксис: nikto -h <IP_ADDRESS> -vhost <HOSTNAME>

Давайте проведем быструю проверку без полного сканирования. Мы можем использовать опцию -Display V для вывода подробной информации, которая покажет нам эффективную конфигурацию для сканирования. Мы будем нацеливаться на site2.labex.io.

nikto -h 127.0.0.1 -vhost site2.labex.io -Display V

Вывод покажет детали конфигурации сканирования. Найдите значение заголовка Host, чтобы убедиться, что оно установлено правильно.

...
---------------------------------------------------------------------------
- Nikto 2.x
---------------------------------------------------------------------------
...
- Scan Options:
    ...
    Host -> 127.0.0.1
    ...
    VHost -> site2.labex.io
...
- Headers:
    ...
    Host: site2.labex.io
    ...
---------------------------------------------------------------------------
+ 1 host(s) to test

Вывод ясно показывает, что Nikto будет использовать Host: site2.labex.io в своих запросах, что именно то, что нам нужно.

Выполнение сканирования против IP-адреса сервера с флагом vhost

Теперь, когда вы понимаете, как работает опция -vhost, пришло время выполнить полное сканирование против нашего целевого виртуального хоста, site2.labex.io.

Выполните следующую команду в вашем терминале. Сканирование займет несколько минут, так как Nikto проведет различные тесты.

nikto -h 127.0.0.1 -vhost site2.labex.io

После начала сканирования вы увидите вывод, похожий на следующий. Обратите внимание, что в выводе указано Target Host как site2.labex.io, что подтверждает, что мы сканируем правильный виртуальный хост.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    site2.labex.io
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ /test.txt: A text file was found.
+ 7 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           ...
+ 1 host(s) tested

Обратите внимание на строку + /test.txt: A text file was found.. Этот файл существует только на site2.labex.io, что еще раз подтверждает, что наше сканирование было правильно нацелено.

Подтверждение того, что результаты специфичны для целевого vhost

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

Выполните стандартное сканирование Nikto против IP-адреса сервера:

nikto -h 127.0.0.1

Наблюдайте за выводом этого нового сканирования.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
...
(other findings)
...
+ End Time:           ...
+ 1 host(s) tested

Сравните этот вывод с выводом сканирования из предыдущего шага. Вы заметите два ключевых отличия:

  1. Target Hostname теперь localhost (или 127.0.0.1), что является значением по умолчанию для сервера.
  2. Отсутствует находка + /test.txt: A text file was found.. Это связано с тем, что test.txt не существует на сайте по умолчанию (site1.labex.io), и это сканирование не было нацелено на site2.labex.io.

Это сравнение наглядно показывает, что без -vhost вы могли бы упустить уязвимости и информацию, специфичные для site2.labex.io.

Резюме

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

Вы практиковались в:

  • Использовании curl с пользовательским заголовком Host для ручной проверки различных веб-сайтов на одном IP-адресе.
  • Определении назначения опции -vhost в Nikto.
  • Выполнении целевого сканирования конкретного виртуального хоста с использованием команды nikto -h <IP> -vhost <HOSTNAME>.
  • Сравнении результатов целевого сканирования и сканирования по умолчанию для понимания важности этого метода.

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