Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Start CyLab Security Academy Problem Development

Hello and welcome to the official documentation for our Capture-The-Flag (CTF) challenge manager! This guide is designed to help you navigate and utilize the features of this powerful tool to create and configure your own CTF problems.

This documentation is currently maintained by Luke 'syreal' Jones. If you have any questions, comments, or suggestions, feel free to reach out via email here.

Our team has been exclusively using cmgr for problem development over the past few years. This tool is tightly integrated with Docker, ensuring a robust and flexible environment for your CTF challenges. With cmgr, you can easily bring your challenge ideas to life and provide an engaging experience for participants.

Whether you are a seasoned CTF organizer or new to the scene, this documentation will guide you through every step of using cmgr, from installation and setup to advanced customization and challenge configuration.

Let's get started on turning your CTF dreams into reality!

Check out our new Quick Start Guide thanks to David Gaviria!

Getting Started

  • Install and setup cmgr
    • Helpful cmgr commands are:
      • cmgr test challenges/yourchallenge (test build)
      • cmgr playtest namespace/to/yourchallenge (run a web server hosting your challenge)
      • cmgr update
      • cmgr update-schema schema.yaml
  • Familiarize yourself with Docker
    • Helpful docker commands are:
      • sudo docker build . --build-arg FLAG="academy{exampleflag}"
      • sudo docker run sha256:... (result of last command)
      • sudo docker ps
      • sudo docker exec -u root -it HEXSTRING bash (HEXSTRING from ps, gives root shell on Docker image)
  • Look at some example problems
  • Peruse common topics in cmgr problem dev
  • Become aware of common errors with cmgr
  • Review extensive problem developer advice
  • BONUS: Review crucially relevant CTF lore

Creating a challenge

This is an outline of a problem creation process that works and includes some of the needs we have for CyLab Security Academy (like filling out the Use of Work form). This is just a suggestion, feel free to develop challenges however feels right to you!

  • Get an idea for a challenge
  • Reach out to us via email so we can review your problem idea
  • Create a private GitHub repository for your challenge(s)
  • Add syreal17 as a collaborator on your repo
  • Write a proof-of-concept challenge
  • Theme or provide flavor for the challenge
  • Package the challenge for cmgr
  • Ensure the docker container builds correctly
  • Test the challenge in cmgr
  • Write a solve script
  • Fill out and send the Use of Work form
  • Receive feedback
  • Observe your challenge in the next competition!

About

Everything (examples, docs, references, ...) to start developing problems for the cmgr framework

Resources

Stars

19 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages