{"id":48197024,"url":"https://github.com/jmpsec/stanza-c2","last_synced_at":"2026-04-04T18:14:32.380Z","repository":{"id":301596798,"uuid":"801078015","full_name":"jmpsec/stanza-c2","owner":"jmpsec","description":"Multiplatform reliable implant with failover protocols","archived":false,"fork":false,"pushed_at":"2025-06-27T17:15:07.000Z","size":367,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-27T18:24:50.565Z","etag":null,"topics":["c2","ccdc","ccdc-open-source","command-and-control","golang","http","implant","red-team","red-team-tools","red-teaming","security-tools","stanza","tcp","udp"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jmpsec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-15T14:48:22.000Z","updated_at":"2025-06-27T17:15:08.000Z","dependencies_parsed_at":"2025-06-27T18:25:16.963Z","dependency_job_id":"50226a0d-ce19-47ed-8307-95bc3088fa56","html_url":"https://github.com/jmpsec/stanza-c2","commit_stats":null,"previous_names":["jmpsec/stanza-c2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jmpsec/stanza-c2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmpsec%2Fstanza-c2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmpsec%2Fstanza-c2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmpsec%2Fstanza-c2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmpsec%2Fstanza-c2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmpsec","download_url":"https://codeload.github.com/jmpsec/stanza-c2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmpsec%2Fstanza-c2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407856,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c2","ccdc","ccdc-open-source","command-and-control","golang","http","implant","red-team","red-team-tools","red-teaming","security-tools","stanza","tcp","udp"],"created_at":"2026-04-04T18:14:31.588Z","updated_at":"2026-04-04T18:14:32.363Z","avatar_url":"https://github.com/jmpsec.png","language":"HTML","readme":"\u003cdiv align=\"center\"\u003e\u003cimg src=\"stanza.jpg\" /\u003e\u003c/div\u003e\n\n```mermaid\nsequenceDiagram\n    participant Agent\n    participant StanzaC2\n\n    %% Step 1: Get callback channels\n    Agent-\u003e\u003eStanzaC2: POST /__c {UUID, HelloThisIsDog}\n    StanzaC2--\u003e\u003eAgent: {callbacks: [{ip, port, protocol, token, endpoints}]}\n\n    %% Step 2: Agent registration with each channel\n    Agent-\u003e\u003eStanzaC2: POST to register endpoint {hostInfo, username}\n    StanzaC2--\u003e\u003eAgent: {response: \"STZ_OK\"}\n\n    %% Step 3: Agent beacons\n    loop Regular Beaconing\n        Agent-\u003e\u003eStanzaC2: POST to beacon endpoint {status: \"STZ_BEACON\", uuid}\n        StanzaC2--\u003e\u003eAgent: {action: \"STZ_EXECUTE\", payload: \"command\", id}\n\n        %% Step 4: Agent executes and acknowledges\n        Note over Agent: Execute command\n        Agent-\u003e\u003eStanzaC2: POST {status: \"STZ_DONE\", uuid, data: id}\n    end\n```\n\n## Building\n\nThis project builds binaries for OSX, Linux, Windows and FreeBSD. Just use the appropiate ``make`` command and you are good to go!\n\nJust run ``make`` and both agent and server will be built from source. By default it will be built for the architecture that issues the build command but you can also build different targets.\nThese are all the agent targets you can build:\n\n* ``make agent_linux32``\n* ``make agent_linux64``\n* ``make agent_windows32``\n* ``make agent_windows64``\n* ``make agent_osx_intel``\n* ``make agent_osx_arm``\n* ``make agent_freebsd32``\n* ``make agent_freebsd64``\n\nAnd all the servers, they will build only for the current architecture:\n\n* ``make admin``\n* ``make http``\n* ``make tcp``\n* ``make udp``\n\n## HTTP(S) Server\n\nThe HTTP server is the web interface for the Stanza C2 server. It allows you to register agents, execute commands, and and manage their settings. The server can be deployed using `http` or `https` protocols.\n\n## Admin Server\n\nThe admin server is a web interface that allows you to manage the Stanza C2 server and its agents. It provides a user-friendly interface to view and control agents, execute commands, and manage files.\n\n## Agent\n\nThe agent can be used with just ``./stzagent`` inside of the vagrant machine (or in the system you are using as server), and it will connect to ``localhost`` using HTTPS. If you want to change the default values see the following examples as reference. Using environment variables:\n\n```shell\nSTZ_CALLBACKS=https://1.2.3.4/callbacks STZ_MIN=10 STZ_MAX=20 ./stzagent\n```\n\n## Development\n\nJust clone the repository and using docker you can have a full development environment ready to go. The Dockerfile will build the agent and the servers, use the following command to build the image:\n\n```shell\nmake docker_dev_build\n```\n\nOnce the images are built, you can run the development environment with:\n\n```shell\nmake docker_dev_run\n```\n\nIf you want to develop locally and compile things by hand, you can use the ``Makefile`` for that purpose. See the *Building* section.\n\n## WIP - TBD - Eventually it will get done\n\n### TCP Server\n\nThe TCP server is a simple server that listens for incoming connections and handles them. It is designed to be used with the Stanza C2 agent, allowing it to communicate with the server over TCP.\n\n### UDP Server\n\nThe UDP server is a simple server that listens for incoming packets and handles them. It is designed to be used with the Stanza C2 agent, allowing it to communicate with the server over UDP.\n\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"stanza.png\" /\u003e\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmpsec%2Fstanza-c2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmpsec%2Fstanza-c2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmpsec%2Fstanza-c2/lists"}