Nuclei — отличный инструмент для поиска уязвимостей веб-приложений, который использует YAML-шаблоны для проверки наличия различных уязвимостей и конфигураций. Одно из главных преимуществ Nuclei — возможность создания пользовательских шаблонов, что позволяет расширить функционал сканера и адаптировать его под свои задачи. Давайте разберем процесс создания шаблонов.
Еще по теме: Установка и использование NucleiFuzzer
Создание шаблонов Nuclei
Прежде всего, необходимо знать, какие уязвимости мы хотим найти. Возможно, кто-то занимается поиском уязвимостей веб-приложений, и тогда нужные уязвимости будут связаны с веб-фреймворками (Spring, Angular, React, Node), продуктами баз данных (MongoDB, MSSQL, …) или серверными движками (Nginx, Apache).
Имея в руках CVE (например, CVE-2021-44228), нам необходимо понять, как работает эта уязвимость и как ее воспроизвести. Шаблоны Nuclei представляют собой YAML-файлы, поэтому все взаимодействия Nuclei с каким-либо хостом автоматизированы и работают как send-and-match, в которой Nuclei посылает запросы, специально созданные для обнаружения уязвимости, а также поле для сопоставления с шаблоном.
Send-and-match — это методика тестирования на SQL-инъекции путем отправки специальных запросов (send) и анализа ответов сервера на совпадение с ожидаемыми при успешной инъекции (match). Позволяет находить слепые SQL-инъекции без визуализации результатов запроса. Часто используется для автоматизации поиска SQLi в приложениях.
Конечно, хочется быть первыми, кто напишет и сможет использовать нужный шаблон, но на данный момент уже есть шаблон для уязвимости Log4J. Давайте лучше на более простом примере попробуем рассмотреть важные секции YAML-файла, которые будет использовать Nuclei для поиска уязвимости.
Структура шаблонов Nuclei
Шаблон Nuclei состоит из нескольких секций:
- info — метаданные шаблона.
- requests — HTTP-запросы для проверки уязвимости.
- matchers — проверки ответов на соответствие шаблону.
- extractors — извлечение данных из ответов.
Шаблон может содержать один или несколько запросов с разными методами — GET, POST и другими. Matchers позволяют гибко проверять ответы — текст, заголовки, статус-коды.
Вот базовый пример шаблона Nuclei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
id: my-first-nuclei-template info: name: My First Nuclei Template author: yourname severity: medium requests: - method: GET path: - "{{BaseURL}}/sensitive-directory/" matchers: - type: word words: - "Sensitive information" |
Этот шаблон проверяет наличие конкретного текста Sensitive information на странице /sensitive-directory/ целевого сайта.
Ниже пример простого шаблона для поиска XSS-уязвимостей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
id: fuzz-reflection-xss info: name: Basic Reflection Potential XSS Detection author: pdteam severity: low http: - method: GET path: - "{{BaseURL}}" payloads: reflection: - "6842'\"><9967" stop-at-first-match: true fuzzing: - part: query type: postfix mode: single fuzz: - "{{reflection}}" matchers-condition: and matchers: - type: word part: body words: - "{{reflection}}" - type: word part: header words: - "text/html" |
Заключение
Создание собственных шаблонов Nuclei — это эффективный способ настроить процесс поиска уязвимостей под свои нужды. Несмотря на то, что Nuclei предоставляет обширную библиотеку предварительно созданных шаблонов, создание своих собственных шаблонов может помочь найти редкие уязвимости и мисконфигурации.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Использование Nuclei в OSINT
- Использование Weevely для атаки на веб-приложения
- Использование CMSmap для поиска уязвимостей сайта