d8888 888 8888888888 888 888
d88888 888 888 888 888
d88P888 888 888 888 888
d88P 888 888 888 888888 .d b. 8888888 888 888 88888b. 888 888 888888
d88P 888 888 888 888 d88 88b 888 888 888 888 "88b 888 .88P 888
d88P 888 888 888 888 888 888 888 888 888 888888K 888
d8888888888 Y88b 888 Y88b. Y88 88P 888 Y88b 888 888 888 888 "88b Y88b.
d88P 888 "Y88888 "Y888 "Y P" 888 "Y88888 888 888 888 888 "Y888
malleable c2 => serverless cloud functions
Written by Adam Rose GitHub | twitter
- Thank you to Brett Fitzpatrick for the excellent pyMalleableProfileParser library.
- Many thanks to my colleagues @FortyNorthSecurity, especially Chris Truncer, Joe Leon, and Grimm1e
- Python 3.9 or higher
- Google Cloud Functions CLI
- Azure Functions Core Tools
- Clone the repo:
git clone https://github.com/FortyNorthSecurity/AutoFunkt.git
- Install requirements:
pip3 install -r requirements.txt
- Generate Google Cloud Functions:
python3 autofunkt.py -p /path/to/profile -t https://teamserver.url -o /path/to/output/directory -g
- Generate Azure Functions:
python3 autofunkt.py -p /path/to/profile -t https://teamserver.url -o /path/to/output/directory -a -s <azure-subdomain> -r <route-prefix>
-p, --profile_path
: Path to Malleable C2 profile (required)-t, --teamserver_url
: Teamserver URL (required)-o, --output-dir
: Output directory (required)-g, --google
: Generate Google Cloud Functions (optional, default: False)-a, --azure
: Generate Azure Functions (optional, default: False)-s, --azure-subdomain
: Azure subdomain (required for Azure)-r, --route-prefix
: Azure custom route prefix (optional, default: None)
- The
teamserver_url
must end with a/
(slash). - The
uri
value in thehttp-get
andhttp-post
blocks of the Malleable C2 profile must contain only one URI string. - For Google Cloud Functions, the program creates a directory for each URI value and generates a
main.py
andrequirements.txt
file in each directory. - For Azure Functions, the program creates an
azure
directory and generates amain.py
,host.json
,proxies.json
, andrequirements.txt
file in it.