Введение
Fieldwork Studio проводит открытые мастер-классы по ремёслам. Расписание должно быть удобно просматривать и скачивать, а доступ к служебной диагностике должен требовать авторизации. Ваша задача — подтвердить, какие ответы действительно раскрывают внутренние диагностические данные этого приложения.
Сначала воспользуйтесь обычным сайтом. Затем сравните три реальных ответа и запустите начальную проверку Nuclei с намеренно слишком широким условием. В конце вы сформулируете выводы со ссылками на изученные ответы, а не будете считать каждое обнаружение сканера подтверждённой проблемой. Все настройки и учётные записи синтетические; HTTP-запросы и выполнение сканера настоящие.
Достаточно базовых навыков ввода команд в терминале и понимания путей. HTTP, JSON и вывод сканера объясняются по мере появления. Аудитор Kali и целевой сервис работают в изолированных контейнерах с общим ядром одной VM. Проверяйте только предоставленную область, используйте запросы только для чтения и сохраните сайт мастер-классов и расписание. Заложите около 50 минут на чтение и обычные ошибки; это авторская оценка.
Воспользуйтесь открытым расписанием мастер-классов
На этом шаге вы определите, что должно оставаться доступным обычным посетителям. Откройте Workshops. Страница представляет ремесленные занятия Fieldwork Studio. Перейдите по ссылке Get the workshop schedule, чтобы скачать fieldwork-schedule.csv. Файл содержит название, время и помещение для занятий Printmaking и Bookbinding. Открытый доступ к этим сведениям предусмотрен намеренно.

Две карточки занятий и зелёная ссылка на расписание — обычные общедоступные функции сервиса. При оценке диагностики сохраните реальные сведения о мастер-классах.
Переключитесь на Auditor, терминал Kali. Он открывается в /home/labex/project. Веб-интерфейс и этот терминал обращаются к одному сервису мастер-классов; они не представляют разные целевые машины.
cat выводит содержимое текстового файла. Прежде чем отправлять проверочные запросы, прочитайте разрешённую область:
cat scope.txt
Разрешены только HTTP GET-запросы для чтения к базовым URL из targets.txt. Базовый URL обозначает сайт; к нему добавляется диагностический маршрут. Выведите список:
cat targets.txt
Вы должны увидеть studio, archive и manual под http://workshop.test:8080/. Порт 8080 обозначает сервис этого курса. Сохраните все сайты, настройки и данные мастер-классов. Вы оцениваете доступ, а не изменяете приложение.
Если относительный путь к файлу не работает, выведите текущий каталог командой pwd, затем вернитесь:
cd /home/labex/project
Закрытие или повторное подключение Auditor не создаёт сайты заново. Ваши файлы сохраняются в этом рабочем каталоге.
Изучите ответы перед принятием решения
На этом шаге вы сравните диагностическую конечную точку каждого разрешённого сайта. Оставайтесь в Auditor. HTTP — протокол запросов и ответов, используемый этим сайтом. curl отправляет запрос и выводит тело ответа. Параметр -i также выводит заголовки ответа, включая статус и тип содержимого.
curl -i http://workshop.test:8080/studio/maintenance/diagnostics
Ответ начинается с HTTP/1.0 200 OK. Это означает, что сервер успешно вернул запрошенный ресурс; само по себе это не доказывает наличие проблемы безопасности. Content-Type: application/json; charset=utf-8 указывает, что тело содержит JSON в текстовой кодировке UTF-8. JSON представляет именованные значения внутри фигурных скобок. Имена и текстовые значения заключаются в двойные кавычки; числовое значение записывается без кавычек.
Плоский объект содержит service, visibility, database_file и request_count. Для этого приложения service равен workshop-portal, visibility — internal, файл базы данных задаётся абсолютным путём, а счётчик запросов — неотрицательным целым числом. Путь к файлу берётся из конфигурации работающего сайта: его открытая страница мастер-классов и скачиваемый CSV читают именно эту базу SQLite. SQLite хранит небольшую базу данных в файле. Счётчик меняется по мере поступления запросов. Это сочетание — опубликованный контракт диагностического ответа из scope.txt. Оно не является универсальным определением уязвимости.
Запрос без аутентификации получил эти внутренние значения. Обратите внимание на заголовок X-Audit-Event: сервер присваивает каждому реальному ответу отдельный идентификатор. Запишите его в недоступном посторонним месте для итоговой оценки. На это свидетельство можно сослаться, не копируя внутренние значения в сводку.
Сравните второй сайт:
curl -i http://workshop.test:8080/archive/maintenance/diagnostics
Ожидайте 401 Unauthorized и пояснение, что требуются учётные данные для обслуживания. Отказ предусмотрен намеренно. Разрешённая область не предоставляет вам учётных данных, и пытаться обойти защиту не следует. curl -i может завершиться нормально и при этом показать HTTP 401: успешная доставка отказа отличается от успешной авторизации.
Теперь изучите третий сайт:
curl -i http://workshop.test:8080/manual/maintenance/diagnostics
Он возвращает HTTP 200 и JSON, но диагностические поля вложены в объект example. Они описывают формат ответа, а не являются актуальным диагностическим объектом верхнего уровня этого сайта. Сравнивайте структуру и смысл, а не просто ищите слово internal. Сохраните также идентификатор события этого ответа.
Если вы видите 404, внимательно сравните URL с предоставленным маршрутом и повторите исправленный запрос. Could not resolve host или Failed to connect означает, что запрос не получил нужного ответа; на этом нельзя основывать вывод об отсутствии или наличии раскрытия. Проверьте написание, точное имя узла и порт курса. Не заменяйте цель общедоступным сайтом в интернете.
Разберите слишком широкое срабатывание Nuclei
На этом шаге вы увидите, как проверка может выполняться правильно, но делать слишком широкий вывод. Оставайтесь в Auditor. Nuclei — сканер на основе шаблонов: шаблон описывает запросы и условия ответа, при которых создаётся обнаружение. Обнаружение означает совпадение этих условий; вам всё ещё нужно решить, подтверждают ли они именно ту проблему, которую вы хотели проверить.
Прочитайте подготовленный начальный шаблон:
cat too-broad.yaml
YAML группирует настройки с помощью отступов. Этот шаблон отправляет один GET к диагностическому маршруту каждого базового URL, затем проверяет только HTTP-статус 200. Заполнитель {{BaseURL}} заменяется текущим разрешённым базовым URL. Смысл диагностического объекта шаблон не анализирует.
Запустите начальный шаблон для предоставленного списка. -t выбирает локальный шаблон; -l читает список целей; -o сохраняет обнаружения; -elog сохраняет ошибки запросов. -jsonl записывает по одному обнаружению JSON на строку, а -ot исключает из этого вывода закодированный шаблон. Подготовительные флаги -duc и -ni отключают проверку обновлений и внешние обратные вызовы Interactsh. Нашему шаблону они не нужны. Сохраняйте эти флаги в изолированном упражнении.
nuclei -t too-broad.yaml -l targets.txt -duc -ni -nc -jsonl -ot -o broad-findings.jsonl -elog broad-errors.jsonl
-nc убирает из терминального вывода коды цвета. Эта команда выполняет настоящие запросы только для чтения. Ожидайте обнаружения и для studio, и для manual, поскольку оба вернули 200. Защищённый маршрут archive не совпадает. Сканирование без обнаружений не становится автоматически завершённой проверкой с отрицательным результатом.
Прежде чем оценивать результаты, прочитайте собственный журнал ошибок запросов Nuclei:
cat broad-errors.jsonl
Пустой журнал означает, что в этом запуске ошибки запросов не зарегистрированы. Даже при сбое соединения код завершения процесса Nuclei может остаться нулевым, поэтому ни код завершения, ни пустой файл обнаружений по отдельности не достаточны. Если журнал содержит ошибку, исправьте проблему цели или соединения до формулировки вывода. Сохраните исходные свидетельства ошибки; при повторном запуске используйте новое имя выходного файла.
Изучите обнаружения:
cat broad-findings.jsonl
Каждая строка содержит URL matched-at и свидетельства запроса и ответа. Сравните обнаружение manual с вложенным примером документации, который вы уже прочитали. Для вашего вопроса о раскрытии диагностики это ложное срабатывание, хотя условие статуса в начальном шаблоне отработало так, как было написано. Ответ studio действительно удовлетворяет заданным условиям раскрытия.
Эти синтетические ответы не содержат настоящих секретов. При реальной оценке исходные обнаружения могут содержать конфиденциальные сведения, и обращаться с ними следует приватно. Не загружайте их во внешний сканер и не вставляйте в общедоступный отчёт.
Сохраните оценку со ссылками на свидетельства
На этом шаге вы отделите свой вывод от широкого совпадения сканера. Оставайтесь в Auditor. Создайте assessment.json с одной записью на сайт. Каждая запись сохраняет изученное вами реальное событие ответа и ваш вывод. Для трёх разобранных выше исходов используйте exposed, access-denied и documentation-example.
Ниже приведён полный here-document оболочки. cat > assessment.json записывает файл; > заменяет его содержимое. <<'JSON' заставляет оболочку буквально копировать последующий текст до строки, содержащей только JSON. Кавычки вокруг разделителя предотвращают подстановки оболочки внутри текста. Перед выполнением блока замените каждое значение REPLACE_... настоящим X-Audit-Event из диагностического ответа соответствующего сайта. Сохраните двойные кавычки и запятые JSON.
cat > assessment.json <<'JSON'
{
"studio": {"event_id": "REPLACE_STUDIO_EVENT", "conclusion": "exposed"},
"archive": {"event_id": "REPLACE_ARCHIVE_EVENT", "conclusion": "access-denied"},
"manual": {"event_id": "REPLACE_MANUAL_EVENT", "conclusion": "documentation-example"}
}
JSON
Если вы не сохранили идентификатор, повторите запрос curl -i для этого сайта из шага 2 и используйте новый идентификатор. Повторное чтение создаёт ещё один реальный ответ и может увеличить request_count; оно не исправляет и не меняет политику доступа сайта.
Выведите сохранённый файл:
cat assessment.json
Если кавычка, запятая или значение события неверны, повторите полный исправленный here-document. Не копируйте буквальные значения-заполнители. Предоставьте assessment.json как доступный для чтения обычный файл в этом рабочем каталоге. Проверка сравнивает ваши выводы с существующими ответами; она не создаёт недостающие запросы оценки. Она также не требует копировать узел диагностики или исходное тело ответа в эту небольшую сводку.
Ваш результат подтверждает раскрытие в studio, фиксирует настоящий отказ в archive и объясняет вводящее в заблуждение совпадение документации в manual. Он не утверждает, что проверены все остальные маршруты или уязвимости. Следующая пошаговая лабораторная работа начинается с новой сцены и учит заменять широкое условие переносимой проверкой Nuclei в собственном формате движка.
Резюме
Вы воспользовались открытым расписанием мастер-классов, изучили статусы HTTP и структуру JSON и подтвердили один случай раскрытия внутренней диагностики. Вы запустили настоящую начальную проверку Nuclei и объяснили её ложное срабатывание на документации. Ваша оценка связывает каждый вывод с существующим ответом и сохраняет обычный открытый доступ.



