KazDevOps
5.37K subscribers
1.3K photos
27 videos
19 files
1.3K links
Канал о DevOps во всех проявлениях: K8s, CI/CD, AppSec, AI/ML, Cloud, Linux
Поможем с DevOps: https://core247.kz/
По рекламе @UlKonovalova
Download Telegram
Forwarded from Похек (Сергей Зыбнев)
Поиск неизвестных уязвимостей с помощью фаззинга Nuclei v3.2
#nuclei #projectdiscovery #fuzzing

🛠 Недавно была добавлена поддержка многих новых функций. Если пересказать кратко, то:
- Поддержка аутентификации
- Расширенная поддержка фаззинга
- Поддержка импорта HTTP-запросов (Burp, JSONL, MultiDoc YAML или генерация с помощью API схем OpenAPI, Swagger)
Пример: nuclei -l bugbounty-proxify.yaml -im yaml -t fuzz/
- Поддержка LDAP
- И пачка bugfix'ов

В этом же посте мы разберём 2 и 3 пункты.

Пример запроса:
POST /reset-password?token=x0x0x0&source=app HTTP/1.1
Host: 127.0.0.1:8082
User-Agent: Go-http-client/1.1
Cookie: PHPSESSID=1234567890
Content-Length: 23
Content-Type: application/json
Accept-Encoding: gzip
Connection: close

{"password":"12345678"}

Практически каждое поле мы можем фаззить (query, path, header, cookie, body).

У нас есть некоторые правила, по которым мы можем это делать:
prefix - Добавить полезную нагрузку в качестве префикса к значению
postfix - Добавить полезную нагрузку в качестве постфикса к значению
replace - Заменить значение на полезную нагрузку
infix - Добавить полезную нагрузку в качестве инфикса к значению (инфикс - это нагрузка, вставленная по середине значения)
replace-regex - Заменить значение на нагрузку с помощью regex

Возьмем за основу простую SQL инъекцию:
http:
...
payloads:
injection: # В этом разделе перечисляем полезные нагрузки
- "'"
...
fuzzing:
- part: query # Указываем какую часть запроса менять: query, path, header, cookie, body
type: postfix # Указываем одно из правил: prefix, postfix, replace, infix,replace-regex
mode: single # Указываем режим мутации: single, multiple
fuzz:
- '{{injection}}' # Переменная нагрузки


Если же мы импортируем запросы из BurpSuite к примеру, то нам не обойтись без фильтрации входящих запросов.
Для примера выберем тип DSL, но также существуют другие типы фильтров.
DSL - продвинутая фильтрация, с помощью, которой мы можем проверять длину запроса, статус код, хедеры, body и даже raw данные


Возьмем для примера простую проверку на то, что body не пустой и метод POST, condition: and значит, что оба условия должны быть TRUE
  - filters:
- type: dsl
dsl:
- method == POST
- len(body) > 0
condition: and


В итоге мы можем собрать Франкенштейна:
http:
# в начале мы отсеиваем запросы по перечисленным параметрам
- filters:
- type: dsl
dsl:
- method == POST
- len(body) > 0
condition: and
# тут указываем полезные нагрузки
payloads:
injection:
- "'"
- "\""
- ";"
# fuzzing rules
fuzzing:
- part: body # Говорим нукле тыкать body
type: postfix # Добавляем нагрузку в конце значения
mode: single # Говорим добавлять нагрузку только 1 раз
fuzz:
- '{{injection}}' # Вызываем полезные нагрузки из переменной


Данный функционал будет полезен не только пентестерам, но и DevSecOps'у. К примеру первые могут импортировать в nuclei запросы из burp suite и их фаззить. А вторые могут импортировать API схемы и также фаззить.

➡️ Оригинал статьи


👍 Дополнительный материал:
- Дока по fuzzing
- Дока с примерами фаззинг шаблонов
- Дока по фильтрам
- Дока по экстракторам

p.s. надеюсь на вашу поддержку, я постарался над написанием этого поста ❤️

🌚 @poxek
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥52