Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Payload-and-Polyglot-Lists — GromHacks Labs -- Списки полезных нагрузок, которые они не хотят, чтобы у вас были. 1 324 инъекционных зонда, отправленных с материнского корабля, чтобы обнаружить, что поддается инъекции в 20 классах уязвимостей. Мы не эксплуатируем, мы просто стучимся в дверь и смотрим, кто ответит. Каждая нагрузка тестируется на реальных парсерах, потому что пришельцы требуют доказательств. Не доверяй никакому вводу. Подвергай всё сомнению! | Kitploit
Инструменты/GitHubGitHub/gromhacks/payload-and-polyglot-lists
OSINT (Разведка открытых источников)Генерация полезной нагрузкиАнализ уязвимостейЭксплуатация веб-приложенийФаззингТестирование на ПроникновениеОбучение и Образование
GitHubgromhacks/payload-and-polyglot-lists

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →

Описание

GromHacks Labs -- Списки полезных нагрузок, которые они не хотят, чтобы у вас были. 1 324 инъекционных зонда, отправленных с материнского корабля, чтобы обнаружить, что поддается инъекции в 20 классах уязвимостей. Мы не эксплуатируем, мы просто стучимся в дверь и смотрим, кто ответит. Каждая нагрузка тестируется на реальных парсерах, потому что пришельцы требуют доказательств. Не доверяй никакому вводу. Подвергай всё сомнению!

Payload-and-Polyglot-Lists

Репозиторий
3694 месяцев назадПроверено Kitploit
Поделиться

Payload & Polyglot Lists

Нашли полезную нагрузку, которая не работает? Пожалуйста, откройте задачу с указанием полезной нагрузки, контекста цели и ожидаемого результата. Запросы на исправления или новые полезные нагрузки всегда приветствуются.

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

Отказ от ответственности: Эти полезные нагрузки предоставляются только для авторизованного тестирования безопасности, обучения и исследовательских целей. Авторы не несут ответственности за любое неправомерное использование или последующие эффекты. Используйте полностью на свой страх и риск. Используя этот проект, вы принимаете на себя полную ответственность за свои действия.

Лицензия: MIT - см. LICENSE

1,353 проверенных инъекционных полезных нагрузок, охватывающих 20 классов уязвимостей, 31 фреймворк десериализации и 14 шаблонизаторов. Каждая полезная нагрузка дает обнаруживаемый сигнал. Никаких теоретических нагрузок.

Валидация: 1,353 протестировано / 1,353 сработало / 0 сбоев / 0 пропущено на 35 стендах Docker. Строгая валидация доказывает фактическую эксплуатацию (вычисления на сервере, реальные ошибки парсера, измеренные временные задержки, внеполосные обратные вызовы из целевых контейнеров) -- не сопоставление строк.


Концепция

Проблема традиционных списков полезных нагрузок

Большинство общедоступных списков полезных нагрузок организованы по типу уязвимости: один список для SQL-инъекций, другой для XSS, третий для инъекций команд и так далее. Тестер выбирает список, который, по его мнению, соответствует цели, загружает его в инструмент-интрудер и запускает против параметра. Если он ошибается в классе уязвимости, все сканирование не дает результатов. Если бэкенд использует необычную базу данных, нестандартный шаблонизатор или язык, который не учтен в списке, полезные нагрузки молча не срабатывают. Тестер переходит дальше, считая параметр чистым.

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

Полиглоты в первую очередь, сигнал гарантирован

Этот проект использует другой подход. Основной единицей работы является полиглот -- одна строка полезной нагрузки, спроектированная так, чтобы быть валидной (или значимо невалидной) одновременно в как можно большем количестве контекстов инъекций. Один полиглот вырывается из одинарных кавычек, двойных кавычек, круглых скобок, блочных комментариев, атрибутов HTML, разделителей шаблонов и контекстов обратных кавычек одновременно. Вместо того чтобы знать, какая уязвимость существует, тестер отправляет полиглоты на каждый параметр и наблюдает за сигналами.

Каждая полезная нагрузка в этой коллекции построена вокруг столпов обнаружения -- наблюдаемых ответов, которые подтверждают наличие уязвимости без необходимости доступа к журналам сервера, исходному коду или файловой системе:

  • Ошибка: полезная нагрузка вызывает исключение, ошибку парсера или трассировку стека, видимую в ответе.
  • Математика: полезная нагрузка включает арифметическое выражение, например 7*191, которое вычисляется в 1337. Если это число появляется в ответе, а полезная нагрузка отправляла только 7*191 (не литерал 1337), то бэкенд вычислил выражение -- доказательство выполнения кода.
  • Время: полезная нагрузка вызывает задержку (5+ секунд). Если ответ медленный, бэкенд выполнил sleep или операцию, интенсивно использующую ЦП.
  • Внеполосный (OOB): полезная нагрузка заставляет бэкенд выполнить исходящее HTTP-, DNS-, LDAP- или TCP-соединение с сервером обратного вызова, контролируемым тестером. Подтверждает выполнение, даже если ответ полностью непрозрачен.

Если полезная нагрузка не производит хотя бы один из этих сигналов при тестировании в своем целевом контексте, ей не место в списке. Каждая из 1,353 полезных нагрузок здесь была проверена на специально созданных тестовых стендах Docker со строгим доказательством эксплуатации. Никаких теоретических.

Встроенные функции вместо команд оболочки

Традиционные внеполосные нагрузки и нагрузки для временных задержек полагаются на команды оболочки: curl, nslookup, ping, sleep. Они постоянно ломаются. Они зависят от целевой ОС, доступного PATH, того, какая оболочка интерпретирует команду, и есть ли у процесса разрешение на создание подпроцессов. curl-базированная внеполосная нагрузка, работающая на Ubuntu, не работает на Alpine (нет curl), не работает на Windows (нет curl) и не работает внутри ограниченного контейнера (нет выполнения исходящих процессов).

Этот проект заменяет команды оболочки на встроенные функции языка везде, где это возможно. Полезные нагрузки Python используют urllib.request.urlopen() и time.sleep(). Полезные нагрузки Java используют java.net.URL.openStream() и Thread.sleep(). Ruby использует Net::HTTP.get() и Kernel.sleep. PHP использует file_get_contents() и sleep(). Эти функции существуют в каждой стандартной установке соответствующего языка -- нет поиска PATH, нет подпроцесса, нет зависимости от ОС.

Там, где даже импорты стандартной библиотеки могут быть заблокированы (песочница eval, ограниченный exec), полезные нагрузки отступают к альтернативам без импорта: циклы загрузки ЦП для времени (sum(range(500000000)) в Python, Atomics.wait() в Node) и прямые сокетные соединения для OOB (__import__('socket').create_connection(), fsockopen(), TCPSocket.new()).

Где полиглоты не работают

Не все может быть полиглотом. Шаблонизаторы используют принципиально несовместимый синтаксис -- {{}} в Jinja2 ничего не значит для <%= %> ERB, и ни один не парсится как ${} Freemarker). Форматы десериализации являются бинарными или структурированными данными, специфичными для одного фреймворка. Для этих категорий проект использует нагрузки для каждого движка, организованные в рамках той же системы столпов обнаружения, охватывая 14 шаблонизаторов и 31 фреймворк десериализации на 7 языках.

Результатом является единый корпус, в котором полиглоты обрабатывают контексты, которые они могут (SQLi, инъекции команд ОС, XSS, инъекции кода), а специально созданные нагрузки для каждого движка обрабатывают остальное, все проверено, все генерирует обнаруживаемые сигналы, все готово для построчного ввода в инструменты инъекций.


Минимальный список (82 полезных нагрузки)

83 полезных нагрузки, покрывающие все 35 тестовых стендов, все 55+ конечных точек и все 4 столпа обнаружения для каждой категории. Валидировано: 83 СРАБОТАЛО / 0 НЕ СРАБОТАЛО / 0 ПРОПУЩЕНО.

Каждая категория инъекций получает покрытие по ошибке, математике, времени и OOB, где это архитектурно возможно. Фреймворки десериализации, поддерживающие выполнение кода (Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET), получают полное многопиллярное покрытие. Фреймворки, ограниченные зондированием (PHP unserialize, Ruby Marshal, SnakeYAML и т.д.), получают обнаружение на основе ошибок. Применяйте это к каждому параметру, прежде чем переключаться на полные списки категорий для углубленного анализа.

83 запроса вместо 1,353. Используйте ready/minimal/payloads-only.txt для Burp Intruder.


Выбор правильной полезной нагрузки для цели

Смотрите HOWTOUSE.md для полного руководства оператора. Оно превращает «Я смотрю на параметр, что мне в него отправить?» в повторяемый рабочий процесс:

  1. Профилирование параметра и контекста - 5 вопросов (форма значения, отпечаток стека, видимость ответа, доступность OOB, WAF), которые отсекают категории, прежде чем вы отправите хотя бы одну полезную нагрузку.
  2. По категориям «когда подозревать» - исчерпывающие подсказки, ориентированные на производство, для всех 20 категорий. В каждой категории перечислены реальные типы функций SaaS (low-code платформы, BI/отчетность, мониторинг, автоматизация рабочих процессов, SSO, SSRF-загрузчики, eval-приемники, конструкторы email-шаблонов и т.д.), визуальные и поведенческие признаки (7*7, возвращающее 49 как признак eval, {{name}}, отображающееся как «Alice», подтверждающее SSTI, вывод ping, просачивающийся из диагностического поля, строки User-Agent в OOB-логах, указывающие на библиотеку-загрузчик), ловушки ORM современных стеков (Prisma $queryRaw, Rails .order(), Hibernate JPQL concat, Mongoose findOne(req.body)), и дешёвые проверки для подтверждения подозрений перед сжиганием полного списка.
  3. Опасные байтовые сигнатуры сериализации - сырые магические байты и base64-префиксы для 31 фреймворка на Python, PHP, Java, .NET, Node, Ruby и Perl (rO0AB = Java, AAEAAAD///// = .NET BinaryFormatter, BAg = Ruby Marshal, gASV = Python pickle P4, / = PHP unserialize и т.д.) с шпаргалкой из 16 записей для быстрого ознакомления и эвристиками устранения неоднозначности. Снимите отпечаток блоба перед отправкой, чтобы загрузить 5-15 соответствующих нагрузок вместо всех 232.

Используйте HOWTOUSE.md перед запуском payloadctl prepare. Сначала - снятие отпечатка, затем - минимальный список, затем - углубленный анализ категории - а не дробовик из 1,353 полезных нагрузок на каждый параметр.


Быстрый старт```bash

1. Prepare payloads with your callback domain

Replaces {domain} placeholder in all OOB payloads with your server

./tools/payloadctl prepare YOUR_CALLBACK.oastify.com

2. Load into Burp Intruder, ffuf, or any line-by-line injection tool

All output goes to ready/ (gitignored, contains your domain)

root@kitploit:~
После запуска `prepare` готовые к использованию файлы находятся в `ready/full/` и `ready/minimal/` со следующей структурой:

| Файл | Описание | Количество |
|------|----------|------------|
| `ready/minimal/payloads-only.txt` | **Минимальный — 83 запроса, все столпы** | 83 |
| `ready/full/payloads-only.txt` | Полный список, по одному пэйлоаду в строке | 1,353 |
| `ready/full/by-category/sqli.txt` | Только SQL-инъекции | 211 |
| `ready/full/by-category/ssti.txt` | Только инъекции шаблонов | 206 |
| `ready/full/by-category/deserialization.txt` | Только десериализация | 232 |
| `ready/full/by-category/os-cmd-injection.txt` | Только инъекции команд ОС | 120 |
| `ready/full/by-category/code-injection.txt` | Только инъекции кода | 123 |
| `ready/full/by-category/ssrf.txt` | Только SSRF | 156 |
| `ready/full/by-category/path-traversal.txt` | Только path traversal | 113 |
| `ready/full/by-category/xss.txt` | Только XSS | 58 |
| `ready/full/by-category/nosql.txt` | Только NoSQL-инъекции | 32 |
| `ready/full/by-category/format-string.txt` | Только строковые форматы (format string) | 38 |
| `ready/full/by-category/el-injection.txt` | Только инъекции Expression Language | 34 |
| `ready/full/by-category/header-crlf.txt` | Только CRLF/инъекции заголовков | 17 |
| `ready/full/by-category/prototype-pollution.txt` | Только загрязнение прототипов | 12 |
| `ready/full/by-category/xxe.txt` | Только XXE | 11 |
| `ready/full/by-category/ldap-injection.txt` | Только LDAP-инъекции | 35 |
| `ready/full/by-category/xslt-injection.txt` | Только XSLT-инъекции | 30 |
| `ready/full/by-category/elasticsearch-injection.txt` | Только Elasticsearch | 30 |
| `ready/full/by-category/cypher-injection.txt` | Только Neo4j/Cypher | 27 |
| `ready/full/by-category/couchdb-injection.txt` | Только CouchDB | 5 |
| `ready/full/by-category/polyglots.txt` | Кросс-контекстные полиглоты | 246 |
| `ready/full/by-pillar/error-payloads-only.txt` | Пэйлоады на основе ошибок | 324 |
| `ready/full/by-pillar/timing-payloads-only.txt` | Основанные на времени (слепые) | 227 |
| `ready/full/by-pillar/oob-payloads-only.txt` | Out-of-band (внешние запросы) | 209 |
| `ready/full/by-pillar/math-payloads-only.txt` | Математическая канарейка (1337) | 182 |
| `ready/full/by-pillar/reflected-payloads-only.txt` | Отражённые/граничные случаи | 374 |
| `ready/full/encoded/url-encoded/payloads.txt` | URL-кодированный вариант | 1,353 |
| `ready/full/encoded/base64/payloads.txt` | Base64-вариант | 1,353 |
| `ready/full/encoded/json-safe/payloads.txt` | JSON-безопасный вариант | 1,353 |
| `ready/full/encoded/double-url-encoded/payloads.txt` | Двойное URL-кодирование | 1,353 |
| `ready/full/encoded/html-entity/payloads.txt` | HTML-сущности | 1,353 |
| `ready/full/encoded/hex-escaped/payloads.txt` | Шестнадцатеричное экранирование | 1,353 |
| `ready/full/encoded/unicode-escaped/payloads.txt` | Юникод-экранирование | 1,353 |

Каталог `ready/minimal/` повторяет ту же структуру (by-category, by-pillar, encoded) с минимальным набором пэйлоадов.

Пользовательский выходной каталог:```bash
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com -o /path/to/engagement/payloads

Сырые шаблоны с плейсхолдером {domain} (для подстановки скриптами) находятся в payloads/lists/full/ и payloads/lists/minimal/.


Столпы обнаружения

Каждая полезная нагрузка генерирует как минимум один из этих сигналов. Ищите их в ответах:

Канареечные значения: 1337 (основное, из 7*191) и 7331 (второстепенное). Обнаружение — простой grep.


Охват полезных нагрузок

По классам уязвимостей

13 из 20 категорий имеют все 4 столпа. 7, которые не имеют (XSS, XSLT, Format String, Prototype Pollution, CRLF, XXE, CouchDB) имеют архитектурные причины — вы не можете сделать CRLF на основе задержки или OOB форматные строки. Там, где кросс-столп возможен, его покрывает раздел полиглотов.

Закодированные варианты

7 форматов кодирования, каждый для всех 1353 нагрузок:


Принципы проектирования

Минимум нагрузок, максимум покрытия контекстов. Полную техническую спецификацию с таблицами столпов для каждого движка и точным синтаксисом нагрузок см. в SPEC.md.

  1. Сначала полиглоты. Одна нагрузка одновременно выходит из ', ", ), */, -->, обратных кавычек и разделителей шаблонов. Разделы полиглотов возглавляют основной список.

  2. По движку там, где полиглоты не работают. Разделители SSTI и форматы десериализации принципиально несовместимы между разными движками.

  3. Встроенные функции вместо оболочки. Нагрузки OOB и задержки используют нативные для языка библиотеки:


Инструмент CLI (payloadctl)```bash

USAGE: prepare payloads for an engagement

./tools/payloadctl prepare abc123.oastify.com # output -> ready/ ./tools/payloadctl prepare abc123.oastify.com -o /tmp/payloads # custom dir

DEVELOPMENT: build, distribute, validate, generate

./tools/payloadctl build # sources/ -> payloads/full.txt ./tools/payloadctl dist # full.txt + minimum.txt -> payloads/lists/full/ + lists/minimal/ ./tools/payloadctl validate # test all 1,353 payloads against 35 testbed stacks ./tools/payloadctl validate # test a specific wordlist (e.g. lists/minimal/master.txt) ./tools/payloadctl generate # regenerate computed payloads (deser, ssti, sqli, misc) ./tools/payloadctl generate deser # deserialization only ./tools/payloadctl generate ssti # SSTI only

root@kitploit:~
### Типичный рабочий процесс разработки```bash
# 1. Edit source files
vim payloads/sources/sqli.txt

# 2. Rebuild
./tools/payloadctl build       # rebuild full.txt from sources
./tools/payloadctl dist        # regenerate lists/full/ + lists/minimal/

# 3. Validate (requires Docker testbeds running)
cd testbed && ./testbed up sqli-sqlite && cd ..
./tools/payloadctl validate    # expect: N FIRE / 0 NO-FIRE / 0 SKIPPED

# 4. Prepare for use
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com

Структура репозитория```

. ├── README.md # This file ├── HOWTOUSE.md # Operator guide: context profiling + category selection matrix ├── SPEC.md # Technical spec - per-engine pillars, payload syntax, coverage │ ├── tools/ # CLI and generators │ ├── payloadctl # CLI entry point │ ├── cmd_build.py # Build full.txt from source files │ ├── cmd_dist.py # Generate lists/ directory │ ├── cmd_validate.py # Validate payloads against testbeds │ ├── cmd_validate_strict.py # Strict validation (proves actual exploitation) │ ├── cmd_generate.py # Run payload generators │ ├── cmd_prepare.py # Prepare payloads with callback domain │ ├── generate-deser-final.py # Deserialization generator (31 frameworks) │ ├── generate-ssti-missing.py # SSTI generator (14 engines) │ ├── generate-sqli-code-missing.py # SQLi and code injection generator │ └── generate-misc-missing.py # XXE, XSS, SSRF, path traversal generator │ ├── payloads/ │ ├── full.txt # Master list (1,353 payloads, with ## headers) │ ├── sources/ # Source files (edit these, all validated) │ │ ├── minimum.txt # 83-payload minimal list (validated, all pillars) │ │ ├── polyglots-condensed.txt # Cross-context polyglots (first in master) │ │ ├── sqli.txt # SQL injection (204) │ │ ├── ssti.txt # Template injection (168) │ │ ├── deserialization.txt # Deserialization (116, 31 frameworks) │ │ ├── os-cmd-injection.txt # OS command injection (116) │ │ ├── code-injection.txt # Code injection (112, includes Groovy) │ │ ├── ssrf.txt # SSRF (117) │ │ ├── path-traversal.txt # Path traversal (98) │ │ ├── xss.txt # XSS (49) │ │ ├── format-string.txt # Format string (33) │ │ ├── nosql.txt # NoSQL (26) │ │ ├── el-injection.txt # Expression language (26, includes MVEL) │ │ ├── header-crlf.txt # CRLF/header (14) │ │ ├── prototype-pollution.txt # Prototype pollution (10) │ │ ├── xxe.txt # XXE (8) │ │ ├── ldap-injection.txt # LDAP injection (30) │ │ ├── xslt-injection.txt # XSLT injection (25) │ │ ├── elasticsearch-injection.txt # Elasticsearch (25) │ │ ├── cypher-injection.txt # Neo4j/Cypher (22) │ │ └── couchdb-injection.txt # CouchDB (4) │ └── lists/ # Generated (don't edit, use payloadctl dist) │ ├── full/ # Full payload set │ │ ├── master.txt # 1,353 payloads with ## headers │ │ ├── payloads-only.txt # Raw lines for Burp Intruder │ │ ├── by-category/ # 20 category files │ │ ├── by-pillar/ # 5 pillar files (with -payloads-only variants) │ │ └── encoded/ # 7 encoding variants │ └── minimal/ # Minimal payload set (same structure) │ ├── master.txt # 83 payloads with ## headers │ ├── payloads-only.txt # Raw lines for Burp Intruder │ ├── by-category/ # 20 category files │ ├── by-pillar/ # 5 pillar files (with -payloads-only variants) │ └── encoded/ # 7 encoding variants │ ├── ready/ # Output from payloadctl prepare (gitignored) │ └── testbed/ # Docker validation infrastructure ├── testbed # CLI: ./testbed up ├── docker-compose.oob.yml # OOB callback catcher (HTTP 9999, TCP 9998, DNS 5353) ├── shared/oob-catcher/ # HTTP + LDAP/binary + raw TCP + DNS callback server └── stacks/ # 35 vulnerable application stacks

root@kitploit:~
---

## Добавление полезных нагрузок

### Добавление полезной нагрузки в существующую категорию

1. Отредактируйте исходный файл в `payloads/sources/`. Одна полезная нагрузка на строку под разделом `##Header##`.
2. Каждая полезная нагрузка должна создавать обнаруживаемый сигнал (ошибка, математический результат 1337, задержка >4.5s, внеполосный (OOB), отражение).
3. Пересоберите и проверьте:   ```bash
   ./tools/payloadctl build && ./tools/payloadctl dist
   ./tools/payloadctl validate    # 0 NO-FIRE required

Добавление новой категории уязвимостей

  1. Создайте payloads/sources/<category>.txt с заголовками ## для каждой категории (error, math, timing, OOB).
  2. Добавьте файл в SOURCE_FILES в tools/cmd_build.py и CATEGORY_SOURCES в tools/cmd_dist.py.
  3. Создайте стенд в testbed/stacks/<category>/ (Dockerfile + сервер, предоставляющий POST /<endpoint> с input=<payload> и возвращающий {"output": "...", "error": "...", "time_ms": N}).
  4. Добавьте маршрутизацию конечных точек в tools/cmd_validate.py (словарь ENDPOINTS и функция _get_endpoints()).

Добавление нового фреймворка десериализации

  1. Отредактируйте tools/generate-deser-final.py - добавьте функцию, которая выводит полезные нагрузки (error, math, timing, OOB).
  2. Запустите ./tools/payloadctl generate deser && ./tools/payloadctl build
  3. Добавьте конечную точку стенда и маршрутизацию при необходимости.

Добавление нового движка SSTI

  1. Отредактируйте payloads/sources/ssti.txt - добавьте разделы ##EngineName (Language) - Pillar##. Используйте встроенные возможности языка для timing/OOB.
  2. Добавьте конечную точку стенда в соответствующий стек ssti-<language>.
  3. Добавьте маршрутизацию в ENGINE_MAP в tools/cmd_validate.py.

Правила формата полезных нагрузок

  • Одна полезная нагрузка на строку (многострочный YAML использует буквальный \n)
  • Заполнитель {domain} для URL обратного вызова OOB
  • Канарейка 1337 для всех математических полезных нагрузок
  • Разделы ##Header## группируют по категории и pillar
  • Нет дубликатов (шаг сборки автоматически удаляет дубликаты)

Проверка

Валидатор проверяет каждую полезную нагрузку на реальных уязвимых приложениях:```bash

Start testbeds (Docker required)

cd testbed ./testbed up sqli-sqlite ./testbed up ssti-python ./testbed up deserialization-java

... (35 stacks total)

Run validation

cd .. ./tools/payloadctl validate

Output: 1,353 FIRE / 0 NO-FIRE / 0 SKIPPED / 1,353 TOTAL

root@kitploit:~
How it works:
1. Читает файл полезной нагрузки и направляет каждый раздел `##` в соответствующие конечные точки тестового стенда
2. Отправляет POST `input=<payload>` в конечные точки, проверяет ответ на наличие сигналов
3. Полезная нагрузка срабатывает, если ЛЮБАЯ конечная точка возвращает: реальную ошибку парсера/интерпретатора, вычисленное сервером `1337` (из `7*191`), задержку >4.5 с, обратный вызов OOB из целевого контейнера, содержимое файла (`root:x:0:0`) или отражённый ввод в валидном контексте (XSS, CRLF)

Строгая валидация (`tools/cmd_validate_strict.py`) дополнительно проверяет:
- Математические полезные нагрузки доказывают вычисление на стороне сервера (нагрузка отправляет `7*191`, а не литерал `1337`)
- Обратные вызовы OOB происходят с IP-адресов контейнеров тестового стенда
- Сообщения об ошибках содержат реальные сигнатуры парсеров/интерпретаторов, а не общие ошибки HTTP
- Временные задержки находятся в ожидаемом диапазоне (~5 секунд)

### Стеки тестовых стендов (всего 35)

| Стек | Порт | Язык | Конечные точки |
|-------|------|----------|-----------|
| sqli-sqlite | 8001 | Python | `/sqli`, `/sqli-numeric` |
| sqli-postgres | 8030 | Python | `/sqli` |
| ssti-python | 8003 | Python | `/jinja2`, `/mako`, `/tornado` |
| ssti-node | 8011 | Node | `/ejs`, `/nunjucks`, `/pug` |
| ssti-php | 8020 | PHP | `/twig`, `/smarty` |
| ssti-ruby | 8025 | Ruby | `/erb`, `/slim`, `/haml` |
| ssti-java | 8040 | Java | `/freemarker`, `/velocity`, `/pebble`, `/thymeleaf` |
| os-cmd-injection | 8002 | Python | `/system`, `/popen` |
| code-injection-python | 8004 | Python | `/eval` |
| code-injection-node | 8012 | Node | `/eval` |
| code-injection-php | 8021 | PHP | `/eval` |
| code-injection-ruby | 8026 | Ruby | `/eval`, `/yaml`, `/marshal`, `/oj` |
| code-injection-perl | 8031 | Perl | `/eval`, `/storable`, `/yaml` |
| xss | 8010 | Node | `/reflected` |
| xxe | 8008 | Python | `/parse`, `/xinclude` |
| ssrf | 8007 | Python | `/fetch` |
| path-traversal | 8006 | Python | `/read` |
| nosql-redis | 8015 | Node | `/eval` |
| el-injection-java | 8041 | Java | `/spel`, `/ognl` |
| prototype-pollution | 8013 | Node | `/merge` |
| deserialization-python | 8005 | Python | `/pickle`, `/yaml`, `/jsonpickle` |
| deserialization-node | 8014 | Node | `/unserialize`, `/yaml`, `/funcster` |
| deserialization-php | 8022 | PHP | `/unserialize`, `/unserialize-b64`, `/phar` |
| deserialization-java | 8042 | Java | `/deserialize`, `/yaml`, `/jackson`, `/fastjson`, `/xstream`, `/xmldecoder`, `/hessian` |
| deserialization-dotnet | 8045 | .NET | `/jsonnet`, `/binaryformatter`, `/xmlserializer`, `/losformatter`, `/javascriptserializer` |
| log4j-jndi | 8046 | Java | `/log` |
| sqli-mysql | 8050 | Python | `/sqli`, `/sqli-numeric` |
| nosql-mongo | 8051 | Node | `/find`, `/where`, `/aggregate` |
| ssi-esi | 8035 | Python | `/ssi` |
| ldap-injection | 8055 | Python + OpenLDAP | `/search`, `/auth` |
| xslt-injection | 8056 | Python | `/transform`, `/xpath` |
| elasticsearch | 8057 | Python + ES 7.17 | `/search`, `/script` |
| cypher-injection | 8058 | Python + Neo4j 5 | `/query`, `/search` |
| couchdb-injection | 8059 | Python + CouchDB 3 | `/find` |
| groovy-injection | 8060 | Groovy/JDK 21 | `/eval` |

Ловитель OOB на порту 9999 (HTTP + обнаружение LDAP/двоичных данных) и 9998 (общий TCP-перехватчик), с DNS на 5353/UDP. Обнаруживает HTTP-обратные вызовы, двоичные соединения LDAP/ASN.1 (JNDI), DNS-запросы и сырые TCP-соединения. Каждая конечная точка принимает `POST /<sink>` с `input=<payload>` и возвращает `{"output": "...", "error": "...|null", "time_ms": N}`.

---

## Благодарности

Полезные нагрузки исследованы и разработаны [Grom Hacks](https://github.com/gromhacks). Основано на работе сообщества исследователей безопасности, включая PayloadsAllTheThings, HackTricks, PortSwigger Web Security Academy и отдельных исследователей. Все полезные нагрузки проверены на реальных уязвимых приложениях.
Скачать инструмент
Полезные нагрузкиКатегорияСтолпы
4SQLiошибка, математика, время, OOB (полиглоты разных диалектов)
4SSTIошибка, математика, время, OOB (полиглоты разных движков)
3Команды ОСматематика, время, OOB (полиглоты разных оболочек)
3Инъекция кодаматематика, время, OOB (межъязыковые)
2XSSматематика, OOB
2XXEчтение файла, OOB
2SSRFошибка, OOB
1Обход путичтение файла
2NoSQLматематика, ошибка
1Инъекция ELматематика
1Загрязнение прототипаматематика
1CRLF/Заголовкиматематика
1Строка форматаошибка
1SSIматематика
2Инъекция LDAPошибка, математика
3Инъекция XSLTошибка, математика, OOB
2Elasticsearchошибка, математика
2Cypher/Neo4jошибка, время
1CouchDBошибка
3Groovyматематика, время, OOB
41Десериализациямногопиллярный где поддерживается, только ошибка в противном случае
Tzo
YTo
  • Матрица от подсказки цели к категории - перейти от «Я вижу id=42 и JSESSIONID» к «попробуйте by-category/sqli.txt + десериализацию Java + инъекцию EL, следите за блоком математики» за один просмотр.
  • Правила выбора столпа - выбирайте сигнал, который вы действительно можете наблюдать (OOB > математика > время > ошибка > отраженный), прежде чем отправлять, чтобы никогда не тестировать вслепую по каналу, который вы не можете прочитать.
  • СтолпНагрузкиЧто искатьИспользовать когда
    Ошибка324Текст исключения, стек вызовов, ошибка парсера в ответеПриложение отражает ошибки
    Задержка227Ответ занимает >4.5 секундСлепое внедрение — нет вывода, нет ошибок
    Внешний канал209Исходящий HTTP/DNS/LDAP/TCP на ваш callback-серверСлепое + асинхронное — задержка ненадёжна
    Математика182Литерал 1337 в теле ответа (сервер вычислил 7*191)Вывод отражается, но ошибок нет
    Отражение374Введённое значение повторяется в ответеФаззинг на аномалии парсера
    Чтение файлов(подмножество)Содержимое root: или [extensions] в ответеPath traversal, XXE чтение файлов
    КатегорияКоличествоСтолпыОхват
    SQLi211error, math, timing, oobMySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB. UNION, error, timing, OOB. Выход из контекста: ', ", ), )), */, numeric.
    SSTI206error, math, timing, oobJinja2, Mako, Tornado, EJS, Nunjucks, Pug, Twig, Smarty, ERB, Slim, Haml, Thymeleaf, Pebble, Freemarker, Velocity, Razor, Go template, Mustache, Liquid. Все используют встроенные средства языка.
    Десериализация232error, math, timing, oob31 фреймворков / 7 языков. Все нативные для языка полезные нагрузки используют встроенные средства (без команд оболочки). Python (pickle P0/P2/P4 через time.sleep/builtins.eval/urllib, YAML через time.sleep/builtins.eval, jsonpickle), PHP (unserialize), Node (node-serialize через JS busy-wait/http.get, js-yaml, funcster, cryo), Ruby (YAML, Marshal, Oj), Java (Jackson, Fastjson, XStream, SnakeYAML, XMLDecoder, Hessian, JNDI/Log4Shell, ObjectInputStream, ysoserial URLDNS), .NET (Json.NET, BinaryFormatter, SoapFormatter, XmlSerializer, JavaScriptSerializer, LosFormatter, ViewState, ObjectStateFormatter), Perl (Storable, YAML).
    Внедрение команд ОС120error, math, timing, oobBash, CMD, PowerShell. Разделители: ;, |, ||, &&, $(), обратные кавычки. Обход IFS, обход glob, hex-кодирование.
    Внедрение кода123error, math, timing, oobPython, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy. Загрузка ЦП без импортов, OOB на уровне сокетов.
    SSRF156error, math, timing, oobОблачные метаданные (AWS/GCP/Azure), обход IP, схемы протоколов, DNS rebinding, зондирование внутренних сервисов.
    Path Traversal113error, math, timing, oobLinux + Windows, обход кодировкой, нулевой байт, обёртки PHP, UNC, NTFS ADS, короткие имена 8.3.
    XSS58error, math, oobКросс-контекстные полиглоты (20+ контекстов), обработчики событий, обход фильтров, DOM clobbering, мутационный XSS, SVG, OOB.
    Форматная строка38error, mathC/C++ (%s%n%x), Python ({0.__class__}), .NET ({0:X}).
    NoSQL32error, math, timing, oobВнедрение операторов MongoDB, $where с задержкой, OOB, команды Redis.
    EL Injection34error, math, timing, oobSpEL, OGNL, MVEL, Unified EL. OOB через java.net.URL.
    CRLF/Заголовок17error, math, oobРасщепление ответа, внедрение заголовков, OOB через заголовок Host.
    Prototype Pollution12error, math__proto__, constructor.prototype, варианты JSON и строк запроса.
    XXE11error, timing, oob, file-readВнешние сущности, XInclude, параметрические сущности, DoS Billion Laughs.
    LDAP Injection35error, math, timing, oobВнедрение фильтра, обход аутентификации, задержка по wildcard, OOB через реферал.
    Elasticsearch30error, math, timing, oobВнедрение скриптов Painless, DSL запросов, синтаксис query_string.
    Cypher/Neo4j27error, math, timing, oobВнедрение запросов Cypher, APOC sleep, LOAD CSV OOB.
    CouchDB5error, mathВнедрение запросов Mango, внедрение операторов, обход аутентификации.
    XSLT Injection30error, math, oob, file-readМатематика XPath, SSRF через document(), чтение файлов, утечка информации через system-property().
    Полиглоты/Пограничные случаи246error, math, timing, oobКросс-контекстные полиглоты + переполнение буфера, границы целых чисел, путаница типов, нулевой байт.
    КодировкаСценарий использования
    URL-encodedСтандартные параметры запроса/формы
    Double-URL-encodedОбход WAF, уязвимости двойного декодирования
    Base64Тела API, JWT, сериализованные параметры
    JSON-safeТела JSON-запросов (экранированные кавычки)
    HTML entityВнедрение в HTML-атрибуты
    Hex-escapedБинарные протоколы, низкоуровневое внедрение
    Unicode-escapedОбход нормализации Unicode
    ЯзыкВстроенный OOBВстроенная задержка
    Pythonurllib.request.urlopen()time.sleep(5)
    Javajava.net.URL.openStream()Thread.sleep(5000)
    Noderequire('http').get()Цикл busy-wait на Date.now()
    PHPfile_get_contents(), fsockopen()sleep(5)
    RubyNet::HTTP.get(), TCPSocket.new()sleep(5)
    PerlIO::Socket::INETselect(undef,undef,undef,5)
    .NETSystem.Net.WebClientThread.Sleep(5000)

    Команды оболочки (curl, nslookup) зависят от ОС и PATH. Встроенные функции работают везде.

  • Без импортов, где возможно. Загрузка ЦП работает даже если импорты заблокированы:

    • Python: sum(range(500000000)) (~7 с, без импортов)
    • Node: Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5000) (точные 5 с)
    • Ruby: 99999999.times{1+1}
  • OOB на уровне сокетов как запасной вариант. Когда HTTP-библиотеки заблокированы: __import__('socket').create_connection(), fsockopen(), TCPSocket.new(), new java.net.Socket().

  • Проверьте: ./tools/payloadctl validate