Need help with RedCommander?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

190 Stars 22 Forks GNU General Public License v3.0 26 Commits 0 Opened issues


Red Team C2 Infrastructure built in AWS using Ansible!

Services available


Need anything else?

Contributors list

Red Commander

Creates two Cobalt Strike C2 servers (DNS and HTTPS), with redirectors, and RedELK in Amazon AWS. Minimal setup required! Companion Blog here


This build does NOT use free-tier eligible servers. Approximate costs can vary. During testing, we used six ec2 instances that cost around $70/month total.

Please read all of this Readme.

I spent a ton of time ensuring that as many questions as I could think of were answered. If I missed something, please feel free to reach out. This tool may be maintained periodically, but it's mainly used as a stepping stone for further development.


  • Read the Blog!
  • Install Ansible
  • Install requirements.txt (Python3 Only!)
  • Download RedELK from here. Customize RedELK to your liking pre-deployment. We changed TimeZones here.
  • Zip customized This archive should contain a folder called "RedELK" in its root. put this ZIP file into files/.


  • Build out multiple engagements with this platform! Tracking via Engagement ID
  • Custom Cobalt Strike Package Support
  • Custom MalleableC2 Support per C2
  • C2Concealer Support (Test 👏 Your 👏 Profiles!)
  • Modified from Threat Express
  • Joomla Support for Web Redirectors. (The web redirectors can have their own website!)
  • Launch as many Web Redirectors as you want! Add as needed by rerunning the playbook with more domains added.
  • Custom EDR Evasion support via Web Redirectors (thanks to @curi0usJack)

Customization Notes

Name the folders below labeled "", "" to whatever the domain name is for that web redirector. This will ensure that the correct Joomla install lands on the right EC2 server! For Example:

If you created a decoy joomla site "" and wanted to use it as a web redirector, ensure it's in the 'domains' variable, and name a folder in the

directory '' with
in that folder that correspond to that site. Details on how to do that are below.
│   redirect.rules
│       dump.sql
│       dump.sql
    │       evasive.profile


All files have to be named EXACTLY as shown above in the folders shown. The exception is naming the folder for the web redirect domains. * Add your own file if you like. Don't include your MalleableC2 profile in that ZIP, though. * If you don't include a Keystore, one will be created for you using the LetsEncrypt certificate generated for the C2 domain. * If you don't include a MalleableC2 profile, one will be generated for you. This happens at every run, so it's likely a good idea to copy the generated keystore/profile to the above directories after first run, or just build your own. * To dump the MySQL database of your Joomla site, use

mysqldump -u root -p -d cs_joomla >> dump.sql
Then, execute
cd /var/www/html; zip -r *
to get your Joomla install zipped properly. Don't worry, the play will add the correct configuration settings (by default, mysql password, user and session type modifiers) * You can add a custom Cobalt Strike MalleableC2 and/or Keystore per C2 to
respectively. * Add to files/.


Ansible Control Node Requirements

  • python3
  • python3-boto3
  • python3-botocore
  • python3-requests
  • Ansible (obviously)

Variable Requirements

  • Amazon AWS API keys. You will need to be able to create EC2 Instances, VPCs, Subnets, IGW, Routing Tables, CloudFront Distributions (wasn't working properly in tests), and Add Keypairs.
  • CloudFlare API Credentials
  • Paid Cobalt Strike License (A Trial doesn't work here.)
  • VirusTotal API Credentials (optional)
  • Hybrid-Analysis API Credentials (optional)
  • IBM-X-FORCE Red API Credentials (optional)
  • Email Address for sending alert emails (We used Gmail)

The only REQUIRED pre-requisite that's not included in the variables file is to add your campaign domains to CloudFlare. The simple steps for that are:

  • Buy a domain
  • Assign Domain DNS servers to CloudFlare (for us it's
  • Login to CloudFlare and click "Add Site" Logo
  • Add your site name
  • Select Free for the Plan
  • Don't import any DNS records
  • Repeat for all needed domains

Important! Please be kind to CloudFlare. Send an email to [email protected] stating your AUTHORIZED intentions.


All variables except the Vault key are covered in

. Please reference that file for descriptions of each variable. USE ANSIBLE VAULT FOR SENSITIVE DATA!


ansible-vault encrypt_string --vault-password-file /path/to/password/file --name 'aws_secret_key'


We usually run this directly from the control node, though I'm in the process of importing this to AWX.

Important! Ensure that your variables are correct before running the playbook!

ansible-playbook playbook.yml --ask-vault-pass

I created a janky output.yml play that will spit out IP/Hostname correlations in debug. It's not pretty, but I left it in case you don't have access to AWS EC2 web gui.

There's also a nuke playbook for destroying your infrastructure. It's run the same way:

ansible-playbook nuke.yml --ask-vault-pass

Run that at your own risk.


  • My Payload isn't calling back!!!

Check 👏 Your 👏 Profile

  • I don't see any data in RedELK!

Ensure that all variables were correctly added. Check

logs for errors in the RedELK server. Otherwise check the RedELK Wiki. Oh, and make sure you have a live beacon. Otherwise you likely won't have any data! :)
  • I'm getting an Error in the Ansible Build!

Where? Try running it again with -vvv. Generally the Python Traceback will tell you whats wrong.

Author Information

Alex Williams, OSCP, GXPN

Twitter: @offsec_ginger

Github: offsecginger

Special Thanks

(In no particular order)

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.