All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add GitHub pages for Javadoc
- Add IActionProvider plugin interface
- Add plugin template
- Add Quartz Scheduler plugin
- Add Quartz Scheduler container
- Add
--objid
support for guess operation
- Change argparse4j dependency to https://github.com/qtc-de/argparse4j
- Change CHANGELOG.md version format (af1c52137277cacfe2ccc9c166fd68770ae3e213)
- Change option name
--generic-print
to--show-response
- Improve RMI class loading for plugin classes (454a9fd17653ce3bceba58a9ba989e344ee2c7c7)
- Improve
scan
action reliability (#62) - Refactor plugin system (README)
- IArgumentProvider now accepts an array of arguments instead of a string (a653e6367260ba46333e596d81da283a64fc80f1)
- Let
enum
action continue on RemoteObject retrieval errors - Change default ysoserial path to
~/ysoserial.jar
- Add support for dynamically created socket factory classes (docs)
- Add support for method guessing on spring-remoting endpoints (docs)
- Add a Spring Remoting example server (src, package)
- Changed the namespace of the project from
de.qtc
toeu.tneitzel
- Fix leak of local ysoserial path (e30f52c)
- The GenericPrint plugin is now included in rmg per default (b09e9a5)
- Stream corruption errors during method guessing are only displayed if
--verbose
is used
- Add pull request template (see #46)
- Fix many typos (see #46)
- Improve rmgs Java16+ compatibility (see #49)
- Add support for non default
serialVersionUID
values - Refactored test configurations
- Update dependencies
- Make rmg Java16+ compatible
- Updated snakeyaml dependency to
v1.32
- Changed the default ysoserial path to
/opt/ysoserial.jar
- Typofix
enmeration
->enumeration
- Add support for
ActivatableRef
(docs) - Add test cases for
ActivatableRef
- Update list of known endpoints (docs)
- Update outdated documentation
- The example server now provides a full working Activation System on port
1098
- Fix missing
--no-progress
option for some actions - Fix some typos inside the help menu
- Fix missing
--yso
option for some actions (resolves issue #26) - Improve the bash completion script
- Improve test cases
- SSRF payloads are now created using the SingleOpProtocol by default.
The
--stream-protocol
option can be used to create SSRF payloads using the Stream Protocol. - Updated test cases.
- Add TLS enumeration during
enum
action.
- Error messages are now printed to stderr.
- Bugfix: Error messages not being shown when using
--raw
- Bugfix: Uncaught
UnknownHostException
- Bugfix: Uncaught exception during
call
action when used with wrong argument count - Bugfix: Uncaught exception during
call
action when no signature was specified - Bugfix: Uncaught exception when the specified port number is out of range
- The SSRF server now logs in hexdump format
- Bugfix: Indentation issue within the SSRF server
- Added the
scan
action, that performs a simple portscan for RMI services. - Added the
roguejmx
action, that spawns a rogue JMX listener. - Added the
objid
action, that inspectsObjID
values. - Added the
known
action, that lists information about known RMI classes. - Added SSRF support in form of the
--ssrf
and--ssrf-response
options. - Added an SSRF example server (docker container).
- Added the
--scan-action
option that can be used during theenum
action to perform only the specified enumeration. - Added support for custom socket factories within remote-method-guesser's plugin system.
- Added a progress bar for the
guess
action. - Added
ObjID
andTCPEndpoint
enumeration during theenum
action.
- Changed the argument layout. remote-method-guesser now uses a modular argument layout based on argparse4j.
- Changed action layout. Previously existing actions like
method
,reg
,dgc
oract
are now bundled into theserial
action. - Changed target specification during codebase attacks. To target RMI default components,
you now use the
--component
option. - Changed codebase enumeration. Now also works for non registry ports.
- Changed the DGC enumeration to Security Manager enumeration.
- Added the
--verbose
option. The output of rmg is now less verbose, but you can get the full details by using this option. - Added the
--guess-duplicate
option. rmg-v3.3.0 no longer guesses methods on identical remote classes (only one instance will be used, the others are considered duplicates). If you want to guess them anyway, you can use this option. - Added documentation on method guessing
- Changed the underlying implementation of method guessing. The new implementation is
way faster an reduces the runtime of the
guess
action up to a factor of8
. The new implementation is described in more detail here: method guessing - Changed the wordlist format slightly. The overall format stays the same, but the meaning of one field was changed. Old wordlists (in optimized format) should be updated.
- Changed option implementation. Options are now handled by an Enum. Although this makes only a difference internally.
- Some small bug fixes
- Add
call
operation to regularly call remote methods- Can be used with bound names (
--bound-name
) - And also with ObjID values (
--objid
)
- Can be used with bound names (
- Add plugin system to allow custom gadgets, call arguments and return handlers
- Add some example plugins and a build script
- Add tests based on tricot
- Global refactoring - Renamed and moved many classes and functions
- The calling convention changed slightly for some actions
- The
guess
operation now also lists methods for known remote objects- These are obtained via reflection, not by guessing
- You can force guessing anyway by using
--force-guessing
- Method arguments are now marshalled correctly (previously, always writeObject was used)
- The default wordlist and template files are now contained within the rmg JAR file
- Fixed bug in
RMIWhisperer.java
that lead to nullpointer exceptions during themethod
operation. The bugfix is basically a workaround for a more general problem that will be resolved in versionv3.2.0
.
New Enumeration Techniques
- Add JEP290 enumeration during
enum
operation - Add JEP290 bypass enumeration during
enum
action - Add String marshalling enumeration during
enum
operation - Add
useCodebaseOnly
enumeration duringenum
operation - Add localhost bypass (CVE-2019-2684) enumeration during
enum
operation - Add DGC enumeration during
enum
action - Add Activator enumeration during
enum
action
New Actions
- Add support for deserialization attacks on Activator, DGC and registry objects
- Add support for codebase attacks on Activator, DGC and registry objects
- Add support for deserialization filter bypass (credits: @_tint0 & @h0ng10)
- Add
bind
,rebind
andunbind
operations- Add localhost-bypass option for
bind
,rebind
andunbind
operations (CVE-2019-2684)
- Add localhost-bypass option for
- Add
listen
operation to spawn a JRMP listener (based on ysoserial)
Other
- Global refactoring - Some action names changed
- Add
--stack-trace
options for easier debugging - Add improved error and exception handling
- Add options to use different registry / DGC methods during enum action
- Add documentation to the source code
- Add some other RMI related documentation
- Removed support for JSON output
rmg
- Add support for guessing without invoking (using invalid argument types)
- Add server-side codebase detection
- Add codebase operation for remote-codebase attacks
- Add support for legacy RMI stubs
- Add colored output
Docker
- Add additional remote method to example server
- Add non-ssl registry on port 9010
- Add legacy RMI service using static stubs
- Add server-codebase and remote-codebase support
- Add improved logging
- Remote classes are now generated dynamically with Javassist
- Different operations are now invoked using actions, no longer command line switches
- The docker container compiles the example-server now during build time
- Add SSL support (for registry and remote objects)
- Add automatic redirection feature
- Add security checks for bound names
- Add new templates
- Add new example server (available as docker source and GitHub Packages)
- Changed the sample template. Now supports:
- SSL
- Automatic redirection
- void return types
- Samples are no longer compiled by default
- Change folder structure created by guessing process
- Remove old example server
- Add Maven CI
- Add additional templates
- Add bash completion script
- Add support for primitive types in interfaces
Initial release :)