JSShell, una webshell multiusuario escrita en python/flask (servidor) y js/html (cliente)

JSShell de Daniel Abeles es una webshell multiusuario con una parte servidor escrita en Python con Flask y otra cliente en Javascript y HTML. Aunque inicialmente se creó para debuggear navegadores algo "exóticos", puede utilizarse para otros propósitos, siempre baja la responsabilidad y riesgo de cada uno.

Instalación

Se recomienda usar un entorno virtual y python 3.6. aunque versiones anteriores funcionan también bien:

pyenv virtualenv -p python3.6 venv
pyenv activate venv

virtualenv -p python3.6 venv
source venv/bin/activate


Para ambos:

pip install -r requirements.txt

Características

- Multicliente
- Soporta objetos DOM cyclic
- Scripts Pre flight
- Command queue
- Command Context

Ejecución

Creación de la base de datos:

python db_handler.py create

Iniciar el servidor (en background):

python run.py

Navegar con un navegador a la dirección del servidor:

http://dirección_ip:5000 (El puerto puede ser cambiado)

Abre el shell interactivo

python shell.py

Opcional : Scripts pre flight

Esos son los scripts que se ejecutarán en cada registro de un nuevo cliente. Utilízalos sabiamente :)

Uso

La interfaz de shell contiene varios comandos (puedes verlos usando el comando help).


Utilizando la cola (queue) de comandos, se pueden lanzar múltiples comandos y el cliente los ejecutará uno por uno. Todos los comandos se ejecutan utilizando un solo contexto, por lo que los comandos usados han de estar relacionados.

Para ver los comandos emitidos a un cliente, seleccione primero un cliente:

>> select 1

A continuación, ejecuta coms para ver todos los comandos del cliente:

(Client 1) >> coms

Para ver el comando completo y su salida completa (en el comando coms la salida se trunca para ajustarse a la pantalla):

(Client 1) >> com 1

Flujo de trabajo

Una vez finalizadas todas las instalaciones y la configuración, el  workflow de la aplicación es el siguiente:

- El cliente visita la página principal http: //dirección_ip:5000/
- Hace una solicitud de registro al servidor
- Espera órdenes
- Mientras tanto, en el servidor, ejecutas comandos usando el script shell.py
- El cliente está a la espera de los comandos del servidor, hasta que aparece un nuevo, lo lanza y lo ejecuta
- Una vez que haya terminado de ejecutar, enviará el resultado al servidor
- Ahora, usando el comando coms, podemos ver la salida del comando

Manejo de la base de datos

Se ha incluido un script que se usó para pruebas: db_handler.py. Incluye varias funcionas para manejar y probar la base de datos.

Proyecto: https://github.com/Den1al/JSShell

Comentarios