Введение
Nikto — это сканер веб-серверов с открытым исходным кодом, который проводит всесторонние тесты веб-серверов по множеству параметров, включая более 6700 потенциально опасных файлов/программ, проверяет устаревшие версии более чем 1250 серверов и проблемы, специфичные для версий, на более чем 270 серверах. Он также проверяет элементы конфигурации сервера, такие как наличие нескольких индексных файлов и опции HTTP-сервера.
В этой лабораторной работе вы изучите основы использования Nikto для проведения базового сканирования. Мы начнем с настройки простого локального веб-сервера, который будет служить нашей целью, а затем используем Nikto для его сканирования и анализа результатов.
Определение IP-адреса или имени хоста цели
На этом этапе мы определим и подтвердим адрес нашего целевого веб-сервера. Перед запуском любого сканирования вы должны знать IP-адрес или имя хоста цели. Для этой лабораторной работы скрипт настройки уже запустил простой веб-сервер на вашей локальной машине.
В сетевом контексте вашу собственную машину можно называть по имени хоста localhost или по IP-адресу 127.0.0.1. Этот специальный адрес является "обратным" (loopback) адресом, что означает, что он всегда указывает обратно на локальную машину.
Давайте проверим, что наш веб-сервер запущен и доступен. Мы можем использовать команду curl для отправки запроса на наш локальный сервер. Сервер работает на порту 8000.
Выполните следующую команду в вашем терминале:
curl http://localhost:8000
Вы должны увидеть HTML-содержимое нашей простой веб-страницы, что подтверждает активность сервера и его готовность к сканированию.
<h1>Welcome to the Test Server</h1>
Теперь, когда мы подтвердили нашу цель по адресу localhost:8000, мы можем перейти к следующему шагу.
Формирование базовой команды сканирования с использованием флага -h
На этом этапе мы научимся формировать базовую команду сканирования Nikto. Nikto имеет множество опций, но самой фундаментальной является указание целевого хоста.
Флаг -h или -host используется для указания Nikto, какой сервер сканировать. Чтобы ознакомиться с этой и другими опциями, вы можете просмотреть справочное меню Nikto.
Выполните следующую команду для отображения справочной информации:
nikto -Help
Вывод будет довольно длинным и перечислит все доступные опции. Прокрутите его или используйте функцию поиска вашего терминала, чтобы найти опцию -h. Вы увидите описание, похожее на это:
...
-h, -host Целевой хост/IP/SSL-имя
...
Поскольку наш сервер работает не на стандартном порту HTTP (80), нам также необходимо указать номер порта. Мы можем сделать это с помощью флага -p или -port.
Исходя из этого, команда для сканирования нашего локального сервера на порту 8000 будет nikto -h localhost -p 8000. Мы выполним эту команду на следующем шаге.
Выполнение сканирования на целевом сервере
На этом шаге вы выполните сканирование Nikto, используя команду, которую мы составили. Это инициирует процесс сканирования, в ходе которого Nikto отправляет серию запросов целевому серверу для выявления потенциальных проблем.
Теперь запустите сканирование на вашем локальном веб-сервере.
nikto -h localhost -p 8000
После выполнения команды Nikto начнет сканирование. Сначала он отобразит некоторую базовую информацию о цели, а затем начнет выполнять свои тесты. Процесс может занять несколько минут. Результаты будут выводиться непосредственно в ваш терминал в режиме реального времени.
Наблюдение за выводом в реальном времени во время сканирования
На этом шаге мы рассмотрим вывод, сгенерированный сканированием Nikto. По мере выполнения сканирования Nikto сообщает о своих находках. Каждая находка обычно предваряется знаком плюс (+).
Вывод из предыдущего шага должен выглядеть примерно так. Обратите внимание, что номера версий и время будут отличаться.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: 2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ Отсутствует заголовок X-Frame-Options, предотвращающий кликджекинг.
+ Заголовок X-XSS-Protection не определен. Этот заголовок может подсказать пользовательскому агенту защититься от некоторых форм XSS.
+ Заголовок X-Content-Type-Options не установлен. Это может позволить пользовательскому агенту отображать содержимое сайта иначе, чем указано в MIME-типе.
+ CGI-директории не найдены (используйте '-C all' для принудительной проверки всех возможных директорий)
+ Разрешенные HTTP-методы: GET, HEAD, OPTIONS
+ OSVDB-3233: /: Метод HTTP TRACE активен, что предполагает уязвимость хоста к XST
...
+ Протестирован 1 хост
Уделите минуту, чтобы прочитать вывод. Вы можете увидеть, что Nikto определяет программное обеспечение сервера, проверяет важные заголовки безопасности (например, X-Frame-Options), перечисляет разрешенные HTTP-методы и сообщает о потенциальных уязвимостях. Эта информация имеет решающее значение для понимания состояния безопасности сервера.
Определение баннера сервера и информации о версии
На этом шаге мы сосредоточимся на одной из наиболее важных частей информации, которую предоставляет Nikto: баннере сервера. Баннер сервера — это текстовая строка, отправляемая веб-сервером в заголовках ответа, которая обычно идентифицирует программное обеспечение сервера и его версию.
Злоумышленники используют эту информацию для поиска известных уязвимостей, связанных с конкретной версией программного обеспечения. В результатах сканирования из предыдущего шага вы должны увидеть строку, начинающуюся с + Server:.
+ Server: SimpleHTTP/0.6 Python/3.10.12
Эта строка сообщает нам, что веб-сервер — это SimpleHTTP/0.6, работающий на Python/3.10.12.
Чтобы попрактиковаться в выделении конкретной информации из большого вывода, вы можете повторно запустить сканирование и использовать команду grep для фильтрации результатов, отображая только строку, содержащую "Server".
Выполните следующую команду:
nikto -h localhost -p 8000 | grep Server
Эта команда передает вывод Nikto команде grep, которая затем фильтрует и отображает только строки, содержащие слово "Server". Это очень полезный метод для обработки больших файлов журналов или вывода команд. Ваш вывод должен представлять собой одну строку, идентифицирующую сервер.
+ Server: SimpleHTTP/0.6 Python/3.10.12
Резюме
В этой лабораторной работе вы успешно выполнили базовое сканирование веб-сервера с помощью Nikto. Вы узнали, как определить цель, составить базовую команду сканирования с флагами -h и -p и выполнить ее. Вы также попрактиковались в наблюдении за выводом в реальном времени и выделении конкретной информации, такой как баннер сервера, с помощью таких инструментов, как grep.
Это только начало возможностей Nikto. Он имеет огромный набор опций для более целенаправленного и глубокого сканирования, включая проверки SSL, поиск в базе данных уязвимостей и различные форматы вывода. Теперь вы обладаете базовыми знаниями для изучения этих расширенных функций и улучшения своих навыков тестирования веб-безопасности.


