Compare commits

...

10 Commits

9 changed files with 123 additions and 13 deletions
+1
View File
@@ -1 +1,2 @@
.env
setup.conf
+1 -6
View File
@@ -10,12 +10,6 @@ RUN apt update && apt -y install \
xz-utils \
&& rm -rf /var/lib/apt/lists/*
# Manually install upx
RUN wget https://github.com/upx/upx/releases/download/v4.2.4/upx-4.2.4-amd64_linux.tar.xz \
&& tar -xf upx-4.2.4-amd64_linux.tar.xz \
&& mv upx-4.2.4-amd64_linux/upx /usr/local/bin/ \
&& rm -rf upx-4.2.4-amd64_linux*
WORKDIR /build
RUN git clone https://github.com/HavocFramework/Havoc.git .
@@ -40,5 +34,6 @@ WORKDIR /app
COPY --from=builder /build/havoc-ts /app/havoc-ts
COPY --from=builder /build/data /app/data
COPY --from=builder /build/teamserver/pkg/handlers /app/teamserver/pkg/handlers
COPY --from=builder /build/payloads /app/payloads
EXPOSE 40056
+5
View File
@@ -17,10 +17,15 @@ services:
cloudflare-tunnel:
container_name: havoc-cloudflare-tunnel
image: cloudflare/cloudflared:latest
user: root
restart: unless-stopped
command: tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
depends_on:
- havoc-teamserver
environment:
- SSL_CERT_FILE=/app/certs/teamserver.crt
volumes:
- ./profiles/teamserver.crt:/app/certs/teamserver.crt:ro
networks:
- c2-network
+12 -7
View File
@@ -12,7 +12,7 @@ Teamserver {
WebHook {
Discord {
# required
Url = "https://discord.com/api/webhooks/<bla>/<bla>" # replace this with your webhook
Url = "{{DISCORD_WEBHOOK}}"
# optional
AvatarUrl = "https://raw.githubusercontent.com/HavocFramework/Havoc/main/assets/Havoc.png" # url to an image to use as an avatar
@@ -24,8 +24,8 @@ WebHook {
# For God's sake, change this...
Operators {
user "admin" {
Password = "admin"
user "{{OPERATOR_USER}}" {
Password = "{{OPERATOR_PASS}}"
}
}
@@ -33,14 +33,19 @@ Listeners {
Http {
Name = "Cloudflare HTTP Listener"
HostBind = "0.0.0.0"
PortBind = 80
PortBind = 443
PortConn = 443
HostRotation = "round-robin"
Secure = false
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
Secure = true
UserAgent = "Mozilla/5.0 Windows NT 10.0 Win64 x64 Chrome/120.0.0.0"
Cert {
Cert = "/app/profiles/teamserver.crt"
Key = "/app/profiles/teamserver.key"
}
Hosts = [
"c2.example.com" # replace with your actual host
"{{C2_DOMAIN}}"
]
}
}
+20
View File
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDOjCCAiKgAwIBAgIUG25PUmeE62tLEJZr2DF1Gd1hGfQwDQYJKoZIhvcNAQEL
BQAwGzEZMBcGA1UEAwwQaGF2b2MtdGVhbXNlcnZlcjAeFw0yNjA2MjYxMDQ0MDha
Fw0yNzA2MjYxMDQ0MDhaMBsxGTAXBgNVBAMMEGhhdm9jLXRlYW1zZXJ2ZXIwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbK3dc9JuvDyycn4Q6693Hz9/P
CooBlzoipDcIp2GenR6J/n5SosxnrkQhbgUUgYRsBgGp7OjuGFbBjIvJ+ew4Bwn4
4kXBdjGFvWKrgNkhqc9cJs8Sv5VBC5htB1B42Plnj3d8oyOpjERXUS3P++bAu3N9
gO+EQjXf8fIswCNDK6z0RtcT8ZvPy8YYGIXNR7FwAPn0bgTv4f3gEBnTAqBpDwei
pNvvxCKIxjMaCi40l3ngGYO82E6bIYXIe/vyMKUBQ1KOUC/zsF5feJDYAVslo2dI
YsckSJlQyYz3YCTPeZTNl+QLGjA+btSXKRak/iq7zJ+ELe3dMW88VAk1v5odAgMB
AAGjdjB0MB0GA1UdDgQWBBRGKSIXTwTzK3ShMav0yHABqlZaYTAfBgNVHSMEGDAW
gBRGKSIXTwTzK3ShMav0yHABqlZaYTAPBgNVHRMBAf8EBTADAQH/MCEGA1UdEQQa
MBiCEGhhdm9jLXRlYW1zZXJ2ZXKHBAAAAAAwDQYJKoZIhvcNAQELBQADggEBAKUi
TGOs7LqaMakfAREmMeNyKl7TQG57d2t3MAH+1jSwTI4N210yKau7Dpw4+NgkIhA6
Z52a6ciXkJ/jcs393voTVAHvcXSBpldYKJMaeGDN0U0I17gZtQxcCliaub/LKzmm
coQknW5gcEz2wRWxmwRIYQAJPmvUC+nCzYd080vQgR1nn6tWUGmyUImeSj8znDwf
HGmoZBY4t59xegE6Q1wUNUE73j3Azb7pRxrf7vmltaIpW6oluT3epM/LC7b3460H
xdFRhxFcN73YtsucER1nc25BvGrFLxbzR2eoboS/JSmvl2nHhV0oEey7mWEL60yA
reH9k7OpeWd82v3dDcE=
-----END CERTIFICATE-----
+28
View File
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDbK3dc9JuvDyyc
n4Q6693Hz9/PCooBlzoipDcIp2GenR6J/n5SosxnrkQhbgUUgYRsBgGp7OjuGFbB
jIvJ+ew4Bwn44kXBdjGFvWKrgNkhqc9cJs8Sv5VBC5htB1B42Plnj3d8oyOpjERX
US3P++bAu3N9gO+EQjXf8fIswCNDK6z0RtcT8ZvPy8YYGIXNR7FwAPn0bgTv4f3g
EBnTAqBpDweipNvvxCKIxjMaCi40l3ngGYO82E6bIYXIe/vyMKUBQ1KOUC/zsF5f
eJDYAVslo2dIYsckSJlQyYz3YCTPeZTNl+QLGjA+btSXKRak/iq7zJ+ELe3dMW88
VAk1v5odAgMBAAECggEABr/crevphHdc6hjef1sGqjHcZFmgfOKNm4X/nOBcuQAB
MgI4nS5eyZ2cAwSKmwJPE+2ObQ967+Qnfc/oeSidbe9HjxbWy5mqdkIqEPqHlUoP
tPiL/XmRbN6gy9DDGWmjKp2IMjoq7byAWUkKdmJ9TXeoW5fWKHZKhvJCQT8MhvO5
h1YY4qr+c8pPhZ3xKa6xEALqsGdo//yJvLTZMYr6kNzhxo+tfung1CuvDQXsiP2w
u8Tba6KnxeMLhTgZWnmtIyO4HBfL7OJEK9ptzI73lti9cQP1QXTPTUJ7r1W9v+sW
qBfjwrnKuz59/hTPxRzgMAitqqufBn9gjuBnqfgjaQKBgQD1bq06O2YQB+UIa/xY
4sWbk6jmEQU2hl3cjcij+hTdob8G/W51wamEH4UnKOZiST/4tzhqxfhlVmk7sQAA
UpbvpQddHE+JSlbNQ54O+J3uyNobd1QiHyJ0R7QRTTxQNiqNz1UTEv8snQ0VhtC4
K2OtZPOjwivSZ5gD1nd8KPeHtQKBgQDkm05NsbcBjMJkgtvtCPgElZmpXQHShBW3
kS6kwt41dt6GN8DXL2uLmbzxmIsiV3JNopK/ipK9N40km6OcrB9Sov+1aeWBH/yd
rsm2i6uT9gCIALMHpqy5PgEp383BzlFVKyhLAj8K+5H63F1Vs2S70heWJPjrBaxP
32GiqSv5yQKBgBBYv8bqH+EfdXy7HIKbEAhNrGkuZwd7qZLACsYJKQyd8kg35vyG
2pCHPOofykBvmogpQ+OwrduqBrZIErTyy0TI3BWyhgWh4ugnAccDfhliXUyJBRyE
sFnIUND6MPMyuGDbl1H+6OoCx9VQNmSd1zS8TZHxo9OOvMw8o5asb9glAoGAcT29
fB8cWFgxszhfWPuoYBz7ETpRPMbROy1fvZ4KFNHdSP81N2L2EyEEx2iZA1nt9Scj
Kl6qcbCi6g9u7J0Wpwi3QlZCqcP+jt2Wbiahx5mEidpO1OtrhBeC3AtRET/yag4G
16E1OWuE1I90bI+Axsk7hdSquUEGKkqtQrYqYoECgYEAmkjx9TXAWssaDIpP1pcw
1pNwncqOVtG18yo96gnmlKnkcPV84C53QJ3HCbEQqg3Cn8MmFPNurt55uSqfHipP
02pChfkbwuss7YuyeGQMwhmmoNpLD9zcq3X2ZKSyVUW8zkHubaRBA58UFNO0GfwZ
402Gu0/p7JWBOgJGC3/FJKw=
-----END PRIVATE KEY-----
+9
View File
@@ -0,0 +1,9 @@
# Listener & Cloudflare
C2_DOMAIN="c2.example.com"
# OpCreds (Teamserver)
OPERATOR_USER="admin"
OPERATOR_PASS="admin"
# Discord Webhook Config
DISCORD_WEBHOOK="https://discord.com/api/webhooks/123456/abcdef"
Executable
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -e
CONFIG_FILE="setup.conf"
PROFILE_FILE="./profiles/default.yaotl"
# validate files
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "\e[31m[!] Error: Could not find ${CONFIG_FILE}\e[0m"
exit 1
fi
if [ ! -f "$PROFILE_FILE" ]; then
echo -e "\e[31m[!] Error: Could not find default profile in ${PROFILE_FILE}\e[0m"
exit 1
fi
# load vars
source "$CONFIG_FILE"
echo -e "\e[34m[*] Appliying changes...\e[0m"
# replace useing sed
sed -i "s|{{C2_DOMAIN}}|${C2_DOMAIN}|g" "$PROFILE_FILE"
sed -i "s|{{OPERATOR_USER}}|${OPERATOR_USER}|g" "$PROFILE_FILE"
sed -i "s|{{OPERATOR_PASS}}|${OPERATOR_PASS}|g" "$PROFILE_FILE"
sed -i "s|{{DISCORD_WEBHOOK}}|${DISCORD_WEBHOOK}|g" "$PROFILE_FILE"
sed -i "s|{{DEMON_SLEEP}}|${DEMON_SLEEP}|g" "$PROFILE_FILE"
sed -i "s|{{DEMON_JITTER}}|${DEMON_JITTER}|g" "$PROFILE_FILE"
echo -e "\e[32m[+] Placeholders have been replaced successfully.\e[0m"
Executable
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
TARGET_HOST="${1:-c2.example.com}"
if [[ -z "$TARGET_HOST" ]]; then
echo "[!] Error: Please specify a target host." >&2
exit 1
fi
echo -e "\e[34m[*] Launching secure TCP proxy to: \e[1;36m${TARGET_HOST}\e[0m"
echo -e "\e[32m[+] Listening locally on 127.0.0.1:40056\e[0m"
echo -e "\e[33m[*] Press Ctrl+C to close the bridge when done.\e[0m"
echo "--------------------------------------------------------"
cloudflared access tcp --hostname "$TARGET_HOST" --listener 127.0.0.1:40056