Сканер Nuclei. Часть 2
Шаблоны
Шаблоны в Nuclei - это сценарии сканирования для гибкой и, что главное, индивидуальной настройки процесса анализа под конкретную задачу и конкретную цель.
Структура шаблона
- Простой
yamlформат - Основные разделы:
id: идентификатор шаблонаinfo: блок с информацией о шаблонеhttp: описание запросов, которые будут выполняться в процессе сканированияmatchers: определение соответствия ответа определенному правилу или условию (код ответа, наличие слов, регулярное выражение и т.д.)extractors: извлечение информации из ответа по регулярному выражению, типу, формату и т.д.
Пример шаблона для поиска случайно попавших в открытый доступ .git директорий
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
id: git-directory-exposure
info:
name: Git Directory Exposure
author: security-team
severity: medium
description: Detects exposed .git directories that may contain sensitive source code and configuration
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
cvss-score: 5.3
cwe-id: CWE-200
metadata:
verified: true
max-request: 4
tags: exposure,git,directory,misconfiguration
http:
- method: GET
path:
- "/.git/"
- "/.git/config"
- "/.git/HEAD"
- "/.git/logs/HEAD"
redirects: true
max-redirects: 2
matchers-condition: or
matchers:
- type: word
part: body
words:
- "[core]"
- "repositoryformatversion"
- "bare = false"
condition: and
- type: word
part: body
words:
- "ref: refs/heads/"
- "refs/heads/master"
- "refs/heads/main"
- type: regex
part: body
regex:
- "^[a-f0-9]{40}\\s+[a-f0-9]{40}"
- type: word
part: body
words:
- "Index of /.git"
case-insensitive: true
matchers:
- type: status
status:
- 200
extractors:
- type: regex
part: body
regex:
- 'repositoryformatversion = ([0-9]+)'
- 'bare = (true|false)'
group: 1
- type: regex
part: header
regex:
- 'Server: (.+)'
group: 1
📚 Дополнительная информация
1) Коротко про структуру шаблона из официальной документации.
2) Подробно по каждому полю шаблона из официальной документации.
3) Большой гайд по синтаксису шаблонов с примерами и полезными функциями.
Установка базы шаблонов
Средствами nuclei выкачиваем базу шаблонов от разработчиков сканера и сообщества
1
nuclei -update-templates
По умолчанию падает в $HOME/.local/nuclei-templates или $HOME/nuclei-templates.
Применение шаблонов
Я как-то упоминал в заметке в своем Telegram-канале про найденные .git каталоги в опубликованных веб-приложениях, которые обнаруживаются простым сканированием, и откуда впоследствии извлекается чувствительная информация.
В базе шаблонов есть заготовки на эту тему, вот некоторые из них:
exposures/logs/git-exposure.yaml- проверка доступа к.gitкаталогуexposures/configs/git-config.yaml- обнаружениеgit configexposures/configs/git-credentials-disclosure.yaml- обнаружение.git-credentials
🔸 Запуск с применением шаблонов
1
2
3
4
# для одного хоста
nuclei -u http://test.host -t http/exposures/configs/git-config.yaml
# для списка хостов
nuclei -l hosts.txt -t http/exposures/configs/git-credentials-disclosure.yaml
Можно заметить, что шаблоны помечены тэгами, что удобно использовать при сканировании для охвата всего комплекса проверок разом.
1
nuclei -l hosts.txt -t http/exposures/ -tags git
❗️ Шаблонов уже более 3 тыс штук по совершенно разным направлениям. Сориентироваться можно как самостоятельно, так и пообщавшись с ИИ, попросив отыскать подходящие решения, только вот обновления инструмента и базы выходят с такой скоростью, что тот же ChatGPT не всегда выдает актуальную информацию, приходится перепроверять.
Генерация шаблонов с помощью ИИ
В nuclei добавлена поддержка ИИ модуля для инъекции промптов на естественном языке прямо в CLI (аргумент -ai), что обеспечивает автоматическую генерацию и выполнение шаблонов обнаружения уязвимостей. Процесс реализован через отправку запросов на платформу разработчика, для чего нужно обзавестись бесплатным ключом доступа.
Получения ключа для активации ИИ модуля
- Создаем аккаунт на платформе Project Discovery.
- В разделе
Settings-API Keyнаходим свой ключ. - Используем ключ для авторизации
1
nuclei -auth
- Пишем запрос на естественном языке (можно на русском, но, как правило, с
LLMлучше на родном языке). - В результате шаблон будет сформирован и применен по указанным целям.
YAMLшаблона сохраняется локально вnuclei-templates, а также ссылка на него наProject Discoveryприкладывается в выводе.
🔸 Пример все с тем же .git каталогом
1
nuclei -l hosts.txt -ai "Find exposed .git directories allowing full repo download"
Готовые промпты для Nuclei AI
На github существует проект Nuclei-AI-Prompts - это коллекция готовых промптов для использования с функцией Nuclei AI с разбивкой по категориям, что упрощает подготовку выбранных сценариев.
🔸 Примеры запросов из проекта
1
2
3
4
5
6
7
8
9
10
11
# Поиск конфигурационных файлов
nuclei -list targets.txt -ai "Find exposed .env files leaking credentials, API keys, and database passwords"
nuclei -list targets.txt -ai "Find exposed configuration files such as config.json, config.yaml, config.php, application.properties containing API keys and database credentials"
# Анализ JavaScript
nuclei -l js_links -ai "Find hardcoded API keys, JWT tokens, OAuth credentials, and authentication secrets in JavaScript"
nuclei -l js_links -ai "Identify hardcoded cloud service credentials (AWS, GCP, Azure) in JavaScript files"
# Поиск уязвимостей
nuclei -list katana.jsonl -im jsonl -ai "Fuzz all parameters and HTTP methods using DSL, focusing on detecting SQL Injection vulnerabilities with pre-conditions"
nuclei -list katana.jsonl -im jsonl -ai "Test for reflected XSS in user-controllable parameters such as q, search, s, redirect, return, and url"
❗️ AI модуль, помимо необходимости писать yaml сценарии вручную, позволил избежать зависимости от обновлений статических шаблонов, быстро адаптироваться к новым типам уязвимостей и готовить уникальный подход к каждой цели.
