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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/justicerage/ffm
Повышение привилегийЛатеральное перемещениеЭксфильтрация данныхСбор информацииПост-эксплуатацияТестирование на ПроникновениеКомандование и УправлениеУтилиты и фреймворкиRed Teaming
GitHubjusticerage/ffm

FFM

Режим борьбы за свободу: открытый хакерский каркас

349474 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

Режим Свободной Борьбы (FFM)

FFM — это хакерская упряжь, которую можно использовать во время пост-эксплуатационной фазы red-team задания. Идея инструмента была взята из конференции 2007 года от @thegrugq.

Она была представлена на SSTIC 2018 (видео), а сопутствующие слайды доступны по этой ссылке. Если вы не знакомы с этим классом инструментов, настоятельно рекомендуется ознакомиться с ними, чтобы понять, каково назначение хакерской упряжи. Все комментарии включены в слайды.

Этот проект распространяется на условиях лицензии GPL v3.

Документация

Основная документация находится в этом README и в модулях команд в commands/. Ссылки на доклад на SSTIC, приведённые выше, остаются лучшим высокоуровневым введением в то, как предполагается использовать упряжь. Дополнительные материалы с пошаговыми инструкциями доступны по адресу:

  • https://ice-wzl.gitbook.io/hacknetics/c2-frameworks/ffm-documentation

Авторы

  • ice-wzl внёс вклад в виде команд, документации и рефакторинга на протяжении истории проекта.

Установка

Установка через Docker

  • Учитывая разнообразие современных терминальных приглашений, мы настоятельно рекомендуем использовать docker с этим инструментом.
  • Использование Dockerfile из этого репозитория значительно сократит количество возможных ошибок.
  • Использование контейнера для взаимодействия с удалёнными хостами также более безопасно. Если вы будете скомпрометированы при взаимодействии с удалённым хостом, злоумышленник окажется в вашем контейнере, а не на вашем реальном хосте. Давайте всё же надеяться, что этого не произойдёт.
  • Убедитесь, что на вашей локальной системе установлен Docker.
root@kitploit:~
git clone https://github.com/JusticeRage/FFM.git
cd /FFM

docker build Docker_Install/ -t ffm:ffm

docker image list 
REPOSITORY                TAG         IMAGE ID      CREATED        SIZE
localhost/ffm             ffm         fb6dd17e3b91  9 minutes ago  614 MB
docker.io/library/ubuntu  22.04       3b418d7b466a  2 weeks ago    80.3 MB

#run your new container and drop into a /bin/bash prompt as root
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
  • Оказавшись в контейнере, задайте passwd для root и neo.
  • su neo и теперь всё готово.

Установка без Docker

  • Не рекомендуется
root@kitploit:~
 git clone https://github.com/JusticeRage/FFM.git
 cd /FFM
 pip install -r requirements.txt

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

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

Это инструментарий оболочки. Запустите ./ffm.py, чтобы активировать его, и вы сможете начать работу немедленно. Команды распределены по небольшим модулям в commands/, причём commands/command_manager.py отвечает за обнаружение и регистрацию. Основные группы: перечисление, справка, скрытность, передача и выполнение.

Есть две команды, которые вам нужно знать:

  • Введите !list, чтобы отобразить все команды, предоставляемые упряжью.
  • Введите !list tags, чтобы увидеть различные теги, по которым можно группировать команды.
root@kitploit:~
!list tags
List of commands available:
	 enumeration
	 execution
	 help
	 stealth
	 transfer
  • Теперь вы можете ввести !list enumeration (или один из других тегов), чтобы увидеть команды, относящиеся к этой категории.
root@kitploit:~
!list enumeration
List of commands available:
	!backup-hunter: Hunts for backup files
	!info: Returns CPU(s), Architecture, Memory, and Kernel Verison for the current machine.
	!log: Toggles logging the harness' input and output to a file.
	!mtime: Returns files modified in the last X minutes
	!os: Prints the distribution of the current machine.
	!db-hunter: Hunts for .sqlite, .sqlite3, and .db files
	!sshkeys: Hunts for Private and Public SSH keys on the current machine.
	!suid: Finds SUID, SGID binaries on the current machine.
	--snip--

  • Нажмите SHIFT+TAB, чтобы выполнить автодополнение на локальной машине. Это может быть полезно, если вы подключены по SSH к удалённому компьютеру, но вам нужно обратиться к файлу, который находится на вашей локальной машине.

Список возможностей

Эта хакерская упряжь предоставляет несколько функций, описанных ниже. По мере их описания будет также представлена философия дизайна инструмента. Не ожидается, что все команды, реализованные в FFM, подойдут вам. У каждого свой подход к работе, и настройка упряжи под ваши конкретные потребности, скорее всего, потребует от вас изменения некоторого кода и/или написания нескольких плагинов. Было приложено много усилий, чтобы сделать эту задачу безболезненной.

Команды

Команды перечисления

  • !os — чрезвычайно простая команда, которая просто выполняет cat /etc/*release*, чтобы показать, какая ОС установлена на текущей машине. Вероятно, она наиболее ценна как демонстрация того, что в контексте хакерской упряжи вы можете определять псевдонимы, которые работают на разных машинах. Подключитесь по SSH к любому компьютеру, введите !os, и команда будет выполнена. Команды перечисления находятся в commands/enumeration_commands.py, команды справки — в commands/help_commands.py, а команды, связанные со скрытностью, распределены по commands/stealth_commands.py, commands/notty_sudo.py и commands/log_control.py.
  • !backup-hunter Ищет файлы резервных копий.
  • !info Возвращает информацию о CPU, архитектуре, памяти и версии ядра для текущей машины.
  • !log Включает/выключает журналирование ввода и вывода упряжи в файл. Реализовано в commands/log_control.py.

Команды передачи

  • Команды, которые помогают загружать и выгружать файлы, довольно прямолинейны.
  • !download [remote file] [local path] получает файл с удалённой машины и копирует его локально через терминал. Эта команда немного сложнее, так как требуется более строгая проверка ошибок, но это ещё одна команда, которую вы легко можете прочитать, чтобы начать работу. Она находится в commands/download_file.py. Обратите внимание, что для её корректной работы требуется xxd или od на удалённой машине.
  • !download-dir [remote directory] [local destination] передаёт tar-архив удалённой директории через терминал и извлекает его локально, не затрагивая удалённую файловую систему. Находится в commands/download_directory.py. Требует tar и base64 на удалённой машине, а также использует gzip, если он доступен.
  • !upload [local file] [remote path] работает точно так же, как предыдущая команда, за исключением того, что локальный файл помещается на удалённую машину. Находится в commands/upload_file.py.

Команды выполнения

  • !sh [local script] Запускает shell-скрипт с локальной машины в памяти. Находится в commands/remote_script.py.
  • !py [local script] выполняет локальный Python-скрипт на удалённой машине, причём полностью в памяти. Находится в commands/remote_script.py. Загляните в мой другой репозиторий для скриптов, которые вы, возможно, захотите использовать. Эта команда использует многострочный синтаксис с <<, что означает, что псевдо-оболочки, не поддерживающие его (хорошим примером является Weevely), сильно сломают эту команду.
  • !py3 [local script] делает то же самое, но для систем с python3. Использует тот же модуль commands/remote_script.py.
  • !elf [local script] Запускает исполняемый файл с локальной машины в памяти, используя любой совместимый интерпретатор Python, доступный на удалённой машине. Находится в commands/remote_elf.py.

Команды скрытности

  • Я полностью осознаю, что эти два модуля являются противоположностью "скрытности", но это то место, где они сейчас находятся, пока не будет разработана альтернативная локация. Скорее всего, эта категория скрытности будет содержать команды, которые помогут вам лучше сливаться, в дополнение к тем командам, которые могут вас выдать.
  • !pty порождает TTY, что в большинстве случаев нежелательно, так как это обычно оставляет криминалистические следы. Однако некоторые команды (sudo) или эксплойты требуют TTY для работы, поэтому это предоставляется для удобства. UNSET HISTFILE HISTFILESIZE HISTSIZE PROMPT_COMMAND передаётся в него сразу после порождения, вместе с export TERM=xterm.
  • !sudo Вызывает sudo без TTY. Находится в commands/notty_sudo.py.

Плагины можно дополнительно настроить, отредактировав ffm.conf.

Процессоры

Концептуально команды (как описано выше) используются для генерации некоторого bash-кода, который передаётся оболочке. Они могут выполнять более сложные операции, захватывая вывод оболочки и генерируя дополнительные инструкции на основе того, что было возвращено. Процессоры немного отличаются: они скорее используются для перезаписи данных, циркулирующих между пользователем и базовым bash-процессом. Хотя любой процессор можно переписать как команду, казалось более чистым разделить их. Входные процессоры работают с тем, что вводит пользователь после нажатия клавиши ENTER, а выходные процессоры могут модифицировать всё, что возвращает оболочка.

  • Хороший пример процессора можно найти в processors/ssh_command_line.py. Он просто добавляет опцию -T к любой команде SSH, которую видит, если она отсутствует. Обязательно посмотрите на его простой код, если вы заинтересованы в написании своего процессора.
  • Другой входной процессор в фреймворке, processors/assert_torify.py, содержит чёрный список сетевых команд (ssh, nc) и блокирует их, если они не кажутся проксированными через такой инструмент, как torify. Упряжь делает всё возможное, чтобы беспокоить пользователя только в том случае, если команда выполняется на локальной машине. Очевидно, это не должно быть вашей единственной защитой от утечки вашего домашнего IP-адреса.
  • Наконец, processors/sample_output_processor.py — это очень простой выходной процессор, который выделяет красным цветом любое вхождение слова "password". Поскольку он совершенно бесполезен, он не включён в фреймворк, но вы всё равно можете использовать его как отправную точку, если хотите сделать что-то более сложное.

Известные проблемы

CTRL+R ещё не реализован, и мы все по нему скучаем.

Более проблематично то, что фреймворк время от времени зависает. В 99% случаев это происходит, когда он не может обнаружить, что запущенная им команда завершила работу. Обычно это означает, что приглашение командной строки машины, на которую вы вошли, не было распознано как таковое. В этом случае вы можете попробовать улучшить регулярное выражение в самом начале файла ffm.py или войти на ту же машину с помощью ssh -T, так как там больше не будет проблемного приглашения. По умолчанию FFM перестаёт пытаться читать вывод команды через 5 минут (некоторые плагины могут реализовывать другие таймауты); поэтому, если фреймворк завис, вам придётся подождать, пока не увидите сообщение об ошибке (хотя если базовый процесс всё ещё выполняется, вы всё равно не сможете вводить команды).

Заключительное заявление

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

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

Сделать

  • Модуль шифрования одного файла

Контакты

Скачать инструмент
  • !mtime Возвращает файлы, изменённые за последние X минут. Например, !mtime 5 покажет все файлы на локальной машине (которые вы имеете право видеть), изменённые за последние 5 минут.
  • !db-hunter Ищет файлы .sqlite, .sqlite3, .db и другие файлы баз данных.
  • !sshkeys Ищет приватные и публичные ключи SSH на текущей машине.
  • !suid Находит SUID, SGID-бинарники на текущей машине.
  • !strange-dirs Проверяет устройство, начиная с указанного пользователем пути, на наличие странных директорий на хосте.
  • !sudo-version Проверяет уязвимую версию sudo.
  • !vm Проверяет, является ли устройство виртуальной машиной.