Metadata-Version: 2.1
Name: vger
Version: 0.1.1
Summary: An execution framework for Jupyter environments.
License: GPL-3.0-only
Author: Joseph Lucas
Author-email: joe@joetl.com
Requires-Python: >=3.11,<4.0
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: inquirer (>=3.2,<4.0)
Requires-Dist: requests (>=2.30,<3.0)
Requires-Dist: rich (>=13.7,<14.0)
Requires-Dist: urllib3 (>=2.1,<3.0)
Requires-Dist: websockets (>=12.0,<13.0)
Description-Content-Type: text/markdown

# V'ger

![](static/vger.jpg)

_"…On its journey back, it amassed so much knowledge, it achieved consciousness itself. It became a living thing."_

V'ger is an interactive command-line application for interacting with authenticated Jupyter instances.

## Usage

![](static/usage.gif)

## Initial Setup

Upon opening the application, users will be prompted for connection information.
1. Provide the full target host including the port and trailing slash (such as `http://172.0.0.1:8888/`).
2. Provide the token or password.

If prompt returns back to `hostname`, either the connection failed or there were no open notebook sessions running on that host.

## Commands

Once a connection is established, users drop into a nested set of menus.

The top level menu is:
- **Reset**: Configure a different host.
- **Enumerate**: Utilities to learn more about the host.
- **Exploit**: Utilities to perform direct action and manipulation of the host and artifacts.
- **Persist**: Utilities to establish persistence mechanisms.
- **Export**: Save output to a text file.
- **Quit**: No one likes quitters.

These menus contain the following functionality:
- **Inject**: Execute code in the context of the selected notebook. Code can be provided in a text editor or by specifying a local `.py` file. Either input is processed as a string and executed in runtime of the notebook. Output will be transparent to other notebook users by specifying `Noisy` or `Stealthy` when prompted. This selection will also dictate how much information is returned to the user about their execution.
- **Backdoor**: Launch a new JupyterLab instance open to `0.0.0.0`, with `allow-root` on a user-specified `port` with a user-specified `password`.
- **Check History**: See ipython commands recently run in the target notebook.
- **Run shell command**: Spawn a terminal, run the command, return the output, and delete the terminal.
- **List dir or get file**: List directories relative to the Jupyter directory. If you don't know, start with `/`.
- **Upload file**: Upload file from localhost to the target. Specify paths in the same format as List dir (relative to the Jupyter directory). Provide a full path including filename and extension.
- **Delete file**: Delete a file. Specify paths in the same format as List dir (relative to the Jupyter directory).
- **Find models**: Find models based on common file formats.
- **Download models**: Download discovered models.
- **Snoop**: Monitor notebook execution and results until timeout.
