Skip to main content

Library to build checker scripts for EnoEngine A/D CTF Framework in Python

Project description

EnoChecker PyPI version Build Status Lines of code

This is the checker lib that shall be used by all checkers in ENOWARS3 and ENOWARS4.

For a simple checker, subclass enochecker.BaseChecker.

from enochecker import BaseChecker, BrokenServiceException, run

class AwesomeChecker(BaseChecker):

    def putflag(self):  # type: () -> None
        # TODO: Put flag to service
        self.debug("flag is {}".format(self.flag))
        self.http_post("/putflaghere", params={"flag": self.flag})
        # ...

    def getflag(self):  # type: () -> None
        # tTODO: Get the flag.
        if not self.http_get("/getflag") == self.flag:
            raise BrokenServiceException("Ooops, wrong Flag")

    def putnoise(self):
        # put some noise
        with self.connect() as telnet:

    def getnoise(self):
        with self.connect() as telnet:

    def havoc(self):
        self.http("FUNFUN").text == "FUNFUN"

if __name__ == "__main__":

A full example, including helpful comments, can be found in

The full documentation (still in progress) is available on

(There is some not yet ported information in the old docs/


The latest stable version of the library is available on pip: pip install enochecker

To access the development version, the library can be installed using pip/git, like: pip install git+

Launch Checker

The goal is to have checkers launched via gunicorn or uSWGI and the Engine talking to it via http. For testing, however, you can use the commandline instead:

usage: run [-h] [-a ADDRESS] [-n TEAM_NAME] [-r ROUND] [-f FLAG]
                    [-t MAX_TIME] [-i CALL_IDX] [-p [PORT]]

positional arguments:
                        The Method, one of ['putflag', 'getflag', 'putnoise',
                        'getnoise', 'havoc'] or "listen" to start checker

optional arguments:
  -h, --help            show this help message and exit
  -a ADDRESS, --address ADDRESS
                        The ip or address of the remote team to check
  -n TEAM_NAME, --team_name TEAM_NAME
                        The teamname of the team to check
  -r ROUND, --round ROUND
                        The round we are in right now
  -f FLAG, --flag FLAG  The Flag, a Fake flag or a Unique ID, depending on the
  -t MAX_TIME, --max_time MAX_TIME
                        The maximum amount of time the script has to execute
                        in seconds
  -i CALL_IDX, --call_idx CALL_IDX
                        Unique numerical index per round. Each id only occurs
                        once and is tighly packed, starting with 0. In a
                        service supporting multiple flags, this would be used
                        to decide which flag to place.
  -p [PORT], --port [PORT]
                        The port the checker should attack

Why use it at all?

Many nice features for CTF Checker writing, obviously. Also, under-the-hood changes on the Engine can be made without any problems.

For further instructions on how to write a checker with this Framework look at docs/

Now, code away :).

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enochecker-0.5.0.tar.gz (29.9 kB view hashes)

Uploaded Source

Built Distribution

enochecker-0.5.0-py3-none-any.whl (31.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page