Сканирование веб-сайта с поддержкой SSL или TLS с помощью Nikto

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

Введение

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

Хотя Nikto может легко сканировать стандартные HTTP-сайты, для сканирования сайтов, использующих SSL/TLS (HTTPS), требуется специальная опция. В этой лаборатории вы научитесь использовать Nikto для сканирования веб-сайта с поддержкой SSL/TLS. Для тестирования мы будем использовать локально размещенный безопасный веб-сервер. Вы узнаете, как инициировать SSL-сканирование, направить его на определенный порт и интерпретировать информацию, связанную с SSL, в результатах сканирования.

Определение целевого веб-сайта с использованием HTTPS

На этом шаге мы убедимся, что наш целевой безопасный веб-сервер запущен и доступен. Скрипт настройки для этой лаборатории уже запустил простой веб-сервер Python, использующий SSL/TLS. Он прослушивает localhost на порту 4433.

Чтобы проверить, что сервер запущен, мы можем использовать команду curl. Поскольку наш сервер использует самоподписанный сертификат (который не является доверенным центром сертификации), мы должны использовать флаг -k или --insecure с curl, чтобы указать ему продолжить работу, несмотря на недоверенный сертификат.

Выполните следующую команду в вашем терминале:

curl -k https://localhost:4433

Вы должны увидеть HTML-содержимое главной страницы сервера, что подтверждает, что сервер активен и обслуживает контент по HTTPS.

<html><body><h1>Welcome to the Secure Test Server!</h1></body></html>

Теперь, когда мы убедились, что наша цель работает, мы можем приступить к ее сканированию.

Использование флага -ssl для включения режима SSL

На этом шаге мы узнаем, почему флаг -ssl необходим для сканирования HTTPS-сайтов. По умолчанию Nikto пытается сканировать цели через стандартный HTTP на порту 80. Если вы укажете порт, который ожидает SSL/TLS-соединение, не указав использование SSL, сканирование завершится неудачей, поскольку начальное рукопожатие связи будет некорректным.

Давайте попробуем запустить Nikto против нашего безопасного сервера на порту 4433 без флага -ssl, чтобы увидеть это поведение.

nikto -h localhost -p 4433

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

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        4433
---------------------------------------------------------------------------
+ Start Time:         ...
---------------------------------------------------------------------------
+ ERROR: No web server found on localhost:4433
---------------------------------------------------------------------------
+ 0 host(s) tested

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

Запуск сканирования против HTTPS-цели

На этом шаге вы выполните полноценное сканирование уязвимостей против нашего безопасного веб-сервера с использованием флага -ssl. Комбинируя флаги -h (хост), -p (порт) и -ssl, мы можем указать Nikto подключиться к правильному хосту и порту, а также использовать SSL/TLS-соединение.

Выполните следующую команду в вашем терминале, чтобы начать сканирование:

nikto -h localhost -p 4433 -ssl

Nikto начнет сканирование. Поскольку наш сервер использует самоподписанный сертификат, Nikto, скорее всего, отобразит предупреждение о недоверенном издателе сертификата, что в данном случае ожидаемо. Затем сканирование продолжится.

Вывод будет выглядеть примерно так:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        4433
+ SSL Info:           Self-signed certificate.
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server:             SimpleHTTP/0.6 Python/3.10.12
+ 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
...
+ 1 host(s) tested

Теперь вы успешно просканировали веб-сайт с поддержкой SSL с помощью Nikto.

Наблюдение за специфичными для SSL проверками в выводе

На этом шаге мы проанализируем вывод предыдущего сканирования, чтобы выявить информацию, специфичную для SSL/TLS-соединений. При использовании флага -ssl Nikto не только сканирует на наличие общих веб-уязвимостей, но и предоставляет сведения о сертификате и конфигурации SSL/TLS сервера.

Если вы прокрутите вывод команды из предыдущего шага, вы найдете информацию, относящуюся к SSL-сертификату. Чтобы выделить эту информацию, вы можете повторно запустить сканирование и использовать grep для фильтрации вывода. Давайте найдем строку "Subject" сертификата.

nikto -h localhost -p 4433 -ssl | grep "Subject"

Эта команда снова запустит сканирование, но отобразит только строки, содержащие слово "Subject".

+ Subject: C=US, ST=California, L=MountainView, O=LabEx, OU=IT, CN=localhost

Эта строка показывает детали, встроенные в SSL-сертификат сервера, такие как Страна (C), Штат (ST) и Общее имя (CN). Эта информация может быть полезна для проверки подлинности сервера во время оценки безопасности. Nikto также проверяет информацию о шифрах и другие уязвимости, связанные с SSL, предоставляя более полную картину конфигурации безопасного сервера.

Принудительное использование режима SSL на нестандартном порту

На этом шаге мы рассмотрим, как "принудить" Nikto использовать SSL на любом порту, даже на том, который обычно обрабатывает незашифрованный трафик. Это полезно для выявления неправильно сконфигурированных служб, которые могут использовать HTTPS на необычном порту, например, 8080.

Сначала нам нужно остановить существующий сервер и запустить новый на порту 8080.

## Остановить предыдущий сервер
pkill -f "python3 /home/labex/project/https_server/server.py"

## Создать новую конфигурацию сервера для порта 8080
cat << EOF > /home/labex/project/https_server/server_8080.py
import http.server
import ssl
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
server_address = ('0.0.0.0', 8080)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
                               server_side=True,
                               certfile='cert.pem',
                               keyfile='key.pem',
                               ssl_version=ssl.PROTOCOL_TLS)
httpd.serve_forever()
EOF

## Запустить новый сервер в фоновом режиме и подождать немного
python3 /home/labex/project/https_server/server_8080.py &> /dev/null &
sleep 3

Теперь наш безопасный сервер запущен на порту 8080. Без флага -ssl Nikto предположил бы, что это стандартный HTTP-порт. Включив -ssl, мы принуждаем его инициировать TLS-рукопожатие.

Запустите сканирование на порту 8080:

nikto -h localhost -p 8080 -ssl

Вывод будет похож на предыдущие сканирования, подтверждая, что Nikto успешно подключился с использованием SSL/TLS к нестандартному порту и выполнил свои тесты.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8080
+ SSL Info:           Self-signed certificate.
...

Это подтверждает вашу способность использовать Nikto для сканирования SSL/TLS-сервисов на любом произвольном порту.

Итоги

В этой лабораторной работе вы изучили основной процесс сканирования веб-сайтов с поддержкой SSL/TLS с помощью Nikto. Вы начали с идентификации и проверки целевого HTTPS-сервера. Затем вы на собственном опыте убедились, почему простое указание Nikto на HTTPS-порт не работает, и узнали, что для включения SSL/TLS-связи требуется флаг -ssl.

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