Введение
Nikto — популярный сканер веб-серверов с открытым исходным кодом, который выполняет комплексные тесты веб-серверов по множеству параметров, включая более 6700 потенциально опасных файлов/программ, проверку устаревших версий более чем 1250 серверов и проблем, специфичных для версий, на более чем 270 серверах. Однако иногда полный скан может быть слишком "шумным" или давать ложные срабатывания. В этой лаборатории вы научитесь уточнять ваши сканы Nikto, исключая определенные плагины, что сделает ваши результаты более сфокусированными и действенными.
Определение "шумного" или нежелательного плагина по результатам полного сканирования
На этом шаге мы выполним базовое сканирование Nikto против тестового веб-сервера. Этот первоначальный скан послужит отправной точкой, позволяя нам увидеть все результаты, сгенерированные набором плагинов по умолчанию. Из этого полного отчета мы сможем определить плагины, которые мы, возможно, захотим исключить в будущих сканированиях.
Сначала убедитесь, что вы находитесь в каталоге ~/project. Наш скрипт настройки уже запустил простой веб-сервер в фоновом режиме. Давайте выполним стандартное сканирование Nikto против него. Опция -h используется для указания целевого хоста.
Выполните следующую команду в вашем терминале:
nikto -h http://127.0.0.1:8000
После завершения сканирования вы увидите отчет. Ваш вывод будет похож на этот, хотя версия сервера и другие детали могут отличаться.
- 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.12
+ 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)
+ OSVDB-3233: /cgi-bin/: This might be interesting...
+ 7558 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
В приведенном выше выводе обратите внимание на строку: + OSVDB-3233: /cgi-bin/: This might be interesting.... Этот результат генерируется плагином cgi. Для этой лаборатории мы будем считать, что это ожидаемый каталог, а найденная информация — просто "шум", который мы хотим подавить.
Использование опции -plugins с ведущим дефисом
На этом шаге мы узнаем о синтаксисе, используемом для управления тем, какие плагины запускает Nikto. Для этой цели Nikto предоставляет опцию -plugins. Чтобы исключить плагин, вы указываете его имя с ведущим дефисом (-).
Чтобы узнать, какие плагины доступны для включения или исключения, вы можете использовать опцию -list-plugins. Она выведет список всех доступных плагинов с кратким описанием каждого.
Давайте выведем список всех плагинов:
nikto -list-plugins
Вывод будет представлять собой длинный список. Вот небольшой пример того, что вы увидите:
- Nikto v2.5.0
---------------------------------------------------------------------------
Loaded Main Plugins:
- apache_expect_header
Apache Expect header XSS (CVE-2006-3918)
- apache_users
Checks for sensitive files in ~user directories
- auth
Checks for authentication problems
- cgi
Checks for CGI directories
- clientaccesspolicy
Checks for permissive Client Access Policy (Silverlight)
... (список продолжается) ...
Из этого списка вы можете найти точные имена плагинов, которые вы хотите исключить, например cgi, который мы определили на предыдущем шаге.
Формирование команды для исключения одного плагина
На этом шаге мы объединим полученные знания для формирования команды нового сканирования, исключающего один плагин. Мы будем нацеливаться на плагин cgi, который мы определили на Шаге 1.
Синтаксис прост: вы добавляете опцию -plugins к вашей обычной команде сканирования, за которой следует имя плагина с префиксом дефиса.
Структура команды: nikto -h [цель] -plugins -[исключаемый_плагин]
Исходя из этой структуры, команда для сканирования нашего локального сервера с исключением плагина cgi выглядит следующим образом:
nikto -h http://127.0.0.1:8000 -plugins -cgi
Эта команда указывает Nikto выполнить стандартное сканирование http://127.0.0.1:8000, но пропустить любые проверки, связанные с плагином cgi. На следующем шаге мы выполним эту команду и понаблюдаем за разницей в выводе.
Запуск сканирования и проверка пропуска плагина
На этом шаге вы выполните команду, которую мы составили на предыдущем шаге. Запустив сканирование с исключенным плагином cgi, мы ожидаем, что в отчете больше не будет находки, связанной с каталогом /cgi-bin/.
Теперь выполните команду в вашем терминале:
nikto -h http://127.0.0.1:8000 -plugins -cgi
Сканирование будет запущено снова, но на этот раз оно будет немного быстрее, так как выполняется меньше проверок. Вывод должен выглядеть примерно так:
- 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.12
+ 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.
+ 7557 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Сравните этот вывод с выводом из Шага 1. Вы заметите, что строка + OSVDB-3233: /cgi-bin/: This might be interesting... теперь отсутствует. Это подтверждает, что мы успешно исключили плагин cgi из нашего сканирования.
Исключение нескольких плагинов в одной команде
На этом шаге вы узнаете, как исключить несколько плагинов в одном сканировании. Это полезно, когда вы хотите одновременно подавить несколько "шумных" или нерелевантных плагинов.
Чтобы исключить несколько плагинов, вы предоставляете список имен плагинов через запятую после опции -plugins. Каждое имя плагина в списке должно предваряться дефисом.
Синтаксис: nikto -h [цель] -plugins -[плагин1],-[плагин2],-[плагин3]
Давайте расширим нашу предыдущую команду, чтобы также исключить плагин apache_expect_header, который является еще одной распространенной находкой, которую в некоторых контекстах можно считать низкоприоритетной.
Сформируйте и выполните следующую команду:
nikto -h http://127.0.0.1:8000 -plugins -cgi,-apache_expect_header
Вывод теперь будет еще более лаконичным, поскольку проверки как от плагина cgi, так и от apache_expect_header были пропущены.
- 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.12
+ 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.
+ ... requests: 0 error(s) and 2 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Как вы можете видеть, выборочно исключая плагины, вы можете настроить поведение сканирования Nikto в соответствии с вашими конкретными потребностями, что приведет к более чистым и релевантным отчетам.
Итоги
В этой лабораторной работе вы научились настраивать сканирование Nikto, исключая определенные плагины. Вы начали с выполнения полного базового сканирования для определения плагина, который следует исключить. Затем вы узнали об опции -plugins и команде -list-plugins. Наконец, вы попрактиковались в составлении и выполнении команд для исключения как одного, так и нескольких плагинов, проверяя результаты, наблюдая за изменениями в выводе сканирования. Этот метод необходим для проведения более эффективных, целенаправленных и менее "шумных" сканирований уязвимостей с помощью Nikto.


