{"id":21191653,"url":"https://github.com/kulkansecurity/ctf-challenge-ekoparty-2023","last_synced_at":"2026-05-20T09:35:55.062Z","repository":{"id":213434668,"uuid":"734105900","full_name":"kulkansecurity/ctf-challenge-ekoparty-2023","owner":"kulkansecurity","description":"A CTF challenge we put together for Ekoparty's 2023 main CTF","archived":false,"fork":false,"pushed_at":"2023-12-20T22:15:43.000Z","size":601,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-21T13:38:48.851Z","etag":null,"topics":["challenge","ctf","docker","offensive-security","prototype-pollution"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kulkansecurity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-12-20T22:09:13.000Z","updated_at":"2024-03-18T13:50:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"ccc01ecf-25f6-4a28-8549-711c28978bde","html_url":"https://github.com/kulkansecurity/ctf-challenge-ekoparty-2023","commit_stats":null,"previous_names":["kulkansecurity/ctf-challenge-ekoparty-2023"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulkansecurity%2Fctf-challenge-ekoparty-2023","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulkansecurity%2Fctf-challenge-ekoparty-2023/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulkansecurity%2Fctf-challenge-ekoparty-2023/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulkansecurity%2Fctf-challenge-ekoparty-2023/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kulkansecurity","download_url":"https://codeload.github.com/kulkansecurity/ctf-challenge-ekoparty-2023/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243646664,"owners_count":20324586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["challenge","ctf","docker","offensive-security","prototype-pollution"],"created_at":"2024-11-20T19:04:14.661Z","updated_at":"2025-12-30T12:53:07.720Z","avatar_url":"https://github.com/kulkansecurity.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kulkan's CTF challenge for Ekoparty 2023 (https://www.ekoparty.org)\n\n## Building the CTF challenge\n\ndocker build --tag eko-ctf-kulkan-2023 .\n\n## Running the CTF challenge as a single container and plaintext HTTP\n\ndocker run -p12000:12000 eko-ctf-kulkan-2023\n\n## Solving the CTF challenge\n\nNo spoilers.\n\n## Scaling the CTF Challenge and adding LetsEncrypt HTTPS\n\n### stack\n\n- Dockerized Flask app \u0026 Admin bot python apps\n- ngnix with rate limiting rules listening both on 80 and 443\n- certbot issuing LetsEncrypt certificates for the virtualhost served by nginx\n- Docker swarm managing multiple containers\n\n### Prereqs\n\n- Docker installed with Docker compose plugin\n- Ensure nginx configuration is set to correct domains\n- Ensure you've not skipped calling init-letsencrypt.sh\n- Firewall rules open on hosting/cloud provider for ports 80 and 443\n\n### STEPS\n\n- 1) Build the image locally using the steps described above\n- 2) Run init-letsencrypt.sh to setup files required for the nginx container to start \n- 3) Run \u003ccode\u003e docker stack deploy -c docker-compose.yml eko-ctf-kulkan-2023 \u003c/code\u003e\n- 4) Run \u003ccode\u003e docker node ls\u003c/code\u003e to list all running nodes\n- 5) Create replicas of desired containers using \u003ccode\u003e docker service scale eko-ctf-kulkan-2023-{node-name}={replica_number}\u003c/code\u003e\n\nExample: \u003ccode\u003e docker service scale eko-ctf-kulkan-2023-ngnix=2 \u003c/code\u003e\n\nThis creates 2 nginx containers that will automagically load balance between each other\n\n## TODO\n\n- [  ] More aggressive tests to verify availability\n- [  ] Ansible script or similar to automate deployment in case main server gets quacked and we need to rehost quickly?\n\n## Kudos\n\n- Matias Forti for creating the challenge and incorporating nginx rate limits\n- Philipp's article on certbot+nginx integration with docker (https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71) and for the creation of init-letsencrypt.sh linked in the article.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkulkansecurity%2Fctf-challenge-ekoparty-2023","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkulkansecurity%2Fctf-challenge-ekoparty-2023","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkulkansecurity%2Fctf-challenge-ekoparty-2023/lists"}