Weather report. Cloudy with a chance of shells!
Early release. Follow me on Twitter to stay updated on Redcloud's development
Redcloud is a powerful and user-friendly toolbox for deploying a fully-featured Red Team Infrastructure using Docker. Use and manage it with its polished web-interface.
Ideal for your penetration tests, shooting range, red teaming and bug-bounties!
Self-host your attack infrastructure painlessly, deploy your very own live, scalable and resilient offensive infrastructure in a matter of minutes.
redcloud.py deploys a Portainer stack, pre-loaded with many tool templates for your offensive engagements, powered by Docker. Once deployed, use the web-interface to manage it. Easy remote deploy to your target server using system
ssh or even
docker-machine if that's your thing.
🚀Ever wanted to spin up a Kali in a cloud with just a few clicks?
📦Have clean silos between your tools, technics and stages?
🚑Monitor the health of your scans and C2?
🔥Skip those sysadmin tasks for setting up a phishing campaign and get pwning faster?
😈Curious how you would build the ideal attack infrastructure?
Use the Web UI to monitor, manage, and interact with each container. Use the snappy web terminal just as you would with yours. Create volumes, networks and port forwards using Portainer's simple UI.
Use all your favorite tools and technics with the power of data-center-grade internet.
📖Table of content
- Quick Start
- Tested deployment candidates
- Contribution guideline
- Hosting Redcloud
- Inspirations & Shout-outs
- Deploy Redcloud locally and remotely using the builtin SSH functions, and even docker-machine
- Deploy Metasploit, Empire, GoPhish, a fully stacked Kali, and many other security tools using Portainer's sleek and responsive web-interface
- Comes with an NGINX reverse-proxy pre-configured for Metasploit and Empire reverse callbacks (finishing implementation)
- Monitor and manage your infrastructure with just a few clicks
- Use the cloud's full potential with Docker's underlying power. Easily manage a single server or a full swarm just the same. Distribute the load seamlessly
- Painless network management and volume sharing
- Deploy redirections, socks or Tor proxy for all your tools. Spawn your maze, Docker's internal network capabilities takes care of the complicated stuff
- User and password management
- Comes with training environments. Build your own shooting range
- Overall very comfy
# If deploying using ssh > cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys' # If deploying using docker-machine, and using a machine named "default" > eval (docker-machine env default)
# Use python3 if default python version is 2.x > git clone https://github.com/khast3x/redcloud.git > cd redcloud > python --version > python redcloud.py
PyYAML to print the list of available templates. It's installed by default on most systems.
If not, simply run:
# Use pip3 if default python version is 2.x > pip install -r requirements
The Redcloud menu offers 3 different deployment methods:
- Remotely, using ssh. Requires having your public key in your target's
- Remotely, using docker-machine. Run the
eval (docker-machine env deploy_target)line to pre-load your env with your docker-machine, and run
redcloud.py. Redcloud should automatically detect your docker-machine, and highlight menu items relevant to a docker-machine deploy
Redcloud deployment workflow is as follows:
- Clone/Download Redcloud repository
- Choose deployment candidate from menu (local, ssh, docker-machine)
- checks for
docker-composeon target machine
- deploys the web stack on target using
- checks for
- Once deploy is complete,
redcloud.pywill output the URL. Head over to https://your-deploy-machine-ip/portainer.
- Set username/password from the web-interface
- Select the endpoint (the only one on the list)
- Access the templates using the "App Templates" menu item on the left
App Template deployment is as follows:
- Choose template
- If you wish to add additional options, select "+ Show advanced options"
- Add port mapping, networking options, and volume mapping as you see fit
- Select "Deploy the container"
- Portainer will launch the container. It may take a few minutes if it needs to fetch the image. If your server is in a data-center, this step will be very fast.
- Container should be running
- Portainer will redirect you to the "Containers" page. From there, you can:
- View live container logs
- Inspect container details (
- View live container stats (memory/cpu/network/processes)
- Use a web shell to interact with your container
- Depending on the App Template, uses either
sh. Choose accordingly from the drop-down menu
redcloud.py: Starts/Stops the Web interface and App Templates, using Docker and Portainer
portainer-app: The main container with the Portainer web-interface
portainer-proxy: NGINX reverse-proxy container to the web-interface. Can proxy Metasploit and Empire reverse shells. Auto-generates an https certificate
nginx-templates: NGINX server container that feeds the App Templates. Lives in a "inside" network
redcloud_cert_gen_1: The omgwtfssl container that generates the SSL certificates using best practices
- https://your-server-ip/portainer: Redcloud Web interface once deployed
Redcloud makes it easy to play around with networks and containers.
You can create additional networks with different drivers, and attach your containers as you see fit. Redcloud comes with 2 networks,
You can share data between containers by sharing volumes. Redcloud comes with 2 volumes:
certs: Container with the certificates generated by omgwtfssl
files: Standard file sharing volume. For now, the files are available when browsing https://your-server-ip/, and are served by the NGINX reverse-proxy container directly from the
filesvolume. A typical use-case is to attach the volume to a Metasploit container, generate your payload directly into the
filesvolume. You can now serve your fresh payload directly through the NGINX file server.
Accessing containers from the terminal
If you wish to stay in your terminal to work with the deployed containers, its very easy using Docker. Keep these things in mind:
- Most containers have
bash, but some use
- All Redcloud App Templates container names start with
red_, such as
- With Docker, you can either use
attachto interact with a container
execis preferred as it creates a new process
attachlands you straight on the running process, potentially killing your running container
- If running Redcloud:
- Locally or using
docker-machine, simply type these in your local shell
ssh, first ssh into your deployment target to run the following commands
- Locally or using
To start interacting with the desired deployed container:
> docker exec -it red_container-name /bin/bash root@70a819ef0e87:/#
If you see the following message, it means
bash is not installed. In that case simply replace
> docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown > docker exec -it red_container-name /bin/sh #
docker attach, simply run:
> docker attach red_container-name
attach, the container needs to be started in
interactive mode, so as to land in a interactive shell.
Point your browser to
Please refer to the
files volume for more information.
Redcloud generates a new unsigned SSL certificate when deploying.
The certificate is generated by omgwtfssl, implementing most best practices. Once generated:
It will dump the certs it generated into /certs by default and will also output them to stdout in a standard YAML form making them easy to consume in Ansible or other tools that use YAML.
Certificates are stored in a shared docker volume called
certs. Your containers can access this volume if you indicate it in "+ Advanced Settings" when deploying it. The NGINX reverse-proxy container fetches the certificates directly from its configuration file. If you wish to replace these certificates with your own, simply replace them from this volume.
It also means you can share the generated certificates into other containers, such Empire or Metasploit for your reverse callbacks, or for a phishing campaign. Most SSL related configurations can be found in the
docker-compose.yml file or
You can stop Redcloud directly from the menu.
Deployed App templates need to be stopped manually before stopping Redcloud. You can stop them using the Portainer web-interface, or
docker rm -f container-name.
If you wish to force the Portainer containers running Redcloud to stop, simply run
docker-compose kill inside the
redcloud/ folder. The local and docker-machine stop option is the same, thus they are combined in the same option.
Portainer App Templates
Redcloud uses Portainer to orchestrate and interface with the Docker engine. Portainer in itself is a fantastic project to manage Docker deployments remotely. Portainer also includes a very convenient template system, which is the major component for our Redcloud deployment.
Templates can be found in
./nginx-templates/templates.yml. Portainer fetches the template file from a dedicated NGINX container (
Redcloud security considerations
Redcloud deploys with a self-signed https certificate, and proxies all interactions with the web console through it.
However, your containers will expose ports. The default network exposes them to the outside world.
- Add custom
Locationblocks in the NGINX configuration
- Start a Ubuntu+noVNC (VNC through http) from template, add it to both a "inside" and "outside" network, and access exposed interfaces from inside
- Add .htaccess configurations. Some are planned in further Redcloud development
docker-machineinstallation require root privileges. You can downgrade privilege requirements following the official documentation
- The install script is pulled directly from the official docker repositories
redcloud.pyfetches Redcloud's public IP address using icanhazip.com
Tested deployment candidates
- Check your default python version with
python --version. Redcloud needs python 3+
pythonif on an older system
redcloud.pyrequires that deployment candidate have the public key in their
.ssh/authorized_keys, and handles password-less authentication using the user's public key. This is the default configuration for most VPS workflows.
- docker-machine deployment requires that the user already have a running docker-machine on a cloud infrastructure (such as AWS, GCP, Linode and many others). Once deployed, simply run the
evalcommand as illustrated above
- docker & docker-machine installation require root privileges. You can downgrade privilege requirements following the official documentation
- If you don't see the "App Templates" menu item right after deploying, refresh the web page and make sure you're not at the endpoint selection menu
- If you wish to create a new username/password combo, remove Portainer persistent data on deployment candidate:
rm -rf /opt/portainer/data
- If you're running into python errors, you may need to install the
apt-get install python3-distutilson debian/ubuntu base)
- If you're getting an error when deploying an App Template saying the "container name already exists", it's probably because you're trying to deploy the same App Template without having removing a previously deployed one. Simply remove the old container with the same name, or change the name of your new container.
- If something seems wrong with your container, the standard procedure is to check the container's logs from the web-interface.
- Create your personal pentest-lab, and practice your hacking skills with friends and colleagues
- Deploying Metasploit or Empire, generate payload, serve with nginx files
- Launch Sniper, fetch logs using nginx files
- Use the reverse proxy to cover metasploit or empire
- Use an xss scanner on Juice shop
- Launch scans behind your own tor socks proxy
- View .onion site using Tor Socks + Ubuntu VNC
- Advanced OSINT with Spiderfoot and a Tor container as proxy
- Throw off the blue team by deploying honeypots. Can be one or one thousand honeypots thanks to containers!
msfconsolethrough the web-interface
Any help is appreciated. This is a side project, so it's probably missing a few bolts and screws. Above all:
- Reporting or fixing Redcloud bugs & quirks
- Adding templates. Please keep it clean, and from the creator's docker hub repository if possible
- Adding documentation
- Detailing use-cases in blog articles. I'll add links to blog posts here, so please be sure to contact me if you make one!
- Typos as issues (no pull requests please)
You can host a Redcloud on any unix server that runs Docker.
Redcloud is intended to be used in a cloud environment, such as a simple VPS with ssh, or even a AWS EC2, GCP etc...
A large range of cloud vendors offer free credits to get familiar with their services. Many lists and tutorials cover getting free hosting credits from major vendors. This list is a good place to start.
Regarding deployment method, I personally prefer working with docker-machine as it becomes ridiculously easy to spawn new machines and manage them once you've got your cloud provider's driver setup. If you prefer using
ssh, be sure to take a look at evilsocket's shellz project to manage your keys and profils.
Inspirations & Shout-outs
- Red Team Infrastructure Wiki - bluscreenofjeff
- Automated Red Team Infrastructure Guide - rastamouse
- Safe Red Team Infrastructure - Tim MalcomVetter
- Red Baron - Coalfire Research
- Rapid Attack Infrastructure - Obscurity Labs
- Decker - Steven Aldinger
- HideNSeek - Mike Hodges
Finally, I'd love to integrate Cobalt Strike. Unfortunately, I don't see myself having the funds to invest in a licence, so if you know someone who knows someone, I'm all ears
If you wish to stay updated on this project: