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

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

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

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

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

Категории

Все категории
Loading categories
litefuzz — Многоплатформенный фаззер для тестирования пользовательских бинарных файлов, сетевых клиентов и серверов | Kitploit
Инструменты/GitHubGitHub/sec-tools/litefuzz
Анализ уязвимостейЭксплуатацияФаззингТестирование на ПроникновениеАнализ Бинарных Файлов
GitHubsec-tools/litefuzz

litefuzz

Многоплатформенный фаззер для тестирования пользовательских бинарных файлов, сетевых клиентов и серверов

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

Популярное

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

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

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

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

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

litefuzz

Многоплатформенный фаззер для тестирования пользовательских бинарников, клиентов и серверов.

Он находил ошибки в 50+ приложениях и библиотеках от ведущих компаний и open source.

Простая настройка для начала фаззинга на Linux, Mac и Windows.

  • litefuzz
    • введение
    • зачем
    • как это работает
      • что он делает
      • что он не делает
    • поддержка
      • версии Python
      • linux
      • mac
      • windows
      • цели
      • триаж
    • начало работы
      • тесты
        • модульные тесты
        • тесты с аварийными приложениями
    • опции
      • директория крашей
      • режим изоляции
      • таймаут
      • мутаторы
      • ReportCrash
      • пауза
      • повторное использование крашей для поиска вариантов
      • помощники отладки памяти
      • проверка вывода работающей цели
      • режимы клиента и сервера
      • примеры локальной сети
  • примеры удалённой сети
    • клиент
    • сервер
      • TLS
    • режимы многократного обмена данными
  • присоединение к процессу
  • артефакты крашей
  • golang
  • воспроизведения
  • удаление файла
  • минимизация
  • команда
  • примеры
    • локальное приложение
      • быстрый взгляд
      • перечисление обработчиков файлов на Ubuntu
      • перечисление обработчиков файлов на OS X
    • клиент
      • быстрый взгляд
      • локальный клиент
      • удалённый клиент
    • сервер
      • быстрый взгляд
      • локальный сервер
      • удалённый сервер
  • командная строка
  • трофеи
  • FAQ
    • как появился этот проект?
    • активно ли поддерживается проект?
    • откуда вы знаете, что фаззер работает хорошо, и сравнивали ли вы его с другими?
    • что бы вы изменили, если бы переписывали его сегодня?
    • насколько стабилен litefuzz?
    • есть ли неподдерживаемые сценарии для litefuzz?
    • какие гарантии даются для этого проекта или его кода?
    • автор / ссылки
  • введение

    Litefuzz служит одной цели: фаззить и проводить триаж на всех основных платформах, поддерживать как CLI/GUI приложения, так и сетевые клиенты и серверы, чтобы находить уязвимости, связанные с безопасностью.

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

    Он не создан для скорости, масштабируемости или для того, чтобы выигрывать призы в академической среде. Он применяет простые техники под разными углами для достижения результатов. Для консольного файлового фаззинга вам, вероятно, стоит просто использовать AFL. У него превосходная производительность, возможности инструментирования (и более быстрые неинструментированные запуски), масштаб и способность создавать гребанные jpeg'и из ниоткуда. Для сетевого фаззинга mutiny fuzzer тоже хорошо работает, если у вас есть PCAP-файлы для воспроизведения, а frizzer выглядит многообещающим. Но если вы хотите попробовать этот, он может фаззить такого рода цели на разных платформах с помощью одного единственного инструмента.

    ./ и дайте вашей цели... лёгкий фазз.``` $ sudo apt install -y latex2rtf

    $ ./litefuzz.py -l -c "latex2rtf FUZZ" -i input/tex -o crashes/latex2rtf -n 1000 -z --========================-- --======| litefuzz |======-- --========================--

    [STATS] run id: 3516 cmdline: latex2rtf FUZZ crash dir: crashes/latex2rtf input dir: input/tex inputs: 1 iterations: 1000 mutator: random(mutators)

    @ 1000/1000 (3 crashes, 127 duplicates, ~0:00:00 remaining)

    [RESULTS]

    completed (1000) iterations with (3) unique crashes and 127 dups

    check crashes/latex2rtf for more details

    root@kitploit:~
    Это простой локальный целевой объект, с которым AFL++ прекрасно справляется, и приведённый здесь лишь для примера. Litefuzz был разработан для гораздо более широких возможностей в области сетевого фаззинга и фаззинга графического интерфейса, что вы увидите, когда погрузитесь в изучение.
    
    ## зачем
    
    Да, ещё один фаззер, и притом не очень хорошо соответствующий современным тенденциям и соглашениям. Были сделаны компромиссы для удовлетворения определённых требований. Эти требования включают фаззер, который работает по умолчанию на нескольких платформах, фаззит как локальные, так и сетевые цели и очень прост в использовании. Я не пытаюсь никого ни в чём убедить, но позвольте предоставить некоторый контекст. Некоторые цели требуют больших усилий для интеграции таких фаззеров, как AFL, в сборочную цепочку. Это не проблема, поскольку данный фаззер не требует инструментирования, жертвуя точным покрытием, достигаемым инструментированием, ради простоты и портативности. AFL также не поддерживает сетевой фаззинг «из коробки», и хотя существуют проекты на его основе, которые это умеют, они далеко не просты в использовании и обычно требуют дополнительных модификаций кода и обвязок для работы (аналогичная история с [Libfuzzer](https://llvm.org/docs/LibFuzzer.html)).
    
    Он не поддерживает параллельный фаззинг, а также не предоставляет ничего похожего на огромное ускорение, которое может дать [persistent mode](https://lcamtuf.blogspot.com/2015/06/new-in-afl-persistent-mode.html), поэтому он не может масштабироваться так, как фаззеры с такими возможностями. Повторюсь, это не самый современный фаззер. Но ему не нужен исходный код, настройка сборки или определённые функции ОС. Он даже может фаззить некоторые графические интерфейсы сетевых клиентов и интерактивные приложения. Он во многом использует то, что уже есть в системе, и многие функции, такие как мутаторы и минимизация, были написаны с нуля.
    
    Он был спроектирован так, чтобы «просто работать», и были приложены усилия для автоматизации настройки и установки тех немногих зависимостей, которые ему нужны. Этот фаззер был написан для определённой цели: приносить пользу в самых разных сценариях и средах, и, что самое важное, по чему в конечном счёте следует оценивать все фаззеры — способность находить ошибки. И **он находит** [ошибки](https://github.com/sec-tools/beta/blob/main/README.md#trophies). Он не предполагает наличия исходного кода цели, поэтому может довольно хорошо покрывать закрытое программное обеспечение. Он может работать как часть автоматизации с небольшими изменениями, но ориентирован на то, чтобы быть интересным в использовании для исследователей уязвимостей. Однако его полезнее рассматривать как исследовательский проект, а не полноценный продукт. Кроме того, здесь нет сложной настройки, когда он «из коробки» слегка сломан или требует дополнительной работы для запуска на современных операционных системах.
    
    Он протестирован и работает на Ubuntu Linux, Mac и Windows и поставляется с полностью функциональными скриптами, которые делают почти всё за вас, чтобы настроить готовую к фаззингу среду.
    
    **После завершения скрипта настройки требуется всего несколько минут, чтобы начать фаззить множество различных целей.**
    
    ## как это работает
    
    **Litefuzz поддерживает три различных режима: локальный, клиентский и серверный.**
    
    Локальный означает фаззинг локальных бинарных файлов, которые на Linux/Mac запускаются через подпроцесс с автоматической поддержкой триажа через GDB и LLDB соответственно при авариях и через [WinAppDbg](https://github.com/MarioVilas/winappdbg) на Windows. Аварии записываются в локальный каталог аварий и сортируются по типу ошибки, например, чтение/запись AV или SIGABRT/SIGSEGV вместе с хешами файлов. Все уникальные аварии триажируются по мере фаззинга, и эти данные вместе с выводом цели (если доступны) также захватываются и помещаются в качестве артефактов в тот же каталог. Также возможно воспроизвести аварии с помощью `--replay` и указания аварийного файла. В `local` клиентском режиме входной каталог должен содержать приветствие сервера, ответ или другие данные, которые клиент ожидает при подключении к серверу.
    
    На данный момент реализован только один «выстрел» для сетевого фаззинга без поддержки сложных сессий. Клиент запускается через командную строку и отлаживается так же, как и при файловом фаззинге. Для поддержки этого сценария настраивается слушатель; да, это медленно и граничит с ручным трудом, но это работает. Если обнаружена авария, она воспроизводится в gdb для получения деталей триажа. В `remote` клиентском режиме это работает так же, за исключением отсутствия локальной отладки/триажа аварий. В *local* серверном режиме это похоже на локальный клиентский режим, а для `remote` серверного режима он просто подключается к указанной цели и отправляет мутированные образцы данных клиента, которые пользователь указывает в качестве входных данных, но предоставляется только простой триаж: «можем ли мы всё ещё подключиться; если нет, то, вероятно, предыдущий образец вызвал аварию».
    
    Существует несколько функций мутации, написанных с нуля, которые в основном выполняют случайные мутации со случайным выбором входных данных, указанных флагом `-i`. Для файлового фаззинга просто выберите локальный режим и передайте целевую командную строку, где FUZZ обозначает, где приложение ожидает имя файла для разбора, например, `tcpdump -r FUZZ`, вместе с входным каталогом «хороших файлов» для мутации. Для фаззинга сетевых клиентов это похоже на локальный фаззинг, но также укажите параметры подключения через `-a`. А если вы хотите фаззить серверы, используйте серверный режим и укажите `protocol://address:port` так же, как для клиентов.
    
    Он фаззит так же быстро, как цель может потреблять данные и завершать работу, как в случае с большинством приложений командной строки, или столько, сколько вы определили, прежде чем истечёт время ожидания локального выполнения или сетевого подключения, что может быть намного медленнее. Никаких хитрых exec или трюков с ядром здесь нет. Но, конечно, если вы напишете обвязку, которая быстро разбирает входные данные и завершает работу, покрывая определённую часть цели, это тоже помогает. Но если вы можете так близко подобраться к цели, вам, вероятно, лучше использовать [persistant mode](https://lcamtuf.blogspot.com/2015/06/new-in-afl-persistent-mode.html) или аналогичные возможности, которые могут предложить другие фаззеры.
    
    Короче говоря...
    
    ### что он делает
    - работает на linux, windows и mac и поддерживает py2/py3
    - фаззит бинарные файлы CLI/GUI, которые читают из файлов/stdin
    - фаззит сетевые клиенты и серверы, открытые или проприетарные, доступные для локальной или удаленной отладки
    - диффы, минимизация, воспроизведение, сортировка и автотриаж аварий
    - различные функции, такие как поддержка TLS, фаззинг бинарных файлов golang и некоторые дополнения для Mac
    - мутирует входные данные с помощью различных встроенных мутаторов + pyradamsa (Linux)
    
    ### что он не делает
    - нативное инструментирование
    - масштабирование с параллельными заданиями
    - сложный сессионный фаззинг
    - мониторинг удалённых клиентов и серверов (только базовые проверки, например, подключение)
    
    ## поддержка
    
    В основном тестировался на **Ubuntu Linux 20.04** (22.04 и 21.04 — легко), **Windows 10** и **Mac OS 11** (12 — легко). Фаззер и скрипты настройки могут также работать на немного более старых или новых версиях этих операционных систем, но основная часть исследований, тестирования и разработки проводилась в этих средах. Поддерживается Python3, и были предприняты усилия, чтобы код был совместим с Python2, так как он необходим для фаззинга на Windows через [WinAppDbg](https://github.com/MarioVilas/winappdbg).
    
    Тестирование платформ в основном проводилось на оборудовании Intel, но всё, похоже, в основном работает и на платформе M1 от Apple (заметные исключения: на Linux плагин exploitable для GDB, вероятно, не поддерживается, как и Pyradamsa). Также есть скрипты настройки в setup/, которые автоматизируют большинство или все задачи и установку зависимостей. В целом он может фаззить нативные бинарные файлы на каждой платформе, которые часто скомпилированы на C/C++, но также может отлавливать аварии в бинарных файлах Golang (экспериментально).
    
    ### версии python
    
    Python3 поддерживается для Linux и Mac, а Python2 требуется для Windows.
    
    Почему Py3 для Linux и Mac? Pyautogui, Pyradamsa (только Linux), лучшая поддержка сокетов на Mac.
    
    Почему Py2 для Windows? Winappdbg требует Py2.
    
    ### linux
    
    GDB для отладки и [exploitable](https://github.com/jfoote/exploitable) для триажа аварий. Если это OSS, вы можете собрать и инструментировать цель с помощью [санитайзеров](https://fuzzing-project.org/tutorial2.html) и т.п., в противном случае есть [отладчики памяти](https://en.wikibooks.org/wiki/Linux_Applications_Debugging_Techniques/Heap_corruption), которые можно загрузить во время выполнения.
    
    Эта установка вместе с зависимостями Python и другими полезными вещами автоматизирована с помощью [setup/linux.sh](https://github.com/sec-tools/litefuzz/blob/main/setup/linux.sh). Рекомендуемая ОС — Ubuntu 20.04, так как на ней проводилось большинство тестов.
    
    ### mac
    
    Вместо gdb мы используем lldb для отладки на OS X, так как он входит в состав инструментов командной строки XCode. Будучи администратором или в группе разработчиков, вы должны иметь возможность использовать lldb, но это поведение может отличаться в разных средах и версиях, и в крайнем случае вам может потребоваться запускать его с привилегиями sudo.
    
    Единственное, что вам нужно сделать вручную, — отключить SIP (в режиме восстановления, через cmd+R или используйте хаки vmware fusion). В противном случае автотриаж не сработает при фаззинге в ОС Тима Кука.
    
    Почти вся настройка автоматизирована с помощью скрипта [setup/mac.sh](https://github.com/sec-tools/litefuzz/blob/main/setup/mac.sh), так что вы можете просто запустить его для быстрого старта.
    
    ### windows
    
    [WinAppDbg](https://github.com/MarioVilas/winappdbg) используется для отладки на Windows с небольшим ограничением: фаззинг stdin не поддерживается.
    
    Как и в случае с автоматическими настройками для других операционных систем, chocolatey помогает автоматизировать установку пакетов на windows. Запустите [setup/windows.bat](https://github.com/sec-tools/litefuzz/blob/main/setup/windows.bat) в корневом каталоге litefuzz от имени Администратора, чтобы автоматизировать установки. Он установит средства отладки и другие зависимости для бесперебойной работы.
    
    ### цели
    
    Это список типов целей, которые были протестированы и в целом поддерживаются.
    
    * Локальные CLI/GUI приложения, разбирающие файловые форматы или stdin
      - поддержка отладки
     
    * Локальные CLI/GUI сетевые клиенты, разбирающие ответы сервера
      - поддержка отладки для CLI
      - ограниченная поддержка отладки для GUI
     
    * Локальные CLI сетевые серверы, разбирающие запросы клиентов
      - поддержка отладки (оговорка: должен быть возможность запустить как отдельный исполняемый файл, иначе можно рассматривать как *удалённый*)
    
    * Локальные GUI сетевые серверы, разбирающие запросы клиентов
      - теоретически поддерживается, не тестировалось
    
    * Удалённые CLI/GUI сетевые клиенты, разбирающие ответы сервера
      - без поддержки отладки
    
    * Удалённые CLI/GUI сетевые серверы, разбирающие запросы клиентов
      - без поддержки отладки
      - исключение: на Mac с использованием функций `attach` или `reportcrash`
    
    Опять же, фаззер может работать с локальными приложениями, клиентами и серверами на Linux, Mac и Windows и, конечно, может фаззить удалённые объекты независимо от платформы цели.
    
    ### триаж
    
    * Локальные CLI/GUI приложения, разбирающие файловые форматы или stdin
      - запустить приложение, перехватить сигналы, воспроизвести, запустив его снова внутри отладчика с файлом-аварийщиком
     
    * Локальные CLI/GUI сетевые клиенты, разбирающие ответы сервера
      - запустить приложение, перехватить сигналы, воспроизвести, запустив его снова внутри отладчика с файлом-аварийщиком
    
    * Локальные GUI/CLI сетевые серверы, разбирающие запросы клиентов
      - запустить приложение в отладчике, перехватить сигналы, воспроизвести, запустив его снова внутри отладчика с файлом-аварийщиком
    
    * Удалённые CLI/GUI сетевые клиенты, разбирающие ответы сервера
      - нет видимости, собирать аварии на удалённой стороне
      - можно вручную написать вспомогательные скрипты для помощи в триаже
    
    * Удалённые CLI/GUI сетевые серверы, разбирающие запросы клиентов
      - нет видимости, собирать аварии на удалённой стороне
      - можно вручную написать вспомогательные скрипты для помощи в триаже
      - исключение на Mac: опции `attach` и `reportcrash`, которые можно использовать для включения некоторых возможностей триажа
    
    ## начало работы
    
    Большая часть настройки на всех платформах автоматизирована с помощью скриптов в каталоге [setup](https://github.com/sec-tools/litefuzz/blob/main/README.md#setup).
    
    Просто запустите их из корня litefuzz, и это сэкономит вам много времени и поможет включить кое-что необходимое для автоматизированных развёртываний. Полезно использовать ВМ для настройки чистой ОС и среды фаззинга, так как среди прочего возможности создания снимков состояния пригодятся.
    
    См. [INSTALL.md](https://github.com/sec-tools/litefuzz/blob/main/INSTALL.md) для подробностей.
    
    **После установки обратитесь к примеру фаззинга latex2rtf в начальном разделе для быстрого запуска или погрузитесь во все параметры командной строки и дополнительные примеры, подробно описанные в этом README.**
    
    ### docker
    
    Вы можете запустить litefuzz с помощью Docker, используя `Dockerfile`, без установки зависимостей локально. Это особенно полезно для быстрого тестирования или если вы хотите избежать установки зависимостей в вашей системе.
    
    Dockerfile работает как:
    - **Изнутри репозитория** - использует локальные файлы (быстрее, включает локальные изменения)
    - **Автономно** - может быть собран из любого каталога (клонирует из GitHub)```bash
    # Build the Docker image (from any directory with Dockerfile)
    docker build -t litefuzz:latest .
    
    # Run litefuzz
    docker run --rm litefuzz:latest python3 litefuzz.py --help
    

    пример docker

    Встроенные входные данные из репозитория доступны по /litefuzz/input/tex - не нужно монтировать входные данные:```bash

    Create crashes directory

    mkdir -p crashes

    Run fuzzing with example input (1000 iterations with heap debugging)

    docker run --rm
    -v $(pwd)/crashes:/tmp/crashes
    litefuzz:latest
    python3 litefuzz.py -l -c "latex2rtf FUZZ" -i /litefuzz/input/tex -o /tmp/crashes -n 1000 -z

    root@kitploit:~
    Это позволит:
    - Фаззить latex2rtf с 1000 итераций
    - Использовать отладку кучи (флаг `-z`)
    - Сохранять сбои в каталог `./crashes` на вашем хосте
    - Использовать встроенные входные файлы из репозитория по пути `/litefuzz/input/tex`
    
    Если вы хотите использовать собственные входные файлы с хоста:```bash
    # Create input directory with your test files
    mkdir -p input/tex crashes
    # Add your test files to input/tex/
    cp your-test.tex input/tex/
    
    # Run fuzzing with your input files
    docker run --rm \
      -v $(pwd)/input:/litefuzz/input \
      -v $(pwd)/crashes:/tmp/crashes \
      litefuzz:latest \
      python3 litefuzz.py -l -c "latex2rtf FUZZ" -i /litefuzz/input/tex -o /tmp/crashes -n 1000 -z
    

    Важно: Монтируйте входную директорию только если у вас есть файлы для использования. Монтирование пустой директории input/ переопределит встроенные входные данные и вызовет ошибки.

    примечания

    • Встроенные входные данные доступны - Входные данные из репозитория находятся в /litefuzz/input/tex (монтирование не требуется)
    • Монтируйте тома с помощью -v, чтобы сохранять выводы о сбоях и получать доступ к входным файлам
    • Используйте --network host для сетевого фаззинга, чтобы получить доступ к службам localhost
    • Образ включает все зависимости и предварительно собранные тестовые приложения
    • Мутатор pyradamsa является опциональным и может быть недоступен (функция только для Linux)
    • Образ основан на Ubuntu 24.04
    • SYS_PTRACE НЕ требуется для стандартного фаззинга - анализ сбоев GDB работает без него
    • Для расширенной отладки (подключения к процессам) может потребоваться --cap-add=SYS_PTRACE

    тесты

    модульные тесты

    Существует несколько простых модульных и функциональных тестов для обеспечения некоторого покрытия Litefuzz, но они не предназначены для полноты.``` py2> pytest py3> python3 -m pytest

    root@kitploit:~
    Это запустит pytest для `test_litefuzz.py` в главном каталоге и выдаст результаты PASS/FAIL после завершения тестового запуска.
    
    #### тесты аварийных приложений
    Несколько примеров приложений с ошибками для тестирования возможностей обнаружения сбоев и триажа на разных платформах можно найти в папке `test`.
    
    - (a) разыменование нулевого указателя
    - (b) деление на ноль
    - (c) переполнение кучи
    - (d-gui) ошибка форматной строки в графическом интерфейсе
    - (e) переполнение буфера в клиенте
    - (f) переполнение буфера в сервере
    
    Они автоматически собираются во время установки, и вы можете запускать их в командной строке, в отладчике или использовать для тестирования в качестве целей фаззинга.
    
    **Если запускаете из командной строки Windows, проверьте `Просмотр событий -> Журналы Windows -> Приложение`, чтобы увидеть сбои.**
    
    ## опции
    Существует множество различных опций и функций для использования в различных сценариях целевых приложений. Ниже приводится краткое объяснение и несколько примеров, чтобы помочь понять, как их использовать.
    
    ### каталог сбоев
    `-o` позволяет указать каталог сбоев, отличный от стандартного, который находится в crashes/ в локальном пути. Это можно использовать для управления папками сбоев для нескольких одновременных сеансов фаззинга разных приложений.
    
    ### изолированный режим
    `-u` изолирует целевое приложение от обычного процесса фаззинга, например, от выполнения или многократной отправки пакетов и проверки на сбои. Вместо этого этот режим предназначен для интерактивных клиентских приложений, например Postman, где можно писать сценарии внутри приложения для повторения подключений для фаззинга клиента. Целевое приложение запускается внутри отладчика, фаззер приостанавливается, чтобы дать пользователю время нажать несколько кнопок или настроить конфигурацию целевого приложения для автоматического запуска, пользователь возобновляет работу, и теперь вы фаззите интерактивные сетевые клиенты.
    
    `litefuzz -lk -c "/snap/postman/140/usr/share/Postman/_Postman" -i input/http_responses -a tcp://localhost:8080 -u -n 100000 -z`
    
    Изолированный режим + обновление можно использовать для интерактивных клиентов, например, запустить FileZilla в отладчике, но постоянно нажимать F5, чтобы он переподключался к серверу для каждой новой итерации. Кроме того, фаззинг локальных CLI/GUI серверов запускается и выполняется только один раз внутри отладчика, чтобы сделать процесс немного более эффективным.
    
    `--key` также позволяет отправлять нажатия клавиш во время фаззинга интерактивных целей, например, фаззинг разбора ответов FTP-сервера в FileZilla путем отправки "обновить соединение" с помощью F5.
    
    `litefuzz -lk -c "filezilla" -a tcp://localhost:2121 -i input/ftp/filezilla -u -pp --key "F5" -n 100 -z glibc`
    
    примечание: изолированный режим был протестирован только на Linux и не поддерживается в Windows.
    
    ### тайм-аут
    `-x secs` позволяет указать тайм-аут. На практике это больше похоже на "примерное время между итерациями" для CLI-целей и фактический тайм-аут для GUI.
    
    ### мутаторы
    `--mutator N` указывает, какой мутатор использовать для фаззинга. Если опция не указана, для каждой итерации фаззинга случайным образом выбирается мутатор из списка доступных.
    
    Эти мутаторы были написаны с нуля (за исключением, конечно, Radamsa). И хотя они были тщательно протестированы и хорошо работали в течение миллионов итераций, время от времени в них могут быть скрытые ошибки, но в целом это не должно влиять на функциональность.```
    FLIP_MUTATOR = 1
    HIGHLOW_MUTATOR = 2
    INSERT_MUTATOR = 3
    REMOVE_MUTATOR = 4
    CARVE_MUTATOR = 5
    OVERWRITE_MUTATOR = 6
    RADAMSA_MUTATOR = 7
    

    note: мутатор Radamsa доступен только в Linux (+ Py3).

    ReportCrash

    --reportcrash является специфичным для Mac. Вместо использования системы сортировки по умолчанию, он указывает фаззеру отслеживать каталог ReportCrash на наличие отчетов о сбоях для целевого процесса. ReportCrash должен быть включен в OS X (по умолчанию включен, но обычно отключен для обычного фаззинга). Эта функция полезна в сценариях, когда мы не можем запустить цель в отладчике для генерации и сортировки собственных логов сбоев, но мы можем использовать эту базовую функциональность операционной системы для получения видимости.

    примечание: считайте эту функцию экспериментальной, поскольку мы полагаемся на несколько движущихся частей и компонентов, которые мы не контролируем напрямую в ядре системы MacOS. ReportCrash может в конечном итоге перестать правильно работать и отвечать после некоторого времени фаззинга, даже после попыток выгрузить и перезагрузить его, поэтому можно попробовать перезагрузить машину или сбросить снапшот, чтобы вернуть его в рабочее состояние.``` sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist sudo launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist

    root@kitploit:~
    ### пауза
    Нажмите ctrl+c, чтобы приостановить процесс фаззинга. Если хотите продолжить, выберите `y` или `n` для остановки. Эта функция работает нормально на разных платформах, но может быть менее надежной при фаззинге GUI-приложений.
    
    ### повторное использование сбоев для поиска вариантов
    
    `-e` включает режим повторного использования. Это означает, что если во время сеанса фаззинга были найдены сбои, они будут использованы в качестве входных данных для второго раунда фаззинга, что может помочь выявить ещё больше ошибок. Комбинируйте с `-z` для `-ez` ошибок! Да-дуф.
    
    Следующий пример демонстрирует фаззинг antiword с 100000 итераций, а затем запуск другого прогона с тем же количеством итераций и опциями для повторного использования сбоев в качестве входных данных, чтобы попытаться выявить ещё больше ошибок.
    
    `litefuzz -l -c "antiword FUZZ" -i docs -n 100000 -ez`
    
    (или можно вручную скопировать сбои в каталог входных данных, чтобы напрямую управлять итерациями для повторного прогона)
    
    `litefuzz -l -c "antiword FUZZ" -i docs-crashes -n 500000 -z`
    
    примечание: этот режим поддерживается только для локальных приложений.
    
    ### помощники отладки памяти
    
    `-z` включает Electric Fence (или отладку malloc glibc в качестве запасного варианта) на Linux, Guard Malloc на Mac и PageHeap на Windows. Также `-zz` можно использовать для отключения PageHeap после его включения для приложения. Если вы хотите просто включить/выключить его без запуска фаззера, просто опустите флаг `-i`. Во время установки Windows устанавливается [gsudo](https://github.com/gerardog/gsudo), который можно использовать для выполнения команд с повышенными привилегиями в командной строке, например, для включения PageHeap для целей.
    
    `sudo litefuzz -l -c "notepad FUZZ" -i texts/files -z`
    
    `sudo litefuzz -l -c "notepad FUZZ" -zz`
    
    На Linux можно выбрать конкретных помощников. Например, вместо использования glib malloc в качестве запасного варианта, его можно выбрать явно.
    
    `litefuzz -l -c "geany FUZZ" -i texts/codes -z glibc`
    
    Отладчик malloc Electric Fence по умолчанию отличный, но он работает не со всеми целями. Вы можете протестировать цель с EF, и если она упадёт, выберите помощник glibc вместо него.
    
    ### проверка вывода работающей цели
    
    Если вы проводите фаззинг локальных приложений на Linux или Mac, вы можете выполнить `cat /tmp/litefuzz/RUN_ID/fuzz.out`, чтобы проверить последний stdout цели. `RUN_ID` отображается в области информации STATS при запуске фаззинга. В случае возникновения сбоя stdout также сохраняется в каталоге сбоев как файл `.out`. Глобальный stdout/stderr также записывается в `/tmp/litefuzz/out` для целей отладки для всех целей фаззинга, за исключением изолированного или локального серверного режимов, где вывод отладчика идет в `/tmp/litefuzz/RUN_ID/out`.
    
    Winappdbg изначально не поддерживает захват stdout целей (насколько мне известно), поэтому этот артефакт недоступен на Windows.
    
    ### режимы клиента и сервера
    
    Если сервер может быть запущен локально простым выполнением бинарного файла (с некоторыми флагами и конфигурацией или без них), вы можете передать его командную строку с помощью `-c`, и он будет запущен, подвергнут фаззингу и завершен с новым запуском на каждой итерации. Идея здесь в том, чтобы обменять скорость на возможность избежать тех надоедливых ошибок, которые проявляются только после того, как память цели находится в "определенном состоянии", что может приводить к ложным срабатываниям. То же самое касается локального фаззинга сетевых клиентов. Он даже поддерживает TLS-соединения, генерируя сертификаты на лету (предоставление пользователем клиентского сертификата при фаззинге сервера, который этого требует, и фаззинг самих сертификатов — другие идеи здесь).
    
    Поддержка отладки не предоставляется Litefuzz при фаззинге удаленных клиентов и серверов, поэтому настройка на удаленном конце остается на усмотрение пользователя. Для серверов мы просто проверяем, перестал ли сервер отвечать, и отмечаем предыдущую полезную нагрузку как причину сбоя. Это хорошо работает для TCP-соединений, но для UDP-сервисов такой роскоши у нас нет, поэтому мониторинг удаленного сервера остается на усмотрение функции ReportCrash (доступна на Mac), запуска цели в отладчике (через локальный серверный режим или вручную) или создания пользовательских вспомогательных скриптов. Кроме того, некоторые серверы могут автоматически перезапускаться или иным образом восстанавливаться после сбоя, но могут быть признаки этого в журналах или других артефактах файловой системы, которые могут быть проанализированы вспомогательными скриптами, написанными для конкретной цели.
    
    ### примеры локальной сети
    
    `litefuzz -lk -c "wget http://localhost:8080" -a tcp://localhost:8080 -i input/http -z`
    
    `litefuzz -lk -c "curl -k https://localhost:8080" -a tcp://localhost:8080 -i input/http -z`
    
    `litefuzz -lk -c "curl -k https://localhost:8080" -a tcp://localhost:8080 -i input/http -o crashes/curl --tls -n 100000 -z`
    
    (откройте Wireshark и захватите ответ от 
    d, щелкните правой кнопкой мыши Simple Network Management Protocol -> Export Packet Bytes -> resp.bin)
    
    `litefuzz -lk -c "snmpwalk -v 2c -c public localhost:1616 1.3.6.1.2.1.1.1" -a udp://localhost:1616 -i input/snmp/resp.bin -n 1 -d -x 3`
    
    `litefuzz -ls -c "./sc_serv shoutcast.conf" -a localhost:8000 -i input/shouts -z`
    
    `litefuzz -ls -c "snmpd" -i input/snmp -a udp://localhost:161 -z`
    
    **краткие замечания**
    
    - UDP-сокеты могут вести себя немного странно на Mac + Py2, поэтому протестирован и поддерживается только Mac + Py3
    
    - Фаззинг клиентов локальной сети на Windows может быть глючным и на данный момент считается экспериментальным
    
    ### примеры удаленной сети
    
    Фаззинг удаленных клиентов и серверов немного сложнее: у нас нет локальной отладки, и мы полагаемся на обнаружение остановки взаимодействия между двумя сторонами по сети, чтобы зафиксировать сбои. Кроме того, поскольку мы предположительно не видим, что происходит на другом конце, фаззинг заканчивается, когда клиент или сервер перестает отвечать, и его необходимо перезапустить вручную после восстановления клиента или сервера до нормального (нерабочего) состояния, если только у пользователя нет скриптов на удаленной стороне для управления этим процессом.
    
    UDP еще больше усложняет ситуацию. Даже отправка тестового пакета, чтобы проверить, есть ли на UDP-порту прослушивающий сервис, не гарантирует ответа. Таким образом, можно удаленно фаззить сетевые клиенты и серверы, но приходится жертвовать видимостью.
    
    #### клиент
    
    `while :; do echo "user test\rpass test\rls\rbye\r" | ftp localhost 2121; sleep 1; done`
    
    `litefuzz -k -i input/ftp/test -a tcp://localhost:2121 -pp -n 100`
    
    Режим клиента здесь более капризный, потому что трудно определить, действительно ли клиент упал, поэтому он не переподключается, или же танец отправки/приема просто нарушен, поскольку разные клиенты могут обрабатывать соединения как им угодно. Также обратите внимание, что это всего лишь пример, и удаленный фаззинг клиентов по своей сути сложен и должен считаться несколько экспериментальным.
    
    #### сервер
    
    Плюсы и минусы фаззинга сервера локально или удаленно могут помочь вам принять решение о том, как подойти к цели, когда доступны оба варианта.
    
    В основном, фаззинг с сервером в отладчике будет медленнее, но вы сможете получить журналы сбоев с автоматической сортировкой, тогда как фаззинг сервера в удаленном режиме (даже с указанием на localhost) будет в среднем намного быстрее, но вы теряете высокую видимость и возможности сортировки на основе отладчика, но это даст вам время вручную перезапускать сервер после каждого сбоя, чтобы продолжать, пока он не завершится (только для TCP-серверов, функция не поддерживает UDP-серверы).
    
    **Shoutcast**
    
    `./sc_serv ...`
    
    `litefuzz -s -a localhost:8000 -i input/shouts -n 10000`
    
    **SSHesame**
    
    `sshesame`
    
    `litefuzz -s -a tcp://target:2022 -i input/ssh-server -p -n 1000000 -x 0.05`
    
    **FTP**
    
    `litefuzz -s -a tcp://target:21 -i input/ftp/req.txt -pp -n 1000`
    
    **DNS**
    
    `coredns -dns.port 10000`
    
    `litefuzz -ls -c "coredns -dns.port 10000" -a udp://localhost:10000 -i dns-req/1.bin -o crashes/coredns -n 10000`
    
    или
    
    `litefuzz -s -a udp://localhost:10000 -i dns-req/1.bin -o crashes/coredns -n 10000`
    
    ##### TLS
    
    `litefuzz -s -a tcp://hostname:8080 -i input/http --tls -n 10000````
    ...
    @ 48/10000 (1 crashes, 0 duplicates, ~7:13:18 remaining)
    
    [!] check target, sleeping for 60 seconds before attempting to continue fuzzing...
    

    note: default remote server mode delays between fuzzing iterations can make fuzzing sessions run reliably, but are pretty slow; this is the safe default, but one can use -x to set very fast timeouts between sessions (as shown above) if the target is OK parsing packets very quickly, unoffically nicknamed "2fast2furious" mode

    Для получения дополнительной информации о протоколах, основанных на сессиях (таких как FTP или SSH), см. раздел Несколько режимов.

    режимы множественного обмена данными

    -p предназначен для режима множественных двоичных данных, который позволяет подавать последовательные входные данные, например, каталог input/ssh, содержащий файлы с именами "1", "2", "3" и т.д. для каждого пакета в сессии для фаззинга. Это предназначено для обеспечения фаззинга реализаций двоичных протоколов, таких как SSH-клиент.

    ls input/ssh 1 2 3 4

    `xxd input/ssh/2 | head```` 00000000: 0000 041c 0a14 56ff 1297 dcf4 672d d5c9 ......V.....g-.. 00000010: d0ab a781 dfcb 0000 00e6 6375 7276 6532 ..........curve2 00000020: 3535 3139 2d73 6861 3235 362c 6375 7276 5519-sha256,curv 00000030: 6532 3535 3139 2d73 6861 3235 3640 6c69 e25519-sha256@li 00000040: 6273 7368 2e6f 7267 2c65 6364 682d 7368 bssh.org,ecdh-sh 00000050: 6132 2d6e 6973 7470 3235 362c 6563 6468 a2-nistp256,ecdh 00000060: 2d73 6861 322d 6e69 7374 7033 3834 2c65 -sha2-nistp384,e 00000070: 6364 682d 7368 6132 2d6e 6973 7470 3532 cdh-sha2-nistp52 00000080: 312c 6469 6666 6965 2d68 656c 6c6d 616e 1,diffie-hellman 00000090: 2d67 726f 7570 2d65 7863 6861 6e67 652d -group-exchange-

    root@kitploit:~
    Каждый пакет помещается в массив, случайный индекс изменяется и повторяется для фаззинга цели.
    
    `litefuzz -lk -c "ssh -T test@localhost -p 2222" -a tcp://localhost:2222 -i input/ssh -o crashes/ssh -p -n 250000 -z glibc`
    
    И вы можете проверить вывод цели для последней итерации.```
    cat /tmp/litefuzz/out
    kex_input_kexinit: discard proposal: string is too large
    ssh_dispatch_run_fatal: Connection to 127.0.0.1 port 2222: string is too large
    
    ... and others like
    
    ssh_dispatch_run_fatal: Connection to 127.0.0.1 port 2222: unknown or unsupported key type
    
    ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
    Host key verification failed.
    
    Bad packet length 1869636974.
    ssh_dispatch_run_fatal: Connection to 127.0.0.1 port 2222: message authentication code incorrect
    

    -pp указывает фаззеру проверять входные данные на наличие переносов строк и, если они обнаружены, обрабатывать их как несколько запросов/ответов. Это полезно для простого фаззинга сетевых протоколов для реализаций протоколов, основанных на строках, например, FTP-клиентов.``` cat input/ftp/test 220 ProFTPD Server (Debian) [::ffff:localhost] 331 Password required for user 230 User user logged in 215 UNIX Type: L8 221 Goodbye

    root@kitploit:~
    Фаззер разбивает каждую строку на собственный FTP-ответ, чтобы попытаться фаззить обработку сессии клиентом. Однако нет гарантии, что клиент будет «вести себя» или действовать так, чтобы сессия завершилась корректно, поэтому некоторые пробы и настройка тестовых сценариев сессии с одновременным запуском Wireshark могут помочь понять различия во взаимодействии между целями.
    
    `litefuzz -lk -c "ftp localhost 2121" -a tcp://localhost:2121 -i input/ftp -o crashes/ftp -n 100000 -pp -z`
    
    Это также можно комбинировать с *-u* для изоляции GUI-сетевых целей, таких как FileZilla.
    
    `litefuzz -lk -c "filezilla" -a tcp://localhost:2121 -i input/ftp.resp -n 100000 -u -pp -z glibc`
    
    ### прикрепление к процессу
    Если цель порождает новый процесс при подключении, можно указать имя процесса (или PID) для прикрепления после того, как соединение с сервером было установлено. Это удобно в случаях, когда, например, launchd прослушивает порт и запускает обрабатывающий процесс только после подключения клиента. Это одна из функций, которая несколько размывает границу между локальным и удалённым фаззингом, так как технически фаззер находится в удалённом режиме, но мы указываем целевой адрес как localhost и просим его прикрепиться к процессу.
    
    `./litefuzz.py -s -a tcp://localhost:8080 -i input/shareserv -p --attach ShareServ -x 1 -n 100000`
    
    примечание: в настоящее время эта функция поддерживается только на Mac (LLDB) и для сетевого фаззинга, хотя, если её реализовать, она должна работать и на Linux (GDB).
    
    ### артефакты краша
    Когда во время фаззинга происходит краш, он воспроизводится в отладчике для создания отладочных артефактов и информации для группировки. Информация варьируется от платформы к платформе, но в целом создаётся текстовый файл с бэктрейсом, информацией о регистрах, данными типа `!exploitable` (где доступно) и другой базовой информацией.
    
    **Дампы памяти** можно включить в Windows, передав `--memdump`, или отключить с помощью `--nomemdump` аналогично тому, как отладчиками malloc управляют через `-z` и `-zz` соответственно. Если включено, дамп также будет загружен в консольный отладчик (cdbg), а результат анализа краша `!analyze -v` будет захвачен в дополнительном логе анализа краша с дампом памяти. Winappdbg уже содержит анализ типа !exploitable, который мы получаем при первоначальном анализе краша, поэтому здесь мы выполняем только !analyze.
    
    `litefuzz -l -c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" --memdump`
    
    или чтобы отключить дампы памяти для приложения
    
    `litefuzz -l -c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" --nomemdump`
    
    В дополнение к автоматической сортировке крашей также создаются бинарные/строковые diffs (по необходимости) и stdout цели (зависит от платформы/цели), а также, конечно, repro-файлы.
    
    Для локального фаззинга артефакты обычно включают diffs, stdout (только linux/mac), repro-файл и лог краша с файлом информации.```
    $ ls crashes/latex
    PROBABLY_EXPLOITABLE_SIGSEGV_XXXX5556XXXX_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.diff
    PROBABLY_EXPLOITABLE_SIGSEGV_XXXX5556XXXX_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.diffs
    PROBABLY_EXPLOITABLE_SIGSEGV_XXXX5556XXXX_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.out
    PROBABLY_EXPLOITABLE_SIGSEGV_XXXX5556XXXX_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.tex
    PROBABLY_EXPLOITABLE_SIGSEGV_XXXX5556XXXX_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.txt
    

    В Windows, если дампы памяти включены, будет создан файл дампа, а дополнительная информация для анализа (триажа) будет записана в дополнительный журнал анализа сбоев.``` C:\litefuzz\crashes> dir app.exe.14299_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.dmp app.exe.14299_YYYYa39f3fd719e170234435a1185ee9e596c54e79092c72ef241eb7a41cYYYY.log ....

    root@kitploit:~
    Для удалённого фаззинга артефакты могут различаться в зависимости от выбранных опций, но часто включают diff-файлы, воспроизводимый файл и/или каталог с воспроизводимыми файлами (если входные данные представляют собой сеанс с несколькими пакетами), воспроизводимый результат предыдущей итерации фаззинга (чтобы не потерять ошибку, если на самом деле она является причиной сбоя, поскольку удалённый фаззинг имеет свои сложности) и журнал сбоя или файл с краткой информацией.```
    ls crashes/serverd
    REMOTE_SERVER_testbox.1_NNNN_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY
    REMOTE_SERVER_testbox.1_NNNN_PREV_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY
    UNKNOWN_XXXX2040YYYY_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY.diff
    UNKNOWN_XXXX2040YYYY_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY.diffs
    UNKNOWN_XXXX2040YYYY_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY.txt
    UNKNOWN_XXXX2040YYYY_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY.zz
    
    ls crashes/serverd/REMOTE_SERVER_localhost_NNNN_XXXX9c3f3660aaa76f70515f120298f581adfa9caa8dcaba0f25a2bc0b78YYYY
    REMOTE_SERVER_testbox.1_NNNN_1.zz	REMOTE_SERVER_localhost_NNNN_2.zz
    REMOTE_SERVER_testbox.1_NNNN_3.zz	REMOTE_SERVER_localhost_NNNN_4.zz
    

    golang

    По-видимому, когда бинарники Go аварийно завершаются, они могут не упасть с традиционным SIGSEGV, даже если в информации о панике указано именно это (проверено на Linux). Вместо этого они могут завершиться с кодом возврата 2. Так что, полагаю, мы будем использовать это :)

    Я уверен, что существует более подробное объяснение того, как это работает и какие есть граничные случаи, но можно использовать --golang, чтобы попытаться перехватывать сбои в бинарниках Go на Linux.

    litefuzz -l -c "evernote2md FUZZ" -i input/enex -o crashes/evernote2md --golang -n 100000

    repros

    Сбойные файлы сохраняются в каталоге crashes/ (или указанном флагом -o) вместе с диффами и информацией о сбое.

    -r и передача файла-репро (или каталога) с соответствующими командной строкой/адресом цели попытается воспроизвести сбой локально или удаленно.

    локальный пример

    litefuzz -l -c "latex2rtf FUZZ" -r crashes/latex2rtf/test.tex -z

    пример локальной сети

    ./litefuzz -ls -c "./sc_serv shoutcast.conf" -a tcp://localhost:8000 -r crashes/crash.raw

    пример удаленной сети

    litefuzz -s -a tcp://host:8000 -r crashes/crash.raw

    пример удаленной сети (несколько пакетов)

    litefuzz -s -a tcp://localhost:22 -r repro/dir/here

    remove file

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

    litefuzz -l -c "hdiutil makehybrid -o /tmp/test.iso -joliet -iso FUZZ" -i input/dmg --rmfile /tmp/test.iso -n 500000 -ez

    minimization

    Минимизация сбойных файлов — интересное занятие. Можно даже сделать выводы о том, как цель разбирает данные, сравнивая репро с минимизированной версией.

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

    Поддерживаются только локальные режимы, но это включает режимы локального клиента и сервера, так что вы можете минимизировать сетевые сбои, если мы можем отлаживать их локально.

    Например, этот запрос является исходным файлом-репро.``` GET /admin.cgi?pass=changeme&mode=debug&option=donotcrash HTTP/1.1 Host: localhost:8000 Connection: keep-alive Authorization: Basic YWRtaW46Y2hhbmdlbWU= Referer: http://localhost:8000/admin.cgi?mode=debug

    root@kitploit:~
    Взгляните на его минимизированную версию.```
    GET /admin.cgi?mode=debug&option=a
    Authorization:s YWRtaW46Y2hhbmdlbWU
    Referer:admin.cgi
    

    Теперь можно сделать некоторые предположения о том, что ищет цель и даже о первопричине сбоя.

    1. Запрос — самая важная часть
    2. option= может быть, вероятно, множеством разных вещей
    3. Заголовки Host и Connection не обязательны
    4. Разбор заголовка Authorization просто ищет второй токен и не заботится о том, явно ли указана Basic аутентификация
    5. Referer необходим, но только admin.cgi, а не хост или URL

    Что-нибудь ещё? Вот бонус: передавать правильный пароль не нужно, если учетные данные Authorization верны, и наоборот. Поскольку минимизация линейна и начинается с начала файла, продолжаясь до самого конца, мы получим лишь воспроизведение, которое аутентифицирует таким образом, всё ещё обнаруживая, что на самом деле есть два варианта!

    -mm включает режим supermin. Это медленнее, но он будет пытаться минимизировать снова и снова, пока не останется ненужных байтов для удаления.

    Ради интереса мы можем изменить воспроизведение и запустить его через supermin, чтобы получить максимально минимизированную версию.``` GET /admin.cgi?pass=changeme&mode=debug&option=a Referer:admin.cgi

    root@kitploit:~
    **примеры минимизации**
    
    `litefuzz -l -c "latex2rtf FUZZ" -m test.tex -z`
    
    `litefuzz -ls -c "./sc_serv shoutcast.conf" -a "tcp://localhost:8000" -m repro.http`
    
    **пример supermin**```
    litefuzz -l -c "latex2rtf FUZZ" -mm crashes/latex2rtf/test.tex -z
    ...
    [+] starting minimization
    
    @ 582/582 (1 new crashes, 1145 -> 582 bytes, ~0:00:00 remaining)  
    
    [+] reduced crash @ pc=55555556c141 -> pc=55555557c57d to 582 bytes
    
    [+] supermin activated, continuing...
    
    @ 299/299 (1 new crashes, 582 -> 300 bytes, ~0:00:00 remaining)
    
    [+] reduced crash @ pc=55555557c57d to 300 bytes
    ...
    [+] reduced crash @ pc=555555562170 to 17 bytes
    
    @ 17/17 (2 new crashes, 17 -> 17 bytes, ~0:00:00 remaining)
    
    [+] achieved maximum minimization @ 17 bytes (test.min.tex)
    
    [RESULTS]
    completed (17) iterations with 2 new crashes found
    

    команда

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

    litefuzz -l -c "/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter FUZZ" -i input/dmg --cmd "umount /Volumes/test.dir" --click -x 5 -n 100000 -ez

    примеры

    локальное приложение

    быстрый просмотр```

    litefuzz -l -c "latex2rtf FUZZ" -i input/tex -o crashes/latex2rtf -x 1 -n 100 --========================-- --======| litefuzz |======-- --========================--

    [STATS] run id: 3516 cmdline: latex2rtf FUZZ crash dir: crashes/latex2rtf input dir: input/tex inputs: 4 iterations: 100 mutator: random(mutators)

    @ 100/100 (1 crashes, 4 duplicates, ~0:00:00 remaining)

    [RESULTS]

    completed (100) iterations with (1) unique crashes and 4 dups

    check crashes/latex2rtf dir for more details

    root@kitploit:~
    #### перечисление файловых обработчиков в Ubuntu```
    $ cat /usr/share/applications/defaults.list
    [Default Applications]
    application/csv=libreoffice-calc.desktop
    application/excel=libreoffice-calc.desktop
    application/msexcel=libreoffice-calc.desktop
    application/msword=libreoffice-writer.desktop
    application/ogg=rhythmbox.desktop
    application/oxps=org.gnome.Evince.desktop
    application/postscript=org.gnome.Evince.desktop
    ....
    

    fuzz the local tcpdump's pcap parsing (Linux)

    litefuzz -l -c "tcpdump -r FUZZ" -i test-pcaps

    fuzz Evice document reader (Linux GUI)

    litefuzz -l -c "evince FUZZ" -i input/oxps -x 1 -n 10000

    fuzz antiword (oldie but good test app :) (Linux)

    litefuzz -l -c "antiword FUZZ" -i input/doc -ez

    примечание: вы можете (и, вероятно, стоит) передать -z для включения Electric Fence (или использовать функцию glibc в качестве запасного варианта) для проверки ошибок в куче

    перечисление обработчиков файлов в OS X

    swda может перечислять обработчики файлов в Mac.``` $ ./swda getUTIs | grep -Ev "No application set" com.adobe.encapsulated-postscript /System/Applications/Preview.app com.adobe.flash.video /System/Applications/QuickTime Player.app com.adobe.pdf /System/Applications/Preview.app com.adobe.photoshop-image /System/Applications/Preview.app ....

    root@kitploit:~
    **фаззинг gpg дешифрования через stdin с проверкой ошибок кучи** (Mac)
    
    `litefuzz -l -c "gpg --decrypt" -i test-gpg -o crashes-gpg -z`
    
    **фаззинг приложения Books** (Mac GUI)
    
    `litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i test-epub -t "/Users/test/Library/Containers/com.apple.iBooksX/Data" -x 8 -n 100000 -z`
    
    примечание: `-z` здесь включает [Guard Malloc](https://www.manpagez.com/man/3/libgmalloc/) проверку ошибок кучи для обнаружения скрытых ошибок повреждения кучи
    
    **примечание для Mac**
    
    Некоторые GUI-цели могут не завершаться после истечения времени ожидания каждой итерации и становиться неотзывчивыми. Чтобы смягчить это, вы можете запустить скрипт, похожий на этот, в другом терминале, чтобы периодически убивать их пакетно, уменьшая ручные усилия и мониторинг, иначе процесс фаззинга может быть затронут.```
    #!/bin/bash
    ps -Af | grep -ie "$1" | awk '{print $2}' | xargs kill -9
    

    [No content provided in the INPUT section. Please supply the Markdown text to translate.]``` $ while :; do ./pkill.sh "Process Name /Users/test"; sleep 360; done

    root@kitploit:~
    */Users/test* (пример первой части пути, где временные файлы передаются локальному GUI-приложению; FUZZ становится частью пути во время выполнения) был выбран, потому что требуется уникальная строка для завершения процессов, и если использовать только имя процесса, это приведет к завершению процесса фаззинга, так как он тоже содержит имя процесса.
    
    **перечисление обработчиков файлов в Windows**
    
    Использование скрипта [AssocQueryString](https://github.com/sec-tools/WindowsFileHandlerEnumeration/) с командой *assoc* позволяет сопоставлять расширения файлов с приложениями по умолчанию.```
    C:\> .\AssocQueryString.ps1
    ...
    .hlp :: C:\Windows\winhlp32.exe
    .hta :: C:\Windows\SysWOW64\mshta.exe
    .htm :: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
    .html :: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
    .icc :: C:\Windows\system32\colorcpl.exe
    .icm :: C:\Windows\system32\colorcpl.exe
    .imesx :: C:\Windows\system32\IME\SHARED\imesearch.exe
    .img :: C:\Windows\Explorer.exe
    .inf :: C:\Windows\system32\NOTEPAD.EXE
    .ini :: C:\Windows\system32\NOTEPAD.EXE
    .iso :: C:\Windows\Explorer.exe
    

    При фаззинге в Windows перед началом нового прогона может потребоваться включить PageHeap и Memory Dumps для улучшения опыта фаззинга (если ваша цель не против этого).

    sudo litefuzz -l -c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" -z

    sudo litefuzz -l -c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" --memdump

    Да, выполняйте эти команды с помощью (g)sudo в Windows, чтобы легко повысить привилегии до администратора из консоли и внести изменения в реестр, необходимые для включения функций.

    Это также иллюстрирует ещё один нюанс включения отладчиков malloc для целей: в Linux и Mac мы используем флаги среды выполнения, которые нужно передавать каждый раз для включения этой функции. В Windows мы изменяем реестр, поэтому после первого применения не нужно снова передавать -z или --memdump в командной строке фаззинга (если только не требуется отключить или повторно включить их).

    Фаззинг PuTTY (puttygen) (Windows)

    litefuzz -l -c "C:\Program Files (x86)\WinSCP\PuTTY\puttygen.exe FUZZ" -i input\ppk -x 0.5 -n 100000 -z

    Фаззинг Adobe Reader как в старые добрые времена (Windows GUI)

    litefuzz -l -c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe FUZZ" -i pdfs -x 3 -n 100000 -z

    (WinAppDbg поддерживает только Python 2, поэтому в Windows необходимо использовать py2)

    примечание: напоминаем, что вы можете включить PageHeap для целевого приложения через -z в командной строке с повышенными привилегиями или с помощью установленного sudo для пакета win32 gsudo, который был установлен во время настройки

    litefuzz -l -c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe FUZZ" -z

    клиент

    быстрый взгляд```

    litefuzz -lk -c "ssh -T test@localhost -p 2222" -a tcp://localhost:2222 -i input/ssh-cli -o crashes/ssh -p -n 250000 -z glibc --========================-- --======| litefuzz |======-- --========================--

    [STATS] run id: 9404 cmdline: ssh -T test@localhost -p 2222 address: tcp://localhost:2222 crash dir: crashes/ssh input dir: input/ssh-cli inputs: 4 iterations: 250000 mutator: random(mutators)

    @ 73/250000 (0 crashes, 0 duplicates, ~1 day, 0:21:01 remaining)^C

    resume? (y/n)> n Terminated ...

    cat /tmp/litefuzz/out padding error: need 57895 block 8 mod 7 ssh_dispatch_run_fatal: Connection to 127.0.0.1 port 2222: message authentication code incorrect

    root@kitploit:~
    #### локальный клиент
    
    **фаззинг SNMP-клиента на локальном хосте (Linux)**
    
    `litefuzz -lk -c "snmpwalk -v 2c -c public localhost:1616 1.3.6.1.2.1.1.1" -a udp://localhost:1616 -i input/snmp/resp.bin -n 1 -d -x 3`
    
    #### удаленный клиент
    
    **фаззинг удаленного FTP-клиента (Linux)**
    
    `while :; do echo "user test\rpass test\rls\rbye\r" | ftp localhost 2121; sleep 1; done`
    
    `litefuzz -k -i input/ftp/test -a tcp://localhost:2121 -n 100`
    
    примечание: в зависимости от цели, фаззинг клиента может потребовать прослушивания привилегированного порта (1-1024). В этом случае в Linux вы можете либо выполнить `setcap cap_net_bind_service=+ep` для интерпретатора Python, либо использовать sudo при запуске фаззера, на Mac просто используйте sudo, а на Windows вы можете запустить фаззер от имени администратора, чтобы избежать ошибок отказа в доступе.
    
    ### сервер
    
    #### быстрый взгляд```
    litefuzz -ls -c "./sc_serv shoutcast.conf" -a tcp://localhost:8000 -i input/shoutcast -o crashes/shoutcast -n 1000 -z
    --========================--
    --======| litefuzz |======--
    --========================--
    
    [STATS]
    run id:     4001
    cmdline:    ./sc_serv shoutcast.conf
    address:    tcp://localhost:8000
    crash dir:  crashes/shoutcast
    input dir:  input/shoutcast
    inputs:     3
    iterations: 1000
    mutator:    random(mutators)
    
    @ 1000/1000 (1 crashes, 7 duplicates, ~0:00:00 remaining)
    
    [RESULTS]
    > completed (1000) iterations with (1) unique crashes and 7 dups
    >> check crashes/shoutcast for more details
    

    локальный сервер

    фазинг локального сервера Shoutcast

    litefuzz -ls -c "./sc_serv shoutcast.conf" -a tcp://localhost:8000 -i input/shoutcast -o crashes/shoutcast -n 1000 -z

    удаленный сервер

    фазинг удаленного SMTP-сервера

    litefuzz -s -a tcp://10.0.0.11:25 -i input/smtp-req -pp -n 10000

    командная строка```

    usage: litefuzz.py [-h] [-l] [-k] [-s] [-c CMDLINE] [-i INPUTS] [-n ITERATIONS] [-x MAXTIME] [--mutator MUTATOR] [-a ADDRESS] [-o CRASHDIR] [-t TEMPDIR] [-f FUZZFILE] [-m MINFILE] [-mm SUPERMIN] [-r REPROFILE] [-e] [-p] [-pp] [-u] [--nofuzz] [--key KEY] [--click] [--tls] [--golang] [--attach ATTACH] [--cmd CMD] [--rmfile RMFILE] [--reportcrash REPORTCRASH] [--memdump] [--nomemdump] [-z [MALLOC]] [-zz] [-d]

    optional arguments: -h, --help show this help message and exit -l, --local target will be executed locally -k, --client target a network client -s, --server target a network server -c CMDLINE, --cmdline CMDLINE target command line -i INPUTS, --inputs INPUTS input directory or file -n ITERATIONS, --iterations ITERATIONS number of fuzzing iterations (default: 1) -x MAXTIME, --maxtime MAXTIME timeout for the run (default: 1) --mutator MUTATOR, --mutator MUTATOR timeout for the run (default: 0=random) -a ADDRESS, --address ADDRESS server address in the ip:port format -o CRASHDIR, --crashdir CRASHDIR specify the directory to output crashes (default: crashes) -t TEMPDIR, --tempdir TEMPDIR specify the directory to output runtime fuzzing artifacts (default: OS tmp + run dir) -f FUZZFILE, --fuzzfile FUZZFILE specify the path and filename to place the fuzzed file (default: OS tmp + run dir + fuzz_random.ext) -m MINFILE, --minfile MINFILE specify a crashing file to generate a minimized version of it (bonus: may also find variant bugs) -mm SUPERMIN, --supermin SUPERMIN loops minimize to grind on until no more bytes can be removed -r REPROFILE, --reprofile REPROFILE specify a crashing file or directory to replay on the target -e, --reuse enable second round fuzzing where any crashes found are reused as inputs -p, --multibin use multiple requests or responses as inputs for fuzzing simple binary network sessions -pp, --multistr use multiple requests or responses within input for fuzzing simple string-based network sessions -u, --insulate only execute the target once and inside a debugger (eg. interactive clients) --nofuzz, --nofuzz send input as-is without mutation (useful for debugging) --key KEY, --key KEY send a particular key every iteration for interactive targets (eg. F5 for refresh) --click, --click click the mouse (eg. position the cursor over target button to click beforehand) --tls, --tls enable TLS for network fuzzing --golang, --golang enable fuzzing of Golang binaries --attach ATTACH, --attach ATTACH attach to a local server process name (mac only) --cmd CMD, --cmd CMD execute this command after each fuzzing iteration (eg. umount /Volumes/test.dir) --rmfile RMFILE, --rmfile RMFILE remove this file after every fuzzing iteration (eg. target won't overwrite output file) --reportcrash REPORTCRASH, --reportcrash REPORTCRASH use ReportCrash to help catch crashes for a specified process name (mac only) --memdump, --memdump enable memory dumps (win32) --nomemdump, --nomemdump disable memory dumps (win32) -z [MALLOC], --malloc [MALLOC] enable malloc debug helpers (free bugs, but perf cost) -zz, --nomalloc disable malloc debug helpers (eg. pageheap) -d, --debug Turn on debug statements

    root@kitploit:~
    # трофеи
    
    Litefuzz выявил сбои в различных программных пакетах, таких как...
    
    * antiword
    * AppleScript (OS X)
    * ArangoDB VelocyPack
    * Avast authenticode-parser
    * Avast RetDec
    * BBC Audio Waveform
    * ColorSync (OS X)
    * Dynamsoft BarcodeReader
    * eot2ttf
    * evernote2md
    * faad2
    * Facebook's Origami Studio
    * FontForge
    * ForestDB
    * Gifsicle
    * GPUJPEG
    * GPAC Multimedia Framework
    * Google Draco
    * Google Quipper
    * GoPro GPR
    * GtkRadiant
    * IIPImage Server
    * John The Ripper
    * Kyoto Cabinet
    * latex2rtf
    * libMeshb
    * libembroidery
    * libsndfile
    * Lion Vector Graphics (lvg)
    * L-SMASH
    * mp3-decoder
    * MindNode
    * minimp4
    * MiniWeb Server
    * MLpack
    * Nvidia Data Center GPU Manager
    * Numbers (OS X)
    * OpenJPEG
    * OpenOrienteering Mapper
    * OSM Express
    * Pages (OS X)
    * PBRT-Parser
    * Pixar USD
    * Remote Apple Events (OS X)
    * Samsung rlottie
    * Samsung ThorVG
    * Shoutcast Server
    * Silo
    * syslog (OS X)
    * Tencent NCNN
    * TinyXML2
    * UEFITool
    * Ulfius Web Framework
    * zlib
    
    # Часто задаваемые вопросы
    
    ## Как возник этот проект?
    Фаззинг — это весело! И приятно делать проекты, которые придерживаются контрарного взгляда: фаззеры не всегда обязаны следовать современным или популярным подходам для достижения конечной цели — поиска ошибок. Будь вы близки к «железу», получаете покрытие кода по всем путям или просто оптимизируете под быстроту и гибкость, используя фундаментальный метод «опровержения предположений» и т.д. Как бы это ни проявлялось, получайте удовольствие.
    
    ## Активно ли поддерживается этот проект?
    Пожалуйста, не ожидайте активной поддержки или сопровождения проекта. Смело форкайте его, чтобы добавлять новые функции или исправлять ошибки и т.п. Возможно, даже делайте PR для небольших изменений, хотя не ждите ответов или помощи в устранении неполадок. Разработка в этом репозитории не предполагается активной.
    
    ## Как узнать, что фаззер работает хорошо, и проводили ли вы его сравнение с другими?
    Цель Litefuzz — находить ошибки на разных платформах. И он это делает. Честно говоря, возможность сравнивать его с фаззером X или фаззером Y просто не попала в приоритеты. Определённые компромиссы были приняты и осознаны с самого начала; подробнее см. в [#intro](https://github.com/sec-tools/litefuzz/blob/main/README.md#intro).
    
    ## Что бы вы изменили, если бы переписывали его сегодня?
    Он работает достаточно хорошо в текущем виде и был протестирован на множестве различных целей и сценариев. Тем не менее, он мог бы выиграть от стандартизации на более модульной и плагинной системе, где переключение между целями и платформами не требовало бы стольких дополнительных проверок в операционной части кода и т.п. Конечно, наличие более формальных тестов и системы развёртывания, которая тестировала бы его на поддерживаемых ОС, создало бы среду, упрощающую работу при изменениях в основных функциях. Из небольшого, но амбициозного проекта он довольно быстро вырос во что-то большее.
    
    ## Насколько стабилен Litefuzz?
    Командная строка, графический интерфейс, сетевой фаззинг (в основном на Linux и Mac), минимизация и т.п. были протестированы довольно тщательно и в целом должны быть надёжными. Некоторые более экзотические функции, такие как изолированный сетевой фаззинг с GUI, поддержка ReportCrash для Mac и некоторые другие нишевые возможности, следует считать экспериментальными.
    
    ## Есть ли неподдерживаемые сценарии для Litefuzz?
    Да, некоторые. Но большинство из них — либо редкие сценарии, которые глючат, требуют больше времени и исследований для «правильной» реализации, либо просто не работают по причинам, связанным с платформой. Многие из них явно завершаются сообщением «не поддерживается», когда вы пытаетесь запустить их с такими опциями, и некоторые оговорки были упомянуты в разделах выше при описании различных функций. К более тонким моментам относится режим воспроизведения для *изолированных* приложений — не поддерживается, а также ограниченное тестирование приложений Mac с использованием функции изоляции. Pyautogui, похоже, хорошо работает на Linux и Windows, но на Mac он оказался не очень надёжным, поэтому считайте его функционально неподдерживаемым. Фаззинг клиентской части Windows может быть немного менее надёжным, чем другие режимы на других платформах.
    
    Возможны некоторые пограничные случаи, но наиболее распространённые сценарии локального и сетевого фаззинга протестированы и работают. А, это прелести написания кроссплатформенных инструментов: приятно, но трудно заставить всё работать отлично всё время. В целом фаззинг на Linux/Mac кажется более стабильным и поддерживает больше функций, особенно в плане сетевого фаззинга, который тестировался гораздо больше, чем на платформе Windows, но были предприняты усилия, чтобы на Win32 были доступны хотя бы основы и пара дополнительных возможностей.
    
    Не стесняйтесь форкать этот фаззер и вносить улучшения, добавлять поддержку того, что пока не поддерживается, и т.п., или делать PR для мелких, но полезных вещей.
    
    ## Какие гарантии предоставляются для этого проекта или его кода?
    Абсолютно никаких. Но это довольно весело — фаззить и наблюдать, как он выдаёт вам ошибки.
    
    # автор / ссылки
    - [Jeremy Brown](https://github.com/sec-tools/litefuzz/blob/main/jbrown3264%5BNOSPAM%5Dgmail)
    - [Слайды для macOS Fuzzing](https://www.slideshare.net/JeremyBrown37/summer-of-fuzz-macos)
    
    Скачать инструмент