---
title: Nuclei
---
<div class="header__logo" >Как сканировать цель на уязвимости с помощью Nuclei!
</div>
<p>
</p>
<style>
.header__logo {
font-size: 30px;
font-weight: 700;
color: #270469;
text-align: center;
}
</style>
<style>
.secret{
display: flex;
margin-left: auto;
margin-right: auto;
width: 50%;
}
</style>
<style>
.secret__block{
background-color: #fff;
display: block;
max-width: 100%;
height: auto;
transition: opacity .8s linear;
color: black;
text-transform: uppercase;
font-weight: 700;
text-align: center;
}
</style>
<style>
.secret__block img{
opacity: 5;
}
</style>
<style>
.secret__block:hover {
opacity: 2 ;
}
</style>
<style>
.secret__img {
opacity: ;
transition: transform 1.8s linear;
}
</style>
<style>
.secret__img img{
opacity: 0 ;
transition: transform 1.8s linear;
}
</style>
<style>
.secret__img img: hover{
opacity: 5 ;
transition: transform 1.8s linear;
}
</style>
<style>
.secret__img img {
display: block;
max-width: 100%;
height: auto;
transition: opacity 1.8s linear;
}
</style>
<style>
.secret__img:hover {
opacity: 5 ;
}
</style>
<style>
.secret__inner {
position: relative;
background-color: #fff;
}
</style>
<style>
.secret__inner:hover .secret__img {
transform: translate3d(-10px, -10px, 0);
}
</style>
<style>
.secret__inner img:hover {
opacity: 0;
transition: opacity 2s linear;
}
</style>
<style>
.secret__inner img {
transition: opacity 2s linear;
}
</style>
<style>
.secret__inner:hover .secret__img img {
opacity: 1;
}
</style>

<div class="TOC" >
Содержание:
<p>
</p>
</div>
<style>
.TOC {
font-size: 26px;
font-weight: 550;
color: #270469;
text-align: left;
</style>
> [TOC]
---
# Вводная часть
Данный топик является дополнением к [этому топику](https://hackmd.io/@Moby/MTUCI_pen_12), в котором уже были разобраны другие инструменты для сканирования целей на различные уязвимости. В этом же топике буден разобран основной **функционал** Nuclei.
---
# Nuclei
:::warning
**[Nuclei](https://github.com/projectdiscovery/nuclei)** — это быстрый, эффективный и расширяемый сканер уязвимостей с открытым исходным кодом. Его работа основана на шаблонах, в которых и прописываются шаги, которые инстументу надо выполнить, чтобы выявить и эксплуатировать различные уязвимости.
:::
В отличие от большинства уязвимостей в Nuclei применаются **шаблоны**, в которых и определяются необходимые шаги для обнаружения/эксплуатации уязвимости. Шаблон из себя представляет простой YAML-файл, в котором всё и расписано(метод запроса, маршрут, заголовки, параметры и их значения и тд.).

Внутри эти шаблоны выглядят как-то так:

Чтобы узнать какие ключи есть у Nuclei, можно ввести `nuclei -h`:

Давайте же разберёмся с тем, как можно использовать Nuclei!
---
## Быстрый запуск
Чтобы запустить Nuclei, достаточно просто ввести команду `nuclei` и дальше указать цель/список целей:
```
# Запуск сканирования одной цели
nuclei -u https://example.com
# Запуск сканирования не HTTP(s) службы у цели
nuclei -u example.com:5759
# Запуск сканирования нескольких целей, которые указаны в txt-файле
nuclei -l /path/to/list-of-targets.txt
```
После такого запуска Nuclei выберет некоторые параметры по умолчанию и будет запускать почти все шаблоны, разработанные сообществом, которые имеют отношение к выбранной службе (службам) для указанной цели (целей). Несколько шаблонов будут отключены, так как они предназначены для фаззинга и могут вызывать DoS-атаки.
---
## Использование с другими инструментами
Помимо того, что Nuclei можно запускать отдельно, его можно использовать совместно с другими инструментами:
```
Данная цепочка инструментов делает следующее:
1) Брут поддоменов цели (subfinder -d targetdomain.com -silent)
2) Фильтрация поддоменов от тех, где не работает HTTP(S)
3) Запуск Nuclei по отфильтрованым поддоменам с шаблоном,
который помогает определять работающие технологии на этих поддоменах
subfinder -d targetdomain.com -silent | httpx | nuclei -t technologies/tech-detect.yaml
```
---
## Фильтрация шаблонов
Существует огромное количество шаблонов, написанных для Nuclei, и чтобы не тратить лишнее время на ожидание результата работы тулзы, можно фильтровать шаблоны по разным признакам:
### Автоматический выбор (-as)
`nuclei -u https://example.com -as`
При выборе данного ключа Nuclei определяет стек и компоненты цели, а затем выбирает шаблоны, которые были помечены специальными ключевыми словами(Например, если на сайте используется PHP, то Nuclei будет использовать только те шаблоны, которые связаны с PHP).
### Только новые шаблоны (-nt)
`nuclei -u https://example.com -nt`
Эта опция будет использовать только те шаблоны, которые были добавлены из последнего обновления шаблонов(-update-templates).
### Конкретные шаблоны (-t)
Отбирать шаблоны можно по имени самого YAML-файла:
`nuclei -u https://example.com -t file/logs/python-app-sql-exceptions.yaml -t exposures/files/pyproject-disclosure.yaml`
Вместо одного имени файла в качестве аргумента может быть указан файл, содержащий список имен файлов шаблонов (по одному в строке):
`nuclei -u https://example.com -t templates-35.txt`
```
cat templates-35.txt
file/logs/python-app-sql-exceptions.yaml
exposures/files/pyproject-disclosure.yaml
```
Также можно указать путь к дериктории, в которой находятся все шаблоны и подпапки с шаблонами:
`nuclei -u https://example.com -t file/logs -t exposures/files -t cves/2021`
Вместо подпапки в качестве аргумента можно указать файл, содержащий список папок (по одной в строке):
`nuclei -u https://example.com -t template-categories.txt`
```
cat template-categories.txt
file/logs
exposures/files
cves/2021
```
### Шаблоны по тегу (-tags)
`nuclei -u https://jira.targetdomain.site -tags jira,generic`
Эта опция будет использовать только те шаблоны, которые были помечены указанным значением. Шаблоны могут быть помечены технологическим стеком или приложением или службой и тд.
### Шаблоны по severity (-s)
:::warning
У различных уязвимостей в различных ситуациях может быть разная **оценка опасности** - Severity. Например, если вы нашли Blind SSRF, от которой приходят только DNS-запросы, то в зависимости от ситуации она может иметь как и низкую (low) оценку опасности, так и среднюю (medium).
:::
`nuclei -u https://jira.targetdomain.site -s critical,high,medium,low,info`
Этот параметр будет использовать только те шаблоны, которые имеют указанную оценку опасности в своих метаданных.

---
## Ограничение скорости
Иногда нужно ограничить скорость и количество отправляемых запросов от Nuclei, чтобы не уронить сервис и не получить по шапке!
`nuclei -u https://my.target.site/ -rl 3 -c 2`
**-rl**
Ограничение исходящих запросов до 3 в сек.
**-c**
Параллельно выполнять только 2 шаблона.
**-rlm**
Тоже самое, что и -rl, только тут указывается ограничение на количество запросов в минуту
---
## Оптимизация работы Nucklei
Можно также использовать и другие ключи, чтобы сократить время сканирования:
### Длина тайм-аута (-timeout)
`nuclei -l list-of-targets.txt -timeout 1`
С помощью этой опции мы можем установить количество времени до истечения времени ожидания попытки подключения(по умолчанию 5).
### Количество повторных попыток (-retries)
`nuclei -l list-of-targets.txt -retries 3`
По умолчанию Nuclei не будет повторять неудачную попытку подключения. Используя данную опцию, мы можем установить количество повторных попыток.
### Количество ошибок (-mhe)
`nuclei -l list-of-targets.txt -mhe 3`
По умолчанию, если при попытке сканирования у нас выдалось 30 ошибок - сканирование заканчивается. Количество ошибок можно изменить с помощью данного ключа.
---
## Пользовательские заголовки и сертификат
Если в запросе нужно отправлять определённые заголовки или если нужен клиентский сертификат, то можно использовать следующие ключи:
### Файлы cookie или любой другой HTTP-заголовок (-H)
Если нужно отправить определённые заголовки или cookie в запросах, то можно использовать ключ -H с данными следующего вида `«header_name:header_value»`:
`nuclei -u https://example.com -tags php,apache -H “Cookie:sc_=BPGFJcNgMwfePZBeJqoC838j8Mv4”`
### Аутентификация через сертификат (-cc)
Некоторым службам на сканируемых хостах может потребоваться сертификат клиента для аутентификации. Сертификат должен быть в формате PEM и может быть предоставлен с использованием опции -cc (есть также -ck(PEM-encoded private key) и -ca(Certificate Authority (CA))) :
`nuclei -u https://api.target.site -cc /path/to/client-cert.pem`
---
## Возобновление сканирования
Если сканирование пришлось прекратить по какой-либо причине, и вы ввели комбинцию `ctrl+c`, Nuclei создаст файл возобновления и напечатает путь в выводе консоли:

И сканирование можно будет продолжить введя следующую команду:
`nuclei -l targets-file.txt -resume /path/to/resume-file.cfg
`
---
## Вывод результата
Не всегда удобно держать/работать с выводом работы Nuclei в терминале, поэтому вывод можно настроить с помощью следующих ключей:
### Вывод в файл (-o)
С помощью данного ключа можно указать файл, в который нужно записать результат сканирования:
`nuclei -u https://example.com -o ~/result.txt`
### Тишина (-silent)
Выводится будут только подтверждённые находки, а не вся информация.
### JSON (-json)
Сделать вывод сканирования в формате JSON.
### MarkDown (-me, -markdown-export)
С помощью данного ключа можно указать директорию, в которую будет экспортирован результат сканирования в формате MarkDown.
---
# Полезные ссылки
- [Как писать и понимать шаблоны для Nuclei](https://blog.projectdiscovery.io/ultimate-nuclei-guide/amp/#custom-templates)
- [GitHub-репозиторий от разработчиков данного инструмента, который содержит огромное количество шаблонов для Nuclei](https://github.com/projectdiscovery/nuclei-templates)