{ "info": { "author": "domenukk", "author_email": "dmaier@sect.tu-berlin.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# EnoChecker\n\nThis is the checker lib that shall be used by all checkers in ENOWARS3.\n\nFor a simple checker, subclass `enochecker.BaseChecker`.\n```python\nfrom enochecker import BaseChecker, BrokenServiceException, run\n\nclass AwesomeChecker(BaseChecker):\n\n def putflag(self): # type: () -> None\n # TODO: Put flag to service\n self.debug(\"flag is {}\".format(self.flag))\n self.http_post(\"/putflaghere\", params={\"flag\": self.flag})\n # ...\n\n def getflag(self): # type: () -> None\n # tTODO: Get the flag.\n if not self.http_get(\"/getflag\") == self.flag:\n raise BrokenServiceException(\"Ooops, wrong Flag\")\n\n def putnoise(self):\n # put some noise\n with self.connect() as telnet:\n telnet.write(self.noise) \n\n def getnoise(self):\n with self.connect() as telnet:\n telnet.write(\"gimmeflag\\n\")\n telnet.read_expect(self.noise)\n\n def havoc(self):\n self.http(\"FUNFUN\").text == \"FUNFUN\"\n\n\nif __name__ == \"__main__\":\n run(AwesomeChecker)\n```\n\nA full example, including helpful comments, can be found in [examplechecker.py](examplechecker.py).\n\nThe full API specification can be found [docs/api.md](docs/api.md).\n(Generated from docstring using `pydocmd simple ...`).\n\n## Installation\nFor now, the library can be installed using pip/git, like:\n`pip install git+https://github.com/domenukk/enochecker`\n\n## Launch Checker\nThe goal is to have checkers launched via uSWGI and the Engine talking to it via http. \nFor testing, however, you can use the commandline instead:\n\n```\nusage: check.py run [-h] [-a ADDRESS] [-n TEAM_NAME] [-r ROUND] [-f FLAG]\n [-t MAX_TIME] [-i CALL_IDX] [-p [PORT]]\n {putflag,getflag,putnoise,getnoise,havoc,listen}\n\npositional arguments:\n {putflag,getflag,putnoise,getnoise,havoc,listen}\n The Method, one of ['putflag', 'getflag', 'putnoise',\n 'getnoise', 'havoc'] or \"listen\" to start checker\n service\n\noptional arguments:\n -h, --help show this help message and exit\n -a ADDRESS, --address ADDRESS\n The ip or address of the remote team to check\n -n TEAM_NAME, --team_name TEAM_NAME\n The teamname of the team to check\n -r ROUND, --round ROUND\n The round we are in right now\n -f FLAG, --flag FLAG The Flag, a Fake flag or a Unique ID, depending on the\n mode\n -t MAX_TIME, --max_time MAX_TIME\n The maximum amount of time the script has to execute\n in seconds\n -i CALL_IDX, --call_idx CALL_IDX\n Unique numerical index per round. Each id only occurs\n once and is tighly packed, starting with 0. In a\n service supporting multiple flags, this would be used\n to decide which flag to place.\n -p [PORT], --port [PORT]\n The port the checker should attack\n\n````\n\n## Why use it at all?\n\nMany nice features for CTF Checker writing, obviously.\nAlso, under-the-hood changes on the Engine can be made without any problems.\n\nFor further instructions on how to write a checker with this Framework look at [docs/usage.md](docs/usage.md).\n\nNow, code away :).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ENOWARS/enochecker", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "enochecker", "package_url": "https://pypi.org/project/enochecker/", "platform": "", "project_url": "https://pypi.org/project/enochecker/", "project_urls": { "Homepage": "https://github.com/ENOWARS/enochecker" }, "release_url": "https://pypi.org/project/enochecker/0.0.6/", "requires_dist": [ "atomicwrites (==1.3.0)", "attrs (==19.1.0)", "blinker (==1.4)", "certifi (==2019.3.9)", "chardet (==3.0.4)", "Click (==7.0)", "colorama (==0.4.1)", "elastic-apm (==4.2.2)", "Flask (==1.0.2)", "future (==0.17.1)", "futures (==3.1.1)", "idna (==2.8)", "itsdangerous (==1.1.0)", "Jinja2 (==2.10.1)", "MarkupSafe (==1.1.1)", "pathlib2 (==2.3.3)", "pluggy (==0.9.0)", "psutil (==5.6.2)", "py (==1.8.0)", "uwsgidecorators", "pymongo (==3.8.0)", "pytest (==4.4.1)", "requests (==2.21.0)", "six (==1.12.0)", "typing (==3.6.6)", "urllib3 (==1.24.3)", "websocket-client (==0.56.0)", "Werkzeug (==0.15.3)" ], "requires_python": "", "summary": "Library to build checker scripts for EnoEngine A/D CTF Framework in Python", "version": "0.0.6" }, "last_serial": 5979374, "releases": { "0.0.5": [ { "comment_text": "", "digests": { "md5": "dbed3bcbdeaaec5c37069e9335327296", "sha256": "e4ad7633ab7d2d8ab4842f98919ca67868b231b14fc71bf67850015fc16a6e5e" }, "downloads": -1, "filename": "enochecker-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "dbed3bcbdeaaec5c37069e9335327296", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31223, "upload_time": "2019-10-07T22:30:03", "url": "https://files.pythonhosted.org/packages/50/51/227f34b4470cb1daee7a257ddeaf3fab921ad1e9cec742edfaf2a5fa8bd2/enochecker-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10728d500f77e43a1d21f616d5b9e5b5", "sha256": "d0da2ae5dc44b272825a98ec87b93cb4ed24623c59d37b1294f70d384420b8b5" }, "downloads": -1, "filename": "enochecker-0.0.5.tar.gz", "has_sig": false, "md5_digest": "10728d500f77e43a1d21f616d5b9e5b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27880, "upload_time": "2019-10-07T22:30:06", "url": "https://files.pythonhosted.org/packages/fc/1c/493b7096756c2034192155bb345a95acbf6678772950d9b883f022f77ef5/enochecker-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "4979e3e9261ff829bf8918503170fc5b", "sha256": "18aeb97a9960128ef81372d745701be4c772fe75e706d77778be9f6a568e948d" }, "downloads": -1, "filename": "enochecker-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "4979e3e9261ff829bf8918503170fc5b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31255, "upload_time": "2019-10-15T20:39:33", "url": "https://files.pythonhosted.org/packages/e0/1c/c219f816a67b5af8617077cc80c34fc1409bb083fbed80de0b28135038af/enochecker-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ad808f89e66d640868e603ebb9270bf", "sha256": "ca408a486d78052f481adb203c256be5d24b6c7e8a47ec0de9d928a59035d582" }, "downloads": -1, "filename": "enochecker-0.0.6.tar.gz", "has_sig": false, "md5_digest": "2ad808f89e66d640868e603ebb9270bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27907, "upload_time": "2019-10-15T20:39:36", "url": "https://files.pythonhosted.org/packages/18/be/3059c129be0eb6abf59a199bb0fe7bd5868e2c6171d7c4328d72a2dd16dc/enochecker-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4979e3e9261ff829bf8918503170fc5b", "sha256": "18aeb97a9960128ef81372d745701be4c772fe75e706d77778be9f6a568e948d" }, "downloads": -1, "filename": "enochecker-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "4979e3e9261ff829bf8918503170fc5b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31255, "upload_time": "2019-10-15T20:39:33", "url": "https://files.pythonhosted.org/packages/e0/1c/c219f816a67b5af8617077cc80c34fc1409bb083fbed80de0b28135038af/enochecker-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ad808f89e66d640868e603ebb9270bf", "sha256": "ca408a486d78052f481adb203c256be5d24b6c7e8a47ec0de9d928a59035d582" }, "downloads": -1, "filename": "enochecker-0.0.6.tar.gz", "has_sig": false, "md5_digest": "2ad808f89e66d640868e603ebb9270bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27907, "upload_time": "2019-10-15T20:39:36", "url": "https://files.pythonhosted.org/packages/18/be/3059c129be0eb6abf59a199bb0fe7bd5868e2c6171d7c4328d72a2dd16dc/enochecker-0.0.6.tar.gz" } ] }