Введение
Nikto — популярный сканер веб-серверов с открытым исходным кодом, который выполняет комплексные тесты веб-серверов на наличие множества элементов, включая более 6700 потенциально опасных файлов/программ, проверяет устаревшие версии более чем 1250 серверов и проблемы, специфичные для версий, на более чем 270 серверах.
При запуске Nikto из командной строки он выдает много выходных данных в реальном времени, что полезно для интерактивного использования. Однако, когда вы хотите автоматизировать сканирование с помощью скриптов, такой подробный вывод может быть нежелательным.
В этой лабораторной работе вы научитесь использовать опцию -Mute для бесшумного запуска сканирований Nikto. Это важный навык для интеграции Nikto в автоматизированные рабочие процессы безопасности и скрипты оболочки, позволяющий захватывать результаты в файлы, не загромождая консоль.
Запуск стандартного сканирования и наблюдение за подробным выводом в консоли
На этом шаге вы выполните базовое сканирование Nikto против тестового веб-сервера. Это поможет вам понять стандартное поведение и объем информации, которую он выводит в консоль.
Сначала давайте выполним стандартное сканирование. Опция -h используется для указания целевого хоста. Наш тестовый сервер запущен локально на порту 8000.
Выполните следующую команду в вашем терминале:
nikto -h http://127.0.0.1:8000
Вы увидите много выходных данных, включая баннер версии Nikto, информацию о цели и обновления статуса в реальном времени по мере выполнения сканирования.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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)
... (много других строк вывода) ...
+ 1 host(s) tested
Этот подробный вывод полезен для мониторинга сканирования в реальном времени, но он не идеален для автоматизации.
Использование опции -Mute для подавления обычного вывода в консоли
На этом шаге вы узнаете, как использовать опцию -Mute для значительного сокращения вывода в консоли. Эта опция указывает Nikto подавлять обычные HTTP-запросы и ответы, которые он обычно отображает во время сканирования.
Опция -Mute идеально подходит для ситуаций, когда вас интересуют только окончательные результаты, а не пошаговый прогресс.
Теперь выполните то же сканирование, что и раньше, но добавьте опцию -Mute в конец команды:
nikto -h http://127.0.0.1:8000 -Mute
Наблюдайте за выводом сейчас. Он стал намного чище. Баннер и обновления статуса в реальном времени исчезли. Вы увидите только итоговое резюме результатов.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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)
+ 1 host(s) tested
Как видите, вывод стал гораздо менее загроможденным, что облегчает его разбор или чтение, когда сканирование является частью более крупного процесса.
Объединение -Mute с -o для бесшумного сохранения результатов в файл
На этом шаге мы пойдем дальше в подавлении вывода. Цель состоит в том, чтобы выполнить сканирование, которое не выводит ничего в консоль и сохраняет все найденные результаты непосредственно в файл. Это наиболее распространенное требование для автоматизированных скриптов.
Для достижения этой цели вы можете объединить опцию -Mute с опцией -o (или --output), которая указывает файл вывода.
Выполните следующую команду. Она выполнит сканирование, подавит весь вывод в консоль и сохранит отчет в файл с именем nikto_report.txt.
nikto -h http://127.0.0.1:8000 -Mute -o nikto_report.txt
После выполнения команды вы заметите, что приглашение терминала возвращается немедленно, без вывода каких-либо результатов сканирования. Сканирование выполнялось бесшумно в фоновом режиме.
Чтобы убедиться, что отчет был сгенерирован, сначала выведите список файлов в текущем каталоге:
ls
Вы должны увидеть nikto_report.txt в списке.
nikto_report.txt www
Теперь просмотрите содержимое файла отчета:
cat nikto_report.txt
Содержимое файла будет таким же, как и подавленный вывод, который вы видели на предыдущем шаге. Этот метод необходим для ведения журналов или программной обработки результатов сканирования.
Написание простого bash-скрипта, вызывающего бесшумное сканирование Nikto
На этом шаге вы создадите простой bash-скрипт для автоматизации бесшумного сканирования Nikto. Это демонстрирует, как опции -Mute и -o используются в реальном сценарии автоматизации.
Сначала создайте новый файл с именем scan.sh с помощью текстового редактора nano:
nano scan.sh
В редакторе nano добавьте следующее содержимое. Этот скрипт выведет сообщения о статусе пользователю, выполнит бесшумное сканирование Nikto и сохранит результаты в новый файл с именем script_report.txt.
#!/bin/bash
echo "Starting silent Nikto scan..."
nikto -h http://127.0.0.1:8000 -Mute -o script_report.txt
echo "Scan complete. Report saved to script_report.txt"
Нажмите Ctrl+X для выхода, Y для сохранения изменений и Enter для подтверждения имени файла.
Далее вам нужно сделать скрипт исполняемым. Используйте команду chmod для добавления прав на выполнение:
chmod +x scan.sh
Наконец, запустите ваш новый скрипт:
./scan.sh
Скрипт отобразит сообщения "Starting" и "Scan complete", но само сканирование Nikto не будет выводить ничего в консоль.
Starting silent Nikto scan...
Scan complete. Report saved to script_report.txt
Вы можете убедиться, что новый файл отчета script_report.txt был создан, снова используя команду ls.
Проверка кода завершения скрипта для определения успешности сканирования
На этом шаге вы узнаете, как проверять код завершения вашего скрипта. В скриптовых языках оболочки код завершения — это число, которое команда или скрипт возвращает после завершения выполнения. Код завершения 0 по соглашению означает, что команда выполнена успешно.
Это фундаментальное понятие для создания надежных скриптов, поскольку оно позволяет проверить, успешно ли выполнен шаг, прежде чем переходить к следующему.
Сначала снова запустите ваш скрипт:
./scan.sh
Сразу после завершения скрипта вы можете проверить его код завершения, изучив специальную переменную оболочки $?. Эта переменная всегда содержит код завершения последней выполненной команды.
Выполните следующую команду:
echo $?
Вывод должен быть 0, что указывает на то, что ваш скрипт scan.sh завершился без ошибок.
0
В более продвинутых скриптах вы можете использовать эту проверку в операторе if для обработки ошибок, например:
./scan.sh
if [ $? -eq 0 ]; then
echo "Script completed successfully."
else
echo "Script failed with an error."
fi
Это подтверждает, что вы можете надежно выполнять бесшумное сканирование Nikto в рамках скрипта и программно проверять его завершение.
Резюме
В этой лабораторной работе вы научились управлять выводом Nikto в консоль для эффективного написания скриптов и автоматизации.
Вы начали с наблюдения за подробным выводом стандартного сканирования Nikto. Затем вы использовали опцию -Mute для подавления несущественного вывода и опцию -o для бесшумного сохранения результатов сканирования в файл. Наконец, вы интегрировали эти опции в bash-скрипт и научились проверять код завершения скрипта для подтверждения успешного выполнения.
Эти навыки являются основополагающими для всех, кто стремится автоматизировать оценку веб-безопасности и создавать мощные, неинтерактивные инструменты безопасности.


