
Ferramenta de enumeração e ataque JMX.
beanshooter é uma ferramenta de enumeração e ataque JMX, que ajuda a identificar vulnerabilidades comuns em endpoints JMX.
beanshooter é um projeto maven e a instalação deve ser direta. Com o maven instalado, basta executar os seguintes comandos para criar um arquivo .jar executável:```console
[qtc@devbox ~]$ git clone https://github.com/qtc-de/beanshooter
[qtc@devbox ~]$ cd beanshooter
[qtc@devbox ~]$ mvn package
Você também pode usar pacotes pré-construídos que são criados para [cada release](https://github.com/qtc-de/beanshooter/releases).
Pacotes pré-construídos para o branch de desenvolvimento são criados automaticamente e podem ser encontrados na página
de *GitHub* [actions page](https://github.com/qtc-de/beanshooter/actions). Também uma imagem docker pré-construída para executar *beanshooter*
[está disponível](#docker-image).
*beanshooter* não inclui *ysoserial* como dependência. Para habilitar o suporte a *ysoserial*, você precisa especificar o caminho
para o seu arquivo ``ysoserial.jar`` como argumento adicional (ex.: ``--yso /opt/ysoserial.jar``) ou alterar o
caminho padrão dentro do [arquivo de configuração beanshooter](https://github.com/qtc-de/beanshooter/blob/master/beanshooter/config.properties) antes de construir o projeto.
*beanshooter* suporta autocompletar para *bash*. Para aproveitar o autocompletar, você precisa ter o projeto
[completion-helpers](https://github.com/qtc-de/completion-helpers) instalado. Se configurado corretamente, basta
copiar o [script de autocompletar](https://github.com/qtc-de/beanshooter/blob/master/resources/bash_completion.d/beanshooter) para sua pasta ``~/.bash_completion.d`` para habilitar
o autocompletar.```console
[qtc@devbox ~]$ cp resources/bash_completion.d/beanshooter ~/bash_completion.d/
As diferentes operações do beanshooter podem ser divididas em dois grupos: operações básicas e operações MBean. Enquanto as operações básicas são usadas para realizar operações gerais em um endpoint JMX, as operações MBean têm como alvo um MBean específico para interagir. Para mais detalhes, consulte os exemplos de uso nas seções seguintes.```console [qtc@devbox ~]$ beanshooter -h usage: beanshooter [-h] ...
beanshooter v3.0.0 - a JMX enumeration and attacking tool
positional arguments:
Basic Operations attr set or get MBean attributes brute bruteforce JMX credentials deploy deploys the specified MBean on the JMX server enum enumerate the JMX service for common vulnerabilities info display method and attribute information on an MBean invoke invoke the specified method on the specified MBean list list available MBEans on the remote MBean server serial perform a deserialization attack stager start a stager server to deliver MBeans undeploy undeploys the specified MBEAN from the JMX server
MBean Operations diagnostic Diagnostic Command MBean hotspot HotSpot Diagnostic MBean mlet default JMX bean that can be used to load additional beans dynamically recorder jfr Flight Recorder MBean tomcat tomcat MemoryUserDatabaseMBean used for user management tonka general purpose bean for executing commands and uploading or download files
named arguments: -h, --help show this help message and exit
### Operações Básicas
---
Operações básicas são operações de propósito geral que podem ser executadas em um serviço JMX. Geralmente são
operações que não têm como alvo um MBean específico ou que têm como alvo um MBean sem suporte interno do beanshooter.
#### Attr
A ação `attr` pode ser usada para obter ou definir atributos em um *MBean* especificado. Para obter os atributos disponíveis,
a ação `info` deve ser usada:```console
[qtc@devbox ~]$ beanshooter info 172.17.0.2 9010
...
[+] MBean Class: sun.management.MemoryImpl
[+] ObjectName: java.lang:type=Memory
[+]
[+] Attributes:
[+] Verbose (type: boolean , writable: true)
[+] ObjectPendingFinalizationCount (type: int , writable: false)
[+] HeapMemoryUsage (type: javax.management.openmbean.CompositeData , writable: false)
[+] NonHeapMemoryUsage (type: javax.management.openmbean.CompositeData , writable: false)
[+] ObjectName (type: javax.management.ObjectName , writable: false)
[+]
[+] Operations:
[+] void gc()
Quando apenas o nome do atributo é especificado, o beanshooter obtém e exibe o valor atual do atributo:```console [qtc@devbox ~]$ beanshooter attr 172.17.0.2 9010 java.lang:type=Memory Verbose false
Quando um valor adicional é especificado, o *beanshooter* tenta definir o atributo correspondente. Para atributos que tenham um tipo diferente de *String*, especificar o tipo do atributo usando a opção `--type` é obrigatório:```console
[qtc@devbox ~]$ beanshooter attr 172.17.0.2 9010 java.lang:type=Memory Verbose true --type boolean
[qtc@devbox ~]$ beanshooter attr 172.17.0.2 9010 java.lang:type=Memory Verbose
true