Submission server/infrastructure for the SRS challenge at FIC https://fic.srs.epita.fr/
Go to file
nemunaire 3466f4956a Add LICENSE: chose MIT 2018-05-11 15:03:11 +02:00
admin admin/sync: update README.md to introduce new syntax of the year 2018-05-11 15:03:10 +02:00
backend Write docs! 2018-05-11 15:03:09 +02:00
configs Add Dockerfiles and docker-compose 2018-05-11 15:03:10 +02:00
dashboard/static Extract public interface into a separate project: dashboard 2018-05-11 15:03:10 +02:00
frontend Extract public interface into a separate project: dashboard 2018-05-11 15:03:10 +02:00
libfic admin/pki: use symlink instead of DB to associate certificate to team 2018-05-11 15:03:10 +02:00
password_paper password_paper: fix handling of ^ 2018-05-11 15:03:10 +02:00
settings Write docs! 2018-05-11 15:03:09 +02:00
.gitignore Add configuration for prod 2018-05-11 05:27:51 +02:00
Dockerfile-admin Add Dockerfiles and docker-compose 2018-05-11 15:03:10 +02:00
Dockerfile-backend Add Dockerfiles and docker-compose 2018-05-11 15:03:10 +02:00
Dockerfile-frontend Add Dockerfiles and docker-compose 2018-05-11 15:03:10 +02:00
LICENSE Add LICENSE: chose MIT 2018-05-11 15:03:11 +02:00
README.md Start writing hands-on documentation 2018-05-11 15:03:11 +02:00
docker-compose.yml Add Dockerfiles and docker-compose 2018-05-11 15:03:10 +02:00
fickit-backend.yml Add configuration for prod 2018-05-11 05:27:51 +02:00
fickit-frontend.yml Add configuration for prod 2018-05-11 05:27:51 +02:00
htdocs-admin admin: can give the static dir location 2017-11-25 15:01:01 +01:00
htdocs-frontend frontend: add link to frontend htdocs, like admin static pages 2017-11-25 15:01:01 +01:00

README.md

FIC Forensic CTF Platform

This is a CTF server for distributing and validating challenges. It is design to be robust, so it uses some uncommon technics like client certificate for authentication, lots of state of the art cryptographic methods and aims to be deployed in a DMZ network architecture.

Local developer setup

The importance of clone location

This is a monorepo, primarly intended for Go programming. If you want to be able to do programming stuff, you should take care of the path where you clone this repository, as it should be located inside your GOPATH:

git clone https://git.nemunai.re/fic/server.git $GOPATH/src/srs.epita.fr/fic-server

Using Docker

Use docker-compose build, then docker-compose up to launch the infrastructure.

After booting, you'll be able to reach the main interface at: http://localhost:8042/ and the admin one at: http://localhost:8081/.

Manual builds

Running this project requires a web server (configuration is given for nginx), a database (currently supporting only MySQL), a go compiler for the revision 1.6 at least and a inotify-aware system.

  1. First, you'll need to retrieve the dependencies:

     go get -d srs.epita.fr/fic-server/admin
     go get -d srs.epita.fr/fic-server/backend
     go get -d srs.epita.fr/fic-server/frontend
    
  2. Then, build the three Go projects:

     go build -o $GOPATH/src/srs.epita.fr/fic-server/fic-admin srs.epita.fr/fic-server/admin
     go build -o $GOPATH/src/srs.epita.fr/fic-server/fic-backend srs.epita.fr/fic-server/backend
     go build -o $GOPATH/src/srs.epita.fr/fic-server/fic-frontend srs.epita.fr/fic-server/frontend
    
  3. Before launching anything, you need to create a database:

     mysql -u root -p <<EOF
     CREATE DATABASE fic;
     CREATE USER fic@localhost IDENTIFIED BY 'fic';
     GRANT ALL ON fic.* TO fic@localhost;
     EOF
    

    By default, expected credentials for development purpose is fic, for both username, password and database name. If you want to use other credentials, define the corresponding environment variable: MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD and MYSQL_DATABASE. Those variables are the one used by the mysql docker image, so just link them together if you use containers.

  4. Launch it!

     ./fic-admin &
    

    After initializing the database, the server will listen on http://localhost:8081/: this is the administration part.

     ./fic-backend &
    

    This daemon generates static and team related files and then waits for new submissions (expected in submissions directory). It only watchs modifications on the file system, it has no web interface.

     ./fic-frontend &
    

    This last server exposes an API that gives time synchronization to clients and handle submission reception (but without treating them).

For the moment, a web server is mandatory to serve static files, look at the samples given in the configs/ directory.