Введение
Nikto — популярный сканер веб-серверов с открытым исходным кодом, который выполняет комплексное тестирование веб-серверов на наличие множества элементов, включая более 6700 потенциально опасных файлов/программ, проверяет устаревшие версии более чем 1250 серверов и проблемы, специфичные для версий, на более чем 270 серверах.
Многие веб-приложения имеют ограниченные области доступа, которые доступны только после того, как пользователь предоставит действительные учетные данные. HTTP Basic Authentication (Базовая аутентификация HTTP) — один из самых простых методов, используемых для защиты этих областей. Для проведения тщательной оценки безопасности крайне важно сканировать эти аутентифицированные разделы.
В этой лаборатории вы научитесь использовать Nikto для выполнения аутентифицированного сканирования каталога веб-сайта, защищенного Basic Authentication. Вы будете использовать опцию -id для предоставления необходимых учетных данных, что позволит Nikto получить доступ к защищенным ресурсам и протестировать их на наличие уязвимостей.
Определение веб-ресурса, защищенного Basic Authentication
На этом шаге вы сначала проверите, действительно ли целевой веб-ресурс защищен Basic Authentication. Распространенный способ проверки — использование команды curl для просмотра HTTP-заголовков, возвращаемых сервером при попытке доступа к ресурсу.
Незащищенный ресурс вернет статус 200 OK, тогда как защищенный вернет статус 401 Unauthorized вместе с заголовком WWW-Authenticate, указывающим тип требуемой аутентификации.
Попробуем получить доступ к защищенному каталогу http://localhost/protected/ с помощью curl с опцией -I, которая извлекает только HTTP-заголовки.
Выполните следующую команду в вашем терминале:
curl -I http://localhost/protected/
Вы должны увидеть вывод, похожий на следующий. Обратите внимание на статус HTTP/1.1 401 Unauthorized и заголовок WWW-Authenticate: Basic realm="...". Это подтверждает, что каталог защищен.
HTTP/1.1 401 Unauthorized
Date: [current_date]
Server: Apache/2.4.52 (Ubuntu)
WWW-Authenticate: Basic realm="Restricted Content"
Content-Type: text/html; charset=iso-8859-1
Получение необходимых имени пользователя и пароля
На этом шаге мы ознакомимся с учетными данными, необходимыми для доступа к защищенной области. В реальном тесте на проникновение вы можете получить их различными способами, такими как подбор пароля, поиск в общедоступных репозиториях кода или через социальную инженерию.
Для этой лаборатории среда была предварительно настроена с определенным именем пользователя и паролем. Вам понадобятся эти учетные данные для последующих шагов по выполнению аутентифицированного сканирования.
Учетные данные:
- Имя пользователя:
labex - Пароль:
P@ssw0rd123
На этом шаге нет команд для выполнения. Просто запишите указанные выше учетные данные и переходите к следующему шагу, где вы будете использовать их для аутентификации.
Использование опции -id в формате 'user:password'
На этом шаге вы узнаете об опции -id в Nikto, которая используется для предоставления учетных данных для HTTP-аутентификации. Формат представляет собой одну строку, содержащую имя пользователя и пароль, разделенные двоеточием (:).
Синтаксис: -id <username>:<password>
Прежде чем использовать это с Nikto, хорошей практикой является проверка работоспособности учетных данных. Вы можете сделать это снова с помощью curl, на этот раз используя опцию --user для предоставления учетных данных.
Выполните следующую команду для доступа к защищенной странице с правильными учетными данными:
curl --user labex:P@ssw0rd123 http://localhost/protected/
Если учетные данные верны, сервер предоставит доступ и вернет содержимое страницы, как показано ниже. Это подтверждает, что вы можете успешно аутентифицироваться.
This is a protected page accessible only with credentials.
Теперь, когда вы подтвердили учетные данные и поняли формат, вы готовы использовать их в сканировании Nikto.
Запуск аутентифицированного сканирования защищенной области
На этом шаге вы объедините знания из предыдущих шагов для выполнения полного аутентифицированного сканирования с помощью Nikto. Вам необходимо указать целевой хост и учетные данные для аутентификации.
Структура команды будет следующей:
nikto: Программа для запуска.-h http://localhost/protected/: Опция-h(host), указывающая непосредственно на каталог, который вы хотите сканировать.-id labex:P@ssw0rd123: Опция-idс именем пользователя и паролем.
Теперь выполните полную команду в вашем терминале. Сканирование может занять несколько минут.
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123
Nikto начнет сканирование. Поскольку вы предоставили действительные учетные данные, он сможет получить доступ к http://localhost/protected/ и проверить наличие уязвимостей в этом каталоге. Вывод будет выглядеть примерно так:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: [scan_start_time]
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /: Отсутствует заголовок X-Frame-Options, предотвращающий атаки clickjacking.
+ /: Заголовок X-Content-Type-Options не установлен. Это может позволить пользовательскому агенту отображать содержимое сайта иначе, чем указано MIME-типом.
+ /: Сервер может раскрывать inode через ETags, найден заголовок с файлом /, поля: 0x1ed 0x5f7e21e8a2e80
+ OPTIONS: Разрешенные HTTP-методы: GET, POST, OPTIONS, HEAD.
+ /: Apache/2.4.52 выглядит устаревшим (текущая версия как минимум Apache/2.4.54).
+ 8142 запросов: 0 ошибок и 5 элементов, сообщенных удаленным хостом
+ End Time: [scan_end_time] (30 секунд)
---------------------------------------------------------------------------
+ Протестирован 1 хост
Проверка успешного доступа Nikto к защищенным ресурсам
На этом шаге вы проанализируете результаты сканирования, чтобы убедиться, что Nikto успешно аутентифицировался и просканировал защищенную область. Ключевым показателем успешного аутентифицированного сканирования является отсутствие массовых ошибок аутентификации.
Хорошей практикой при анализе результатов сканирования является сохранение вывода в файл. Вы можете сделать это с помощью опции -o (output). Давайте повторно запустим сканирование и сохраним отчет в текстовый файл с именем nikto_report.txt.
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123 -o nikto_report.txt -Format txt
После завершения сканирования в вашем текущем каталоге (~/project) будет создан файл с именем nikto_report.txt. Вы можете просмотреть этот файл, чтобы проверить результаты. Быстрый способ проверить успех — посмотреть на строку сводки с количеством ошибок.
Используйте команду grep для поиска строки, содержащей "error(s)", в вашем файле отчета:
grep "error(s)" nikto_report.txt
Вывод должен показать 0 error(s), что подтверждает, что Nikto не столкнулся с такими проблемами, как 401 Unauthorized, при выполнении запросов. Это, в сочетании со списком обнаруженных элементов, доказывает, что аутентифицированное сканирование было успешным.
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
Итоги
Поздравляем с завершением этой лабораторной работы! Вы успешно выполнили аутентифицированное сканирование веб-уязвимостей с помощью Nikto.
В этой лабораторной работе вы научились:
- Идентифицировать веб-ресурс, защищенный HTTP Basic Authentication, с помощью
curl. - Понимать формат учетных данных, необходимых для аутентифицированного сканирования.
- Использовать опцию
-idNikto для предоставления имени пользователя и пароля. - Запускать сканирование защищенного каталога и проверять его успешность путем анализа вывода.
Овладение аутентифицированным сканированием является критически важным навыком для любого специалиста по безопасности, поскольку оно позволяет проводить гораздо более глубокую и всестороннюю оценку состояния безопасности веб-приложения, выявляя уязвимости, скрытые за стеной входа.


