Введение
Nikto — популярный сканер веб-серверов с открытым исходным кодом, который выполняет комплексные тесты веб-серверов на наличие множества элементов, включая более 6700 потенциально опасных файлов/программ, проверяет устаревшие версии более чем 1250 серверов и проблемы, специфичные для версий, на более чем 270 серверах.
Прокси в данном контексте — это промежуточный сервер, который находится между вашим инструментом (Nikto) и целевым сервером. Для этого обычно используются такие инструменты, как Burp Suite, OWASP ZAP или mitmproxy. Направление трафика Nikto через прокси — это мощный метод для специалистов по безопасности. Он позволяет точно видеть, какие запросы отправляет сканер и какие ответы он получает. Это бесценно для отладки сканирований, понимания поведения сканера и даже для модификации трафика на лету для обхода мер безопасности.
В этой лаборатории вы научитесь настраивать локальный прокси, конфигурировать Nikto для его использования, запускать сканирование и анализировать перехваченный трафик. Мы будем использовать mitmproxy в качестве нашего прокси и простой локальный веб-сервер на Python в качестве нашей цели.
Настройка локального прокси, такого как Burp Suite или OWASP ZAP
На этом шаге мы запустим простой веб-сервер, который будет служить целью для сканирования, а затем запустим mitmproxy — легковесный прокси командной строки для перехвата нашего трафика. Все операции будут выполняться в терминале.
Сначала запустим базовый веб-сервер на Python. Этот сервер будет размещать простой файл index.html из нашей текущей директории, ~/project. Мы запустим его на порту 8000 в фоновом режиме, чтобы мы могли продолжать использовать тот же терминал.
Выполните следующую команду:
python3 -m http.server 8000 &
Символ & в конце команды запускает процесс в фоновом режиме. Вы должны увидеть вывод, указывающий идентификатор процесса.
Далее, запустим наш прокси. Мы будем использовать mitmweb — это веб-интерфейс для mitmproxy. Он предоставляет удобный способ просмотра захваченного трафика. По умолчанию он прослушивает прокси-трафик на порту 8080, а свой веб-интерфейс обслуживает на порту 8081.
Выполните следующую команду, чтобы запустить mitmweb также в фоновом режиме:
mitmweb --web-host 0.0.0.0 &
При запуске mitmweb вы увидите некоторый вывод. Теперь у вас есть целевой сервер, работающий на порту 8000, и прокси, работающий на порту 8080. Вы можете просматривать трафик прокси, открыв браузер в лабораторной среде и перейдя по адресу http://127.0.0.1:8081. Пока он будет пустым.
Настройка Nikto для использования прокси с помощью -useproxy
На этом шаге вы узнаете, как указать Nikto отправлять свой трафик через экземпляр mitmproxy, который мы только что запустили. Nikto имеет специальную опцию командной строки, -useproxy, для этой цели.
Синтаксис этой опции: -useproxy http://<proxy_host>:<proxy_port>. Поскольку наш mitmproxy работает на локальной машине (127.0.0.1) на порту 8080, правильный URL будет http://127.0.0.1:8080.
Прежде чем запускать полное сканирование, давайте выполним простой тест, чтобы убедиться, что Nikto может подключиться к целевому серверу через прокси. Мы будем использовать опцию -Plugins '@@NONE', которая указывает Nikto подключиться и вывести баннер сервера, но не запускать тесты на уязвимости. Это быстрый и эффективный способ проверить нашу конфигурацию прокси.
Выполните следующую команду в вашем терминале:
nikto -h 127.0.0.1 -p 8000 -useproxy http://127.0.0.1:8080 -Plugins '@@NONE'
Вы должны увидеть вывод, похожий на этот, показывающий баннер Nikto и информацию о целевом сервере:
- Nikto v2.x.x
---------------------------------------------------------------------------
+ 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
+ END TIME: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Теперь, если вы проверите интерфейс mitmweb в браузере по адресу http://127.0.0.1:8081, вы увидите первый перехваченный запрос от Nikto. Это подтверждает, что конфигурация прокси работает правильно.
Запуск сканирования через настроенный прокси
На этом шаге, после проверки конфигурации прокси, вы выполните фактическое сканирование уязвимостей с помощью Nikto. Это сгенерирует значительный объем трафика, который будет направлен через mitmproxy и зарегистрирован им.
Чтобы время сканирования было разумным для этой лаборатории, мы будем использовать опцию -Tuning 1. Опция тюнинга в Nikto контролирует типы выполняемых тестов. -Tuning 1 фокусируется на проверках "Интересные файлы / Виденные в логе" (Interesting File / Seen in Log), что является хорошей отправной точкой.
Выполните следующую команду для запуска сканирования:
nikto -h 127.0.0.1 -p 8000 -useproxy http://127.0.0.1:8080 -Tuning 1
Nikto начнет сканирование целевого сервера. Вы увидите его прогресс и любые находки непосредственно в терминале. Вывод может выглядеть примерно так, в зависимости от находок:
- Nikto v2.x.x
---------------------------------------------------------------------------
+ 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-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
...
+ /: The server returns the following message when a request for a non-existent page is made: b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"\n "http://www.w3.org/TR/html4/strict.dtd">\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8">\n <title>Error response</title>\n </head>\n <body>\n <h1>Error response</h1>\n <p>Error code: 404.</p>\n <p>Message: File not found.</p>\n <p>Error code explanation: 404 - Nothing matches the given URI.</p>\n </body>\n</html>'
...
+ END TIME: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Пока сканирование выполняется, вы можете переключиться на вкладку браузера mitmweb и наблюдать за появлением запросов в реальном времени.
Наблюдение за трафиком Nikto в истории HTTP прокси
На этом шаге вы сосредоточитесь на анализе трафика, перехваченного mitmproxy. Именно здесь становится очевидной реальная ценность использования прокси. Для этого шага новые команды не требуются; вы будете использовать интерфейс mitmweb в вашем браузере.
Перейдите на вкладку браузера с запущенным mitmweb по адресу http://127.0.0.1:8081. Вы должны увидеть длинный список веб-запросов. Каждая запись в этом списке представляет собой конкретный тест, который Nikto выполнил против целевого сервера.
Нажмите на любой из запросов в списке слева. Правая панель обновится, показывая детали этого конкретного запроса и соответствующего ему ответа.
Изучите интерфейс:
- Вкладка Request (Запрос): Здесь вы можете увидеть точный HTTP-запрос, отправленный Nikto. Обратите внимание на:
- Строку запроса (например,
GET /some/test/file.html HTTP/1.1). - Заголовок
Host, который указывает на наш целевой сервер. - Заголовок
User-Agent, который идентифицирует клиент какNikto.
- Строку запроса (например,
- Вкладка Response (Ответ): Эта вкладка показывает полный ответ сервера. Вы можете увидеть код состояния HTTP (например,
200 OKили404 Not Found), заголовки ответа и тело ответа.
Потратьте несколько минут, чтобы просмотреть различные запросы. Вы увидите, как Nikto пытается получить доступ к распространенным административным каталогам (например, /admin/), проверяет резервные копии файлов (например, /index.html.bak) и выполняет другие стандартные проверки. Наблюдая за этим трафиком, вы получите глубокое понимание того, как работает сканер уязвимостей.
Анализ влияния прокси на результаты сканирования
На этом шаге вы проанализируете, как использование прокси может потенциально повлиять на сканирование. Для этого вам нужна базовая линия для сравнения. Вы снова запустите то же сканирование Nikto, но на этот раз без прокси.
Выполните ту же команду сканирования, что и в Шаге 3, но опустите опцию -useproxy:
nikto -h 127.0.0.1 -p 8000 -Tuning 1
Наблюдайте за выводом в вашем терминале. Теперь сравните результаты этого сканирования с результатами проксированного сканирования из Шага 3. В нашей простой лабораторной среде, без установленных межсетевых экранов или других систем безопасности, результаты должны быть идентичными.
Итак, в чем смысл прокси?
- Видимость (Отладка): Как вы видели на предыдущем шаге, основное преимущество — это видимость. Если сканирование не удавалось или давало неожиданные результаты, прокси был бы первым местом, где можно было бы понять, что идет не так. Вы можете видеть необработанные запросы и ответы, что крайне важно для устранения неполадок.
- Производительность: Прокси добавляет дополнительный "прыжок" для сетевого трафика, что может внести небольшую задержку. Для очень больших сканирований это может незначительно увеличить общее время сканирования.
- Модификация (Продвинутый уровень): Продвинутые прокси могут быть настроены для модификации трафика. Например, вы можете настроить правило для автоматического изменения
User-Agentс "Nikto" на строку обычного браузера. Это может быть использовано для обхода простого межсетевого экрана веб-приложений (WAF), который блокирует запросы на основе User-Agent Nikto. Хотя в этой лаборатории мы не выполняем модификацию, понимание этой возможности является ключевым.
Таким образом, для этой лаборатории основным эффектом прокси было предоставление вам "человека посередине" (man-in-the-middle) представления процесса сканирования, что является фундаментальным навыком для тестирования безопасности.
Резюме
В этой лаборатории вы успешно научились использовать прокси при выполнении сканирования уязвимостей веб-приложений с помощью Nikto.
Вы начали с настройки необходимой среды, включая простой веб-сервер на Python в качестве цели и mitmproxy в качестве вашего перехватывающего прокси. Затем вы научились использовать опцию командной строки Nikto -useproxy для направления всего трафика сканирования через прокси.
Запустив сканирование и наблюдая за трафиком в интерфейсе mitmweb, вы получили прямое представление о типах запросов, которые отправляет Nikto, и ответах, которые он получает. Наконец, запустив сравнительное сканирование без прокси, вы проанализировали, как прокси может повлиять на сканирование, придя к выводу, что его основная роль в данном контексте заключается в обеспечении критически важной видимости для анализа и отладки. Это фундаментальный метод, используемый специалистами по безопасности для лучшего понимания и контроля своих инструментов тестирования.


