diff --git a/deploy.py b/deploy.py index 2c319b7..9d98c30 100644 --- a/deploy.py +++ b/deploy.py @@ -173,6 +173,12 @@ def interactive_setup(deployment_id=None): # Ask if user wants to use cross-provider deployment cross_provider = input("\nDo you want to deploy redirector and C2 on different providers? (y/n) [default: n]: ").lower() == 'y' + # If not cross-provider, ask if they want multi-region deployment upfront + use_multi_region = False + if not cross_provider: + use_multi_region = input("\nDo you want to deploy redirector and C2 in different regions? (y/n) [default: n]: ").lower() == 'y' + config['use_multi_region'] = use_multi_region + if cross_provider: print("\nSelect redirector provider:") for i, provider in enumerate(PROVIDERS, 1): @@ -249,34 +255,34 @@ def interactive_setup(deployment_id=None): for i, region in enumerate(aws_regions, 1): print(f" {i}. {region}") - # Select region for redirector if this is the redirector provider - if provider == config.get('redirector_provider', config['provider']): - region_input = input("\nSelect region for redirector (number or leave blank for random): ") - if region_input: - try: - region_choice = int(region_input) - if 1 <= region_choice <= len(aws_regions): - config['redirector_region'] = aws_regions[region_choice - 1] - else: - print(f"Invalid choice, using random region") - except ValueError: - print("Invalid input, using random region") - - # Select region for C2 if this is the C2 provider - if provider == config.get('c2_provider', config['provider']): - region_input = input("\nSelect region for C2 (number or leave blank for random): ") - if region_input: - try: - region_choice = int(region_input) - if 1 <= region_choice <= len(aws_regions): - config['c2_region'] = aws_regions[region_choice - 1] - else: - print(f"Invalid choice, using random region") - except ValueError: - print("Invalid input, using random region") - - # If not cross-provider and no specific regions selected, use general region - if not cross_provider and not (config.get('redirector_region') or config.get('c2_region')): + # Handle region selection based on deployment type + if cross_provider or use_multi_region: + # Select specific regions for redirector/C2 if this provider is used for them + if provider == config.get('redirector_provider', config['provider']): + region_input = input("\nSelect region for redirector (number or leave blank for random): ") + if region_input: + try: + region_choice = int(region_input) + if 1 <= region_choice <= len(aws_regions): + config['redirector_region'] = aws_regions[region_choice - 1] + else: + print(f"Invalid choice, using random region") + except ValueError: + print("Invalid input, using random region") + + if provider == config.get('c2_provider', config['provider']): + region_input = input("\nSelect region for C2 (number or leave blank for random): ") + if region_input: + try: + region_choice = int(region_input) + if 1 <= region_choice <= len(aws_regions): + config['c2_region'] = aws_regions[region_choice - 1] + else: + print(f"Invalid choice, using random region") + except ValueError: + print("Invalid input, using random region") + else: + # Single region for both if not using multi-region region_input = input("\nSelect region (number or leave blank for random): ") if region_input: try: @@ -301,34 +307,34 @@ def interactive_setup(deployment_id=None): for i, region in enumerate(linode_regions, 1): print(f" {i}. {region}") - # Select region for redirector if this is the redirector provider - if provider == config.get('redirector_provider', config['provider']): - region_input = input("\nSelect region for redirector (number or leave blank for random): ") - if region_input: - try: - region_choice = int(region_input) - if 1 <= region_choice <= len(linode_regions): - config['redirector_region'] = linode_regions[region_choice - 1] - else: - print(f"Invalid choice, using random region") - except ValueError: - print("Invalid input, using random region") - - # Select region for C2 if this is the C2 provider - if provider == config.get('c2_provider', config['provider']): - region_input = input("\nSelect region for C2 (number or leave blank for random): ") - if region_input: - try: - region_choice = int(region_input) - if 1 <= region_choice <= len(linode_regions): - config['c2_region'] = linode_regions[region_choice - 1] - else: - print(f"Invalid choice, using random region") - except ValueError: - print("Invalid input, using random region") - - # If not cross-provider and no specific regions selected, use general region - if not cross_provider and not (config.get('redirector_region') or config.get('c2_region')): + # Handle region selection based on deployment type + if cross_provider or use_multi_region: + # Select specific regions for redirector/C2 if this provider is used for them + if provider == config.get('redirector_provider', config['provider']): + region_input = input("\nSelect region for redirector (number or leave blank for random): ") + if region_input: + try: + region_choice = int(region_input) + if 1 <= region_choice <= len(linode_regions): + config['redirector_region'] = linode_regions[region_choice - 1] + else: + print(f"Invalid choice, using random region") + except ValueError: + print("Invalid input, using random region") + + if provider == config.get('c2_provider', config['provider']): + region_input = input("\nSelect region for C2 (number or leave blank for random): ") + if region_input: + try: + region_choice = int(region_input) + if 1 <= region_choice <= len(linode_regions): + config['c2_region'] = linode_regions[region_choice - 1] + else: + print(f"Invalid choice, using random region") + except ValueError: + print("Invalid input, using random region") + else: + # Single region for both if not using multi-region region_input = input("\nSelect region (number or leave blank for random): ") if region_input: try: diff --git a/linode-images.json b/linode-images.json deleted file mode 100644 index c3c3d0a..0000000 --- a/linode-images.json +++ /dev/null @@ -1 +0,0 @@ -{"data": [{"id": "linode/almalinux8", "label": "AlmaLinux 8", "deprecated": false, "size": 4000, "created": "2021-05-18T14:28:38", "updated": "2024-07-02T19:04:04", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "AlmaLinux", "expiry": null, "eol": "2029-01-01T05:00:00", "regions": null, "status": "available", "capabilities": ["distributed-sites"]}, {"id": "linode/almalinux9", "label": "AlmaLinux 9", "deprecated": false, "size": 2500, "created": "2022-05-26T22:07:54", "updated": "2024-11-19T20:14:23", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "AlmaLinux", "expiry": null, "eol": "2032-05-31T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/alpine3.18", "label": "Alpine 3.18", "deprecated": false, "size": 400, "created": "2023-05-31T16:44:36", "updated": "2025-04-09T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Alpine", "expiry": null, "eol": "2025-05-09T04:00:00", "regions": null, "status": "available", "capabilities": []}, {"id": "linode/alpine3.19", "label": "Alpine 3.19", "deprecated": false, "size": 400, "created": "2023-12-08T15:59:28", "updated": "2025-04-09T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Alpine", "expiry": null, "eol": "2025-11-01T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/alpine3.20", "label": "Alpine 3.20", "deprecated": false, "size": 400, "created": "2024-07-23T17:10:57", "updated": "2025-04-09T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Alpine", "expiry": null, "eol": "2026-04-01T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/arch", "label": "Arch Linux", "deprecated": false, "size": 2500, "created": "2016-06-13T20:31:34", "updated": "2024-12-17T22:39:07", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Arch", "expiry": null, "eol": null, "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/centos-stream9", "label": "CentOS Stream 9", "deprecated": false, "size": 2400, "created": "2022-01-05T23:34:00", "updated": "2024-12-17T22:39:07", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "CentOS", "expiry": null, "eol": "2029-06-01T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/debian11", "label": "Debian 11", "deprecated": false, "size": 1500, "created": "2021-08-14T22:44:02", "updated": "2025-03-25T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Debian", "expiry": null, "eol": "2026-06-30T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/debian12", "label": "Debian 12", "deprecated": false, "size": 1800, "created": "2023-06-10T15:56:16", "updated": "2025-03-25T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Debian", "expiry": null, "eol": "2028-06-10T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/fedora40", "label": "Fedora 40", "deprecated": false, "size": 2800, "created": "2024-04-23T15:31:55", "updated": "2024-07-23T20:30:21", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Fedora", "expiry": null, "eol": "2025-05-13T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/fedora41", "label": "Fedora 41", "deprecated": false, "size": 2000, "created": "2024-10-29T15:36:20", "updated": "2024-10-29T16:08:03", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Fedora", "expiry": null, "eol": "2025-11-29T05:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/gentoo", "label": "Gentoo", "deprecated": false, "size": 7000, "created": "2016-10-25T17:31:25", "updated": "2024-07-03T13:53:22", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Gentoo", "expiry": null, "eol": null, "regions": null, "status": "available", "capabilities": []}, {"id": "linode/kali", "label": "Kali Linux", "deprecated": false, "size": 1536, "created": "2022-02-28T17:08:42", "updated": "2025-04-09T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Kali", "expiry": null, "eol": null, "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/debian12-kube-v1.29.7", "label": "Kubernetes 1.29.7 on Debian 12", "deprecated": false, "size": 3500, "created": "2024-08-07T20:17:04", "updated": "2024-11-12T23:25:16", "description": null, "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Debian", "expiry": null, "eol": "2028-06-10T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/debian12-kube-v1.30.3", "label": "Kubernetes 1.30.3 on Debian 12", "deprecated": false, "size": 3500, "created": "2024-08-07T20:17:04", "updated": "2024-11-12T23:25:24", "description": null, "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Debian", "expiry": null, "eol": "2028-06-10T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/debian12-kube-v1.31.0", "label": "Kubernetes 1.31.0 on Debian 12", "deprecated": false, "size": 3500, "created": "2024-09-10T18:15:37", "updated": "2024-11-12T23:25:31", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Debian", "expiry": null, "eol": "2028-06-10T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/debian12-kube-v1.32.1", "label": "Kubernetes 1.32.1 on Debian 12", "deprecated": false, "size": 3500, "created": "2025-01-28T18:32:48", "updated": "2025-01-28T18:32:48", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Debian", "expiry": null, "eol": "2028-06-10T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/opensuse15.6", "label": "openSUSE Leap 15.6", "deprecated": false, "size": 1200, "created": "2024-06-12T15:59:49", "updated": "2024-07-02T19:04:04", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "openSUSE", "expiry": null, "eol": "2026-01-01T05:00:00", "regions": null, "status": "available", "capabilities": []}, {"id": "linode/rocky8", "label": "Rocky Linux 8", "deprecated": false, "size": 4000, "created": "2021-06-22T01:56:07", "updated": "2024-07-02T19:04:04", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Rocky", "expiry": null, "eol": "2029-05-31T04:00:00", "regions": null, "status": "available", "capabilities": ["distributed-sites"]}, {"id": "linode/rocky9", "label": "Rocky Linux 9", "deprecated": false, "size": 2500, "created": "2022-07-15T15:00:09", "updated": "2024-11-20T16:49:54", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Rocky", "expiry": null, "eol": "2032-05-31T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/slackware15.0", "label": "Slackware 15.0", "deprecated": false, "size": 11600, "created": "2022-02-04T23:25:47", "updated": "2024-07-02T20:36:20", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Slackware", "expiry": null, "eol": null, "regions": null, "status": "available", "capabilities": []}, {"id": "linode/ubuntu20.04", "label": "Ubuntu 20.04 LTS", "deprecated": false, "size": 3500, "created": "2020-04-23T17:59:32", "updated": "2025-01-27T17:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Ubuntu", "expiry": null, "eol": "2025-05-29T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/ubuntu22.04", "label": "Ubuntu 22.04 LTS", "deprecated": false, "size": 3500, "created": "2022-04-21T16:57:06", "updated": "2025-01-27T17:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Ubuntu", "expiry": null, "eol": "2027-06-01T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/ubuntu24.04", "label": "Ubuntu 24.04 LTS", "deprecated": false, "size": 3500, "created": "2024-04-25T13:00:11", "updated": "2025-02-20T17:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Ubuntu", "expiry": null, "eol": "2029-05-31T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init", "distributed-sites"]}, {"id": "linode/ubuntu24.10", "label": "Ubuntu 24.10", "deprecated": false, "size": 3500, "created": "2024-10-22T16:11:06", "updated": "2025-01-27T17:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Ubuntu", "expiry": null, "eol": "2025-07-10T04:00:00", "regions": null, "status": "available", "capabilities": ["cloud-init"]}, {"id": "linode/alpine3.17", "label": "Alpine 3.17", "deprecated": true, "size": 400, "created": "2022-11-22T19:20:51", "updated": "2025-04-09T16:00:00", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Alpine", "expiry": null, "eol": "2024-11-22T05:00:00", "regions": null, "status": "available", "capabilities": []}, {"id": "linode/fedora39", "label": "Fedora 39", "deprecated": true, "size": 2600, "created": "2023-11-07T17:51:27", "updated": "2024-07-02T19:04:04", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Fedora", "expiry": null, "eol": "2024-12-07T05:00:00", "regions": null, "status": "available", "capabilities": ["distributed-sites"]}, {"id": "linode/opensuse15.5", "label": "openSUSE Leap 15.5", "deprecated": true, "size": 1700, "created": "2023-06-07T17:13:25", "updated": "2024-07-02T19:04:04", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "openSUSE", "expiry": null, "eol": "2024-12-07T05:00:00", "regions": null, "status": "available", "capabilities": []}, {"id": "linode/ubuntu16.04lts", "label": "Ubuntu 16.04 LTS", "deprecated": true, "size": 2700, "created": "2016-04-22T18:11:29", "updated": "2024-07-01T21:19:59", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Ubuntu", "expiry": null, "eol": "2026-04-23T04:00:00", "regions": null, "status": "available", "capabilities": ["distributed-sites"]}, {"id": "linode/ubuntu18.04", "label": "Ubuntu 18.04 LTS", "deprecated": true, "size": 2700, "created": "2018-04-26T22:23:37", "updated": "2024-07-01T21:20:15", "description": "", "created_by": "linode", "type": "manual", "tags": [], "is_public": true, "vendor": "Ubuntu", "expiry": null, "eol": "2028-04-26T04:00:00", "regions": null, "status": "available", "capabilities": ["distributed-sites"]}], "page": 1, "pages": 1, "results": 30} \ No newline at end of file diff --git a/templates/havoc-config.yaotl.j2 b/templates/havoc-config.yaotl.j2 index 0776eee..16bb980 100644 --- a/templates/havoc-config.yaotl.j2 +++ b/templates/havoc-config.yaotl.j2 @@ -1,12 +1,10 @@ -{% set random_hex = lookup('password', '/dev/null chars=hex_lower length=8') %} - Teamserver { Host = "0.0.0.0" Port = {{ havoc_teamserver_port | default(40056) }} Build { Compiler64 = "/usr/bin/x86_64-w64-mingw32-gcc" - Compiler86 = "/usr/bin/i686-w64-mingw32-gcc" + Compiler86 = "/usr/bin/x86_64-w64-mingw32-gcc" Nasm = "/usr/bin/nasm" } } @@ -19,147 +17,53 @@ Operators { {% for operator in havoc_operators %} user "{{ operator.name }}" { Password = "{{ operator.password }}" - # Secret is not in documentation, removed or comment it out - # Secret = "{{ operator.secret | default(lookup('password', '/dev/null chars=hex_lower length=32')) }}" } {% endfor %} {% endif %} } Listeners { - Http { - Name = "http" - KillDate = "{{ havoc_killdate | default('2030-01-01') }}" - WorkingHours = "{{ havoc_working_hours | default('0:00-23:59') }}" - {% if havoc_hosts is defined %} - Hosts = [ - {% for host in havoc_hosts %} - "{{ host }}"{% if not loop.last %},{% endif %} - {% endfor %} - ] - {% else %} - Hosts = ["0.0.0.0"] - {% endif %} - HostBind = "0.0.0.0" - HostRotation = "{{ havoc_host_rotation | default('round-robin') }}" - PortBind = {{ havoc_http_port | default(8080) }} - {% if havoc_portconn is defined %} - PortConn = {{ havoc_portconn }} - {% endif %} - {% if havoc_user_agent is defined %} - UserAgent = "{{ havoc_user_agent }}" - {% else %} - UserAgent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:{{ random_hex[1] | int + 90 }}.0) Gecko/20100101 Firefox/{{ random_hex[2] | int + 95 }}.0" - {% endif %} - Headers = [ - {% if havoc_http_headers is defined %} - {% for header in havoc_http_headers %} - "{{ header }}"{% if not loop.last %},{% endif %} - {% endfor %} - {% else %} - "Accept: */*", - "Accept-Language: en-US,en;q=0.9", - "X-Requested-With: XMLHttpRequest" - {% endif %} - ] - Uris = [ - {% if havoc_http_uris is defined %} - {% for uri in havoc_http_uris %} - "{{ uri }}"{% if not loop.last %},{% endif %} - {% endfor %} - {% else %} - "/api/v{{ random_hex[6] | int + 1 }}", - "/dashboard", - "/content/{{ random_hex[1:4] }}", - "/wp-includes/{{ random_hex[1:6] }}.js" - {% endif %} - ] - Secure = false - {% if havoc_proxy_enabled | default(false) %} - Proxy { - Host = "{{ havoc_proxy_host }}" - Port = {{ havoc_proxy_port }} - Username = "{{ havoc_proxy_username | default('') }}" - Password = "{{ havoc_proxy_password | default('') }}" - } - {% endif %} - } - Http { Name = "https" KillDate = "{{ havoc_killdate | default('2030-01-01') }}" WorkingHours = "{{ havoc_working_hours | default('0:00-23:59') }}" - {% if havoc_hosts is defined %} Hosts = [ - {% for host in havoc_hosts %} - "{{ host }}"{% if not loop.last %},{% endif %} - {% endfor %} + "{{ redirector_subdomain }}.{{ domain }}" ] - {% else %} - Hosts = ["0.0.0.0"] - {% endif %} HostBind = "0.0.0.0" - HostRotation = "{{ havoc_host_rotation | default('round-robin') }}" + HostRotation = "round-robin" PortBind = {{ havoc_https_port | default(443) }} - {% if havoc_user_agent is defined %} - UserAgent = "{{ havoc_user_agent }}" - {% else %} - UserAgent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:{{ random_hex[1] | int + 90 }}.0) Gecko/20100101 Firefox/{{ random_hex[2] | int + 95 }}.0" - {% endif %} + PortConn = {{ havoc_https_port | default(443) }} + UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" Headers = [ - {% if havoc_https_headers is defined %} - {% for header in havoc_https_headers %} - "{{ header }}"{% if not loop.last %},{% endif %} - {% endfor %} - {% else %} "Accept: */*", - "Accept-Language: en-US,en;q=0.9", - "X-Requested-With: XMLHttpRequest" - {% endif %} + "Accept-Language: en-US,en;q=0.9" ] Uris = [ - {% if havoc_https_uris is defined %} - {% for uri in havoc_https_uris %} - "{{ uri }}"{% if not loop.last %},{% endif %} - {% endfor %} - {% else %} - "/api/v{{ random_hex[6] | int + 2 }}", + "/api/v2", "/content", - "/static/{{ random_hex[2:5] }}", - "/wp-content/plugins/{{ random_hex[1:6] }}" - {% endif %} + "/static/css", + "/wp-content/plugins" ] + Response { + Headers = [ + "Content-Type: application/json", + "Cache-Control: no-store, private", + "X-Content-Type-Options: nosniff" + ] + } Secure = true Cert { - Cert = "{{ havoc_cert_path | default('/root/Tools/Havoc/data/certs/havoc.crt') }}" - Key = "{{ havoc_key_path | default('/root/Tools/Havoc/data/certs/havoc.key') }}" + Cert = "/etc/letsencrypt/live/{{ domain }}/fullchain.pem" + Key = "/etc/letsencrypt/live/{{ domain }}/privkey.pem" } - - {% if havoc_proxy_enabled | default(false) %} - Proxy { - Host = "{{ havoc_proxy_host }}" - Port = {{ havoc_proxy_port }} - Username = "{{ havoc_proxy_username | default('') }}" - Password = "{{ havoc_proxy_password | default('') }}" - } - {% endif %} } - - {% if havoc_smb_enabled | default(false) %} - Smb { - Name = "smb" - PipeName = "{{ havoc_smb_pipename | default('havoc-' ~ random_hex[0:6]) }}" - } - {% endif %} } Demon { - Sleep = {{ havoc_sleep | default(random_hex[0:2] | int % 5 + 2) }} - Jitter = {{ havoc_jitter | default(random_hex[2:4] | int % 30 + 20) }} - {% if havoc_trust_x_forwarded_for is defined %} - TrustXForwardedFor = {{ havoc_trust_x_forwarded_for | lower }} - {% endif %} + Sleep = {{ havoc_sleep | default(5) }} + Jitter = {{ havoc_jitter | default(30) }} Injection { {% if havoc_spawn64 is defined %} @@ -174,25 +78,4 @@ Demon { Spawn32 = "C:\\Windows\\SysWOW64\\dllhost.exe" {% endif %} } -} - -{% if havoc_service_enabled | default(false) %} -Service { - Endpoint = "{{ havoc_service_endpoint | default('/api/service') }}" - Password = "{{ havoc_service_password | default(lookup('password', '/dev/null chars=ascii_letters,digits length=32')) }}" -} -{% endif %} - -{% if havoc_webhook_discord_enabled | default(false) %} -Webhook { - Discord { - Url = "{{ havoc_webhook_discord_url }}" - {% if havoc_webhook_discord_avatar_url is defined %} - AvatarUrl = "{{ havoc_webhook_discord_avatar_url }}" - {% endif %} - {% if havoc_webhook_discord_user is defined %} - User = "{{ havoc_webhook_discord_user }}" - {% endif %} - } -} -{% endif %} \ No newline at end of file +} \ No newline at end of file