Взлом
Уважаемые гости! При посещении нашего сайта просим вас ознакомиться с разделами форума, прежде чем оставлять ваши объявления и т.п., а также при обращении за помощью просим быть внимательными: на сайте есть как проверенные специалисты, так и непроверенные. Если вы обратились к специалисту, который проверку НЕ проходил, рекомендуем воспользоваться услугой гарант-сервиса. Спасибо, что посетили XakerPlus!

Nuclei — быстрый шаблонный сканер уязвимостей для современных пентестеров

надежда Пепеляева

Новый
Пользователь.
Nuclei: гоним шаблоны, ищем дыры. Инструкция для тех, кто не хочет долбиться головой об стену
maxresdefault.jpg

Кто в тусовке хоть раз не слышал про Nuclei — тот, наверное, с ёбаного CSS-форума приполз. Этот инструмент сейчас стандарт де-факто для автоматического поиска уязвимостей. Не хуйню какую-то рекламирую, сам пользуюсь.

Суть простая: вместо того чтобы вручную тыкать каждый эндпоинт и проверять, не открыта ли админка или не торчит ли где старый CVE, ты просто гонишь шаблоны и получаешь результат. Быстро, ёбано, эффективно.

Но, как обычно, есть нюансы. Я просидел с Nuclei не один день, наступал на грабли, разбирался с шаблонами, оптимизировал под себя. Теперь рассказываю как есть, без воды и рекламных буклетов.

Часть 1: Что это за зверь и нахуя оно надо

Nuclei — это сканер уязвимостей на базе шаблонов. Написан на Go, летает как ракета, жрёт ресурсов как котёнок. В отличие от тяжеловесных монстров типа Nessus или OpenVAS, которые ставят тебе пол-инфраструктуры на колени, Nuclei просто шлёт запросы и проверяет ответы по заданным правилам.

Что можно пихнуть в цели:

· отдельные URL
· списки доменов
· IP-адреса
· CIDR-диапазоны
· даже целые зоны (есть модуль для DNS)

Что на выходе: список уязвимостей с указанием типа, уровня опасности и ссылкой на шаблон.

Часть 2: Как это работает (для тех, кто в танке)

Алгоритм простой до пизды:

1. Ты скачиваешь/обновляешь шаблоны — это такие YAML-файлы, в которых описано, что искать и как проверять.
2. Запускаешь Nuclei с целями и выборкой шаблонов (можно все подряд, можно только по критичности).
3. Инструмент для каждой цели проходит по шаблонам, шлёт запросы (HTTP, DNS, TCP — что указано в шаблоне).
4. Проверяет ответы на соответствие условиям (матчеры).
5. Если нашлось — выдаёт в консоль/лог/куда скажешь.

Вот пример шаблона, который тупо проверяет, открыта ли админка:

```yaml
id: admin-panel-detect

info:
name: Admin Panel Detect
author: me
severity: info

requests:
- method: GET
path:
- "{{BaseURL}}/admin"
- "{{BaseURL}}/administrator"
- "{{BaseURL}}/wp-admin"

matchers:
- type: word
words:
- "admin"
- "dashboard"
- "login"
condition: or
```

Видишь, всё просто. Метод GET, пути перебираются, матчер ищет ключевые слова в ответе.

Часть 3: Установка — быстрая и безболезненная

Вариантов дохуя:

Самый простой — скачать бинарник с гитхаба:

```
wget https://github.com/projectdiscovery/nuclei/releases/latest/download/nuclei_linux_amd64.zip
unzip nuclei_linux_amd64.zip
chmod +x nuclei
sudo mv nuclei /usr/local/bin/
```

Если есть Go:

```
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
```

На macOS через brew:

```
brew install nuclei
```

Для параноиков — собрать из исходников:

```
git clone https://github.com/projectdiscovery/nuclei.git
cd nuclei/v3/cmd/nuclei
go build
mv nuclei /usr/local/bin/
```

После установки проверяем:

```
nuclei -version
```

Если выдало версию — можно работать.

Часть 4: Первый запуск — щупаем локальный хост

Для теста запусти на своём локальном сайте или тестовой машине:

```
nuclei -u https://example.com
```

Если шаблонов ещё нет (первый запуск), Nuclei сам их скачает с официального репозитория. Это займёт минуту-две.

После скачивания начнётся сканирование. В консоль полетят строчки:

```
[INF] [http] [http-missing-security-headers] Found on https://example.com
```

Зелёным подсвечиваются найденные уязвимости, жёлтым — инфо, красным — критические.

Часть 5: Шаблоны — наше всё

Шаблоны лежат в ~/.nuclei-templates/. Там куча папок:

· cves/ — уязвимости с CVE-номерами
· exposed-panels/ — открытые админки
· misconfiguration/ — неправильные конфигурации
· default-logins/ — дефолтные пароли
· technologies/ — детект технологий (не уязвимости, а определение CMS и т.п.)

Обновить шаблоны:

```
nuclei -update-templates
```

Запустить только определённую категорию:

```
nuclei -u https://example.com -t cves/
```

Или конкретный шаблон:

```
nuclei -u https://example.com -t cves/2020/CVE-2020-12345.yaml
```

Можно исключить какие-то шаблоны:

```
nuclei -u https://example.com -t cves/ -exclude cves/2021/
```

Часть 6: Фильтрация по критичности

У каждого шаблона в поле info есть severity:

· info
· low
· medium
· high
· critical

Запустить только критические:

```
nuclei -u https://example.com -severity critical
```

Или несколько уровней:

```
nuclei -u https://example.com -severity high,critical
```

Часть 7: Массовое сканирование — когда целей дохуя

Если нужно просканировать тысячу хостов, вбивать каждый вручную — заёбышься. Делаем файл со списком:

targets.txt:

```
192.168.1.1
192.168.1.0/24
```

Запускаем:

```
nuclei -list targets.txt -t cves/
```

Или подаём на stdin:

```
cat targets.txt | nuclei -t cves/
```

Часть 8: Форматы вывода — куда складывать результаты

По умолчанию Nuclei пишет в консоль. Для нормальной работы лучше сохранять в файл.

JSON (удобно для парсинга):

```
nuclei -u https://example.com -json -o results.json
```

Markdown (для отчётов):

```
nuclei -u https://example.com -markdown -o results.md
```

CSV (для табличек):

```
nuclei -u https://example.com -csv -o results.csv
```

Можно комбинировать: и в консоль, и в файл:

```
nuclei -u https://example.com -o results.txt -json
```

Часть 9: Работа с прокси и обход ограничений

Если сканируешь через прокси:

```
nuclei -u https://example.com -proxy http://127.0.0.1:8080
```

Можно рандомизировать user-agent (чтоб не палиться):

```
nuclei -u https://example.com -random-agent
```

Или задать свой:

```
nuclei -u https://example.com -H "User-Agent: Mozilla/5.0"
```

Часть 10: Тюнинг производительности

По умолчанию Nuclei запускает 25 конкурентных запросов. Если цели большие и тебе похер на нагрузку, можно увеличить:

```
nuclei -u https://example.com -c 100
```

Если не хочешь положить свой роутер или целевую систему — уменьшай:

```
nuclei -u https://example.com -c 5
```

Таймауты:

```
nuclei -u https://example.com -timeout 10
```

Если сайты тормозные — увеличивай.

Часть 11: Интеграция с другими инструментами

Nuclei отлично дружит с остальными продуктами от projectdiscovery:

httpx — получаем список живых хостов, потом шлём в Nuclei:

```
cat domains.txt | httpx | nuclei -t cves/
```

subfinder — собираем поддомены, проверяем их:

```
subfinder -d example.com | httpx | nuclei -t cves/
```

найс-тулзы, в общем.

Часть 12: Пишем свой шаблон — не так сложно, как кажется

Допустим, нашли новую уязвимость или хотим проверять что-то своё.

Структура шаблона:

```yaml
id: my-custom-check # уникальный идентификатор

info:
name: My Custom Vulnerability
author: me
severity: medium
description: Проверяет, есть ли файл config.php

requests:
- method: GET
path:
- "{{BaseURL}}/config.php"

matchers:
- type: word
words:
- "DB_PASSWORD"
- "mysql"
condition: or
```

Сохраняем в ~/.nuclei-templates/custom/my-check.yaml, запускаем:

```
nuclei -u https://example.com -t custom/my-check.yaml
```

Можно делать матчеры не только по словам, но и по статус-кодам, по размеру ответа, по regex.

Часть 13: Где Nuclei сосёт

Не буду врать, у него есть недостатки:

1. False positive — дохуя. Особенно на старых шаблонах. Проверять руками всё равно придётся.
2. Зависимость от шаблонов — нет шаблона, нет проверки. Не найдёт то, о чём не знает.
3. HTTP-only по большей части — для сети есть протоколы, но основное — это веб.
4. Может спалить тебя — если гнать все шаблоны подряд, лог-файлы целевого сервера распухнут, и админ заметит. Некоторые шаблоны шлют запросы на несуществующие пути, которые мониторятся.

Часть 14: Мои грабли

1. Забыл обновить шаблоны и проверял старьё. Новые CVE не детектились. Теперь перед каждым сканом делаю nuclei -update-templates.
2. Попытался сканировать через медленный прокси — таймауты посыпались. Пришлось увеличить -timeout до 30 секунд.
3. Запустил с -c 200 на слабом VPS — сервер лёг. Ограничил до 50, стало норм.
4. Не указал исключения и наловил дофига инфо-мусора. Теперь всегда фильтрую по критичности или использую -t для конкретных категорий.

Итог

Nuclei — это тачка, которая должна быть в арсенале у каждого, кто занимается веб-безопасностью. Не единственный инструмент, не панацея, но база.

Он не найдёт сложные бизнес-логики, не проведёт ручной анализ, не заменит голову. Но для рекон-фазы и первичного пробива — лучше не придумаешь.

Главное — не забывай про лимиты, прокси и обновление шаблонов. И всегда проверяй, что нашёл, руками, потому что ложные срабатывания там встречаются чаще, чем хотелось бы.
 


Сверху