Library to build checker scripts for EnoEngine A/D CTF Framework in Python
Project description
EnoChecker
This is the checker lib that shall be used by all checkers in ENOWARS3.
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:
telnet.write(self.noise)
def getnoise(self):
with self.connect() as telnet:
telnet.write("gimmeflag\n")
telnet.read_expect(self.noise)
def havoc(self):
self.http("FUNFUN").text == "FUNFUN"
if __name__ == "__main__":
run(AwesomeChecker)
A full example, including helpful comments, can be found in examplechecker.py.
The full API specification can be found docs/api.md.
(Generated from docstring using pydocmd simple ...
).
Installation
For now, the library can be installed using pip/git, like:
pip install git+https://github.com/domenukk/enochecker
Launch Checker
The goal is to have checkers launched via uSWGI and the Engine talking to it via http. For testing, however, you can use the commandline instead:
usage: check.py run [-h] [-a ADDRESS] [-n TEAM_NAME] [-r ROUND] [-f FLAG]
[-t MAX_TIME] [-i CALL_IDX] [-p [PORT]]
{putflag,getflag,putnoise,getnoise,havoc,listen}
positional arguments:
{putflag,getflag,putnoise,getnoise,havoc,listen}
The Method, one of ['putflag', 'getflag', 'putnoise',
'getnoise', 'havoc'] or "listen" to start checker
service
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
mode
-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/usage.md.
Now, code away :).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for enochecker-0.0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 714d52fe0a2a2b2247e10217bf546851a49df37607611916574f40742de7f058 |
|
MD5 | 2fa6e10a0aa37a1ad6e3d03bf1871723 |
|
BLAKE2b-256 | 764a132139d195765b02eae296a9b7acff6c4a71429cd001cf86f3f98e7aab83 |