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

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

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

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

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

Категории

Все категории
Loading categories
fuzzilli — Фаззер JavaScript-движка | Kitploit
Инструменты/GitHubGitHub/googleprojectzero/fuzzilli
Анализ уязвимостейФаззингАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubgoogleprojectzero/fuzzilli

fuzzilli

Фаззер JavaScript-движка

Репозиторий
2.3k366836 дней назадПроверено Kitploit

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться

Fuzzilli

(Покрытие-)направляемый фаззер для интерпретаторов динамических языков, основанный на пользовательском промежуточном языке («FuzzIL»), который можно мутировать и транслировать в JavaScript.

Использование

Основные шаги для использования этого фаззера:

  1. Загрузите исходный код одного из поддерживаемых движков JavaScript. Список поддерживаемых движков JavaScript см. в директории Targets/.
  2. Примените соответствующие патчи из директории целевого движка. Также см. README.md в этой директории.
  3. Скомпилируйте движок с инструментацией покрытия (требуется clang >= 4.0), как описано в README.
  4. Скомпилируйте фаззер: swift build [-c release].
  5. Запустите фаззер: swift run [-c release] FuzzilliCli --profile=<profile> [other cli options] /path/to/jsshell. См. также swift run FuzzilliCli --help.

Сборка и запуск Fuzzilli и поддерживаемых движков JavaScript внутри Docker и на Google Compute Engine также поддерживаются.

Хакинг

Посмотрите main.swift, чтобы увидеть пример использования библиотеки Fuzzilli и поиграть с различными параметрами конфигурации. Затем ознакомьтесь с Fuzzer.swift для высокоуровневой логики фаззинга. Оттуда погружайтесь в любую интересную часть.

Патчи, дополнения и другие вклады в этот проект приветствуются! Однако предварительно ознакомьтесь с заметками для контрибьюторов. Fuzzilli в целом следует стилю кода Google для Swift.

Будет очень признательно, если вы отправите короткое уведомление (возможно, с номером CVE) на [email protected] или откроете pull request для любой уязвимости, найденной с помощью этого проекта, чтобы она могла быть включена в раздел галерея багов. В остальном вы, конечно, можете претендовать на любые вознаграждения за баги, кредиты CVE и т.д. за эти уязвимости :)

Концепция

При фаззинге на предмет основных ошибок интерпретатора, например в JIT-компиляторах, семантическая корректность генерируемых программ становится проблемой. Это отличается от большинства других сценариев, например фаззинга API времени выполнения, где семантическую некорректность можно легко обойти, обернув сгенерированный код в конструкции try-catch. Существуют разные способы достижения приемлемого уровня семантически корректных образцов, один из них — мутационный подход, при котором все образцы в корпусе также семантически валидны. В этом случае каждая мутация имеет лишь небольшой шанс превратить валидный образец в невалидный.

Для реализации мутационного JavaScript-фаззера необходимо определить мутации кода JavaScript. Вместо мутации AST или других синтаксических элементов программы определяется пользовательский промежуточный язык (IL), на котором мутации потока управления и данных программы могут выполняться более непосредственно. Затем этот IL транслируется в JavaScript для выполнения. Промежуточный язык выглядит примерно так:

v0 <− LoadInteger '0'
v1 <− LoadInteger '10'
v2 <− LoadInteger '1'
v3 <− LoadInteger '0'
BeginFor v0, '<', v1, '+', v2 −> v4
   v6 <− BinaryOperation v3, '+', v4
   Reassign v3, v6
EndFor
v7 <− LoadString 'Result: '
v8 <− BinaryOperation v7, '+', v3
v9 <− LoadGlobal 'console'
v10 <− CallMethod v9, 'log', [v8]

Который, например, может быть тривиально транслирован в следующий JavaScript-код:

const v0 = 0;
const v1 = 10;
const v2 = 1;
let v3 = 0;
for (let v4 = v0; v4 < v1; v4 = v4 + v2) {
    const v6 = v3 + v4;
    v3 = v6;
}
const v7 = "Result: ";
const v8 = v7 + v3;
const v9 = console;
const v10 = v9.log(v8);

Или в следующий JavaScript-код путём встраивания промежуточных выражений:

let v3 = 0;
for (let v4 = 0; v4 < 10; v4++) {
    v3 = v3 + v4;
}
console.log("Result: " + v3);

FuzzIL обладает рядом свойств:

  • Программа FuzzIL — это просто список инструкций.
  • Инструкция FuzzIL — это операция вместе с входными и выходными переменными и, возможно, одним или несколькими параметрами (обозначается в одинарных кавычках в записи выше).
  • Входными данными для инструкций всегда являются переменные, никаких непосредственных значений.
  • Каждый выход инструкции — это новая переменная, и существующие переменные могут быть переприсвоены только через специальные операции, такие как инструкция Reassign.
  • Каждая переменная определена до её использования.

Над этими программами могут выполняться различные мутации:

  • InputMutator: заменяет входные переменные инструкций на другие, мутируя поток данных программы.
  • CodeGenMutator: генерирует код и вставляет его в мутированную программу. Код генерируется либо путем выполнения генератора кода, либо копированием некоторых инструкций из другой программы в корпусе (сплайсинг).
  • CombineMutator: вставляет программу из корпуса в случайную позицию мутированной программы.
  • OperationMutator: мутирует параметры операций, например заменяет целочисленную константу на другую.
  • и другие...

Более подробное обсуждение того, как работает Fuzzilli, можно найти здесь.

Реализация

Фаззер реализован на Swift, некоторые части (например, измерение покрытия, сокетные взаимодействия и т.д.) реализованы на C.

Архитектура

Экземпляр фаззера (реализован в Fuzzer.swift) состоит из следующих центральных компонентов:

  • MutationFuzzer: создает новые программы из существующих, применяя мутации. Затем выполняет полученные образцы и оценивает их.
  • ScriptRunner: выполняет программы целевого языка.
  • Corpus: хранит интересные образцы и предоставляет их ядру фаззера.
  • Environment: содержит знания о среде выполнения, например о доступных встроенных объектах, именах свойств и методов.
  • Minimizer: минимизирует аварийные и интересные программы.
  • Evaluator: оценивает, является ли образец интересным по какому-либо критерию, например покрытию кода.
  • Lifter: транслирует программу FuzzIL в целевой язык (JavaScript).

Кроме того, опционально доступны несколько модулей:

Скачать инструмент