2016-01-25 02:09:22 +00:00
<!DOCTYPE html>
< html ng-app = "FICApp" >
< head >
< meta charset = "utf-8" >
2016-10-13 17:11:34 +00:00
< title > Challenge Forensic< / title >
2016-01-25 02:09:22 +00:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< link href = "/css/bootstrap.min.css" type = "text/css" rel = "stylesheet" media = "screen" >
< link href = "/css/fic.css" type = "text/css" rel = "stylesheet" media = "screen" >
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- [if lt IE 9]>
< script src = "/assets/js/html5shiv.js" > < / script >
< script src = "/assets/js/respond.min.js" > < / script >
<![endif]-->
< link rel = "shortcut icon" type = "image/x-icon" href = "/favicon.ico" >
< meta name = "author" content = "EPITA Laboratoire SRS" >
< meta name = "robots" content = "all" >
< base href = "/" >
< script src = "/js/angular.min.js" > < / script >
< / head >
2017-03-31 17:47:48 +00:00
< body style = "overflow: hidden;" class = "container-fluid" ng-controller = "DataController" >
< div class = "row" style = "margin-top: 10px" >
< div class = "col-xs-8" >
< noscript >
< div class = "alert alert-danger" >
< strong > Veuillez activer le JavaScript.< / strong > Ce site requiert un navigateur interprêtant le JavaScript pour fonctionner. Veuillez l'activer ou en télécharger un supportant cette technologie.
2017-01-15 22:56:28 +00:00
< / div >
2017-03-31 17:47:48 +00:00
< / noscript >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div ng-repeat = "(k,s) in scene" class = "repeatedd-item" >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "well" ng-if = "s.type == 'welcome' && !s.params.hide && s.params.kind == 'init'" >
< h1 > Bienvenue au challenge forensic !< / h1 >
< p class = "lead text-justify" >
Avant de vous installer, venez récupérer votre clef USB auprès
de notre équipe. Elle contient le certificat qui vous permettra
de vous authentifier auprès de notre serveur.
< / p >
< p class = "lead text-justify" >
Une fois connecté au réseau, contactez notre serveur sur :
< span style = "display: block; font-size: 200%" class = "text-center" >
< a style = "font-family: mono" href = "https://fic.srs.epita.fr/" > < span class = "text-info" > https://fic.srs.epita.fr/< / span > < / a >
< / span >
< / p >
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "panel panel-success " ng-if = "s.type == 'welcome' && !s.params.hide && s.params.kind == 'countdown'" >
< div class = "panel-heading" >
< h3 class = "panel-title" > < strong > Le challenge forensic 2017 est sur le point de commencer !< / strong > < / h3 >
2016-01-25 02:09:22 +00:00
< / div >
2017-03-31 17:47:48 +00:00
< div class = "panel-body text-center" style = "font-size: 450%;" ng-if = "startIn" > {{ startIn }}< / div >
< div class = "panel-body text-center" style = "font-size: 450%;" ng-if = "!startIn" > Go, go, go !< / div >
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "well" ng-if = "s.type == 'welcome' && !s.params.hide && s.params.kind == 'public'" >
< h1 > Bienvenue au challenge forensic !< / h1 >
< p class = "lead text-justify" >
Durant ce challenge, les équipes doivent remonter des scénarii
d'attaques auxquels nos systèmes d'information font faces
chaque jour : fuite de données, compromission d'un poste de
travail, exploitation de vulnérabilités d'un site web, ...
< / p >
< p class = "lead text-justify" >
Pour valider un challenge, chaque participant va télécharger :
soit des journaux d'évènements, des extraits de trafic réseau
ou même des copies figées de la mémoire vive de machines
malveillantes, pour essayer de comprendre comment l'attaquant a
contourné la sécurité de la machine et quelles actions hostiles
ont été effectuées.
< / p >
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "well" ng-if = "s.type == 'message' && !s.params.hide" >
< h1 ng-if = "s.params.title" > < strong > {{ s.params.title }}< / strong > < / h1 >
< p ng-if = "s.params.lead" class = "lead text-justify" > {{ s.params.lead }}< / p >
< p ng-bind-html = "s.params.html" ng-if = "s.params.html" > < / p >
< p ng-if = "s.params.text" > {{ s.params.text }}< / p >
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "panel {{ s.params.kind }}" ng-if = "s.type == 'panel' && !s.params.hide" >
< div class = "panel-heading" ng-if = "s.params.title" >
< h3 class = "panel-title" > {{ s.params.title }}< / h3 >
2016-01-25 02:09:22 +00:00
< / div >
2017-03-31 17:47:48 +00:00
< div class = "panel-body" ng-if = "s.params.text" > {{ s.params.text }}< / div >
< div class = "panel-body" ng-if = "s.params.html" ng-bind-html = "s.params.html" > < / div >
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "well" ng-if = "s.type == 'exercice' && !s.params.hide" >
< p class = "lead" >
< strong > Challenge < em > {{ themes[my.exercices[s.params.exercice].theme_id].exercices[s.params.exercice].title }}< / em > du thème {{ themes[my.exercices[s.params.exercice].theme_id].name }}< / strong >
< small class = "authors" ng-if = "themes[my.exercices[s.params.exercice].theme_id].authors" > par {{ themes[my.exercices[s.params.exercice].theme_id].authors }}< / small >
< / p >
< p ng-bind-html = "my.exercices[s.params.exercice].statement" > < / p >
< ul class = "list-inline" >
< li > Rapporte < ng-pluralize count = "themes[my.exercices[s.params.exercice].theme_id].exercices[s.params.exercice].gain" when = "{'0': 'aucun point', 'one': '{} point', 'other': '{} points'}" > < / ng-pluralize > < / li >
< li > < ng-pluralize count = "my.exercices[s.params.exercice].files.length" when = "{'0': 'Aucun fichier disponible', 'one': '{} fichier disponible', 'other': '{} fichiers disponibles'}" > < / ng-pluralize > < / li >
< li ng-if = "my.exercices[s.params.exercice].hints.length" > < ng-pluralize count = "my.exercices[s.params.exercice].hints.length" when = "{'0': 'Aucun indice disponible', 'one': '{} indice disponible', 'other': '{} indices disponibles'}" > < / ng-pluralize > < / li >
< li > Tenté par < ng-pluralize count = "themes[my.exercices[s.params.exercice].theme_id].exercices[s.params.exercice].tried" when = "{'0': 'aucune équipe', 'one': '{} équipe', 'other': '{} équipes'}" > < / ng-pluralize > < / li >
< li > < ng-pluralize count = "my.exercices[s.params.exercice].solved_number" when = "{'0': 'aucun tentative', 'one': '{} tentative', 'other': '{} tentatives'}" > < / ng-pluralize > < / li >
< li > Résolu par < ng-pluralize count = "themes[my.exercices[s.params.exercice].theme_id].exercices[s.params.exercice].solved" when = "{'0': 'aucune équipe', 'one': '{} équipe', 'other': '{} équipes'}" > < / ng-pluralize > < / li >
< / ul >
< / div >
< div class = "panel" ng-if = "s.type == 'table' && !s.params.hide" >
< table class = "table table-bordered table-striped table-condensed" >
2016-01-25 02:09:22 +00:00
< thead >
< tr >
2017-03-31 17:47:48 +00:00
< th class = "frotated" > < / th >
< th class = "rotated" ng-repeat = "(tid,th) in themes" ng-if = "s.params.themes.indexOf(tid-0) !== -1" > < div > < span > {{ th.name }}< / span > < / div > < / th >
2016-01-25 02:09:22 +00:00
< / tr >
< / thead >
2017-03-31 17:47:48 +00:00
< tbody ng-if = "s.params.kind == 'levels'" >
< tr ng-repeat = "lvl in [1,2,3,4,5]" >
< th class = "text-center" > < nobr > Niveau {{ lvl }}< / nobr > < / th >
< td ng-repeat = "(tid,th) in themes" class = "text-center" ng-if = "s.params.themes.indexOf(tid-0) !== -1" >
< span ng-repeat = "exercice in th.exercices" ng-if = "$index == lvl-1 && (exercice.tried || lvl == 1)" ng-class = "{'text-primary': exercice.solved == 0, 'text-success': exercice.solved >= 1, 'text-bold': exercice.solved >= 1, 'text-warning': exercice.solved == 0 && exercice.tried}" >
< span ng-if = "exercice.solved" > {{ exercice.solved }}< / span >
< span ng-if = "!exercice.solved" > {{ exercice.tried }}< / span >
< / span >
< / td >
2016-01-25 02:09:22 +00:00
< / tr >
< / tbody >
2017-03-31 17:47:48 +00:00
< tbody ng-if = "s.params.kind == 'teams'" >
< tr ng-repeat = "team in rank | orderBy: 'rank' | limitTo: s.params.limit: s.params.begin" ng-if = "s.params.teams.indexOf(team.id-0) !== -1" ng-controller = "TeamController" >
< th class = "text-center" > {{ team.rank }}< sup ng-if = "team.rank == 1" > er< / sup > < sup ng-if = "team.rank > 1" > e< / sup > < br > < span style = "text-overflow: ellipsis; display: inline-block; width: 82px;overflow: hidden;" > {{ team.name }}< / span > < / th >
< td ng-repeat = "(tid,th) in themes" class = "text-center" ng-if = "mystats && s.params.themes.indexOf(tid-0) !== -1" >
< span ng-class = "{'text-success': mystats.themes[tid].solved}" > {{ mystats.themes[tid].solved }}/{{ mystats.themes[tid].total }}< / span >
< span ng-class = "{'text-warning': mystats.themes[tid].solved < mystats.themes[tid].tried}" > ({{ mystats.themes[tid].tries }})< / span >
< / td >
< / tr >
< / tbody >
< tfoot ng-if = "s.params.total" ng-init = "team={id:0}" >
< tr ng-controller = "TeamController" >
< td class = "text-right" >
< span ng-if = "s.params.kind == 'levels'" > Résolus< / span >
< span ng-if = "s.params.kind == 'teams'" > Total résolus< / span > < br >
Tentatives
< / td >
< td ng-repeat = "(tid,th) in themes" class = "text-center" ng-if = "mystats && s.params.themes.indexOf(tid-0) !== -1" >
< strong > {{ mystats.themes[tid].solved }}< / strong > < br >
{{ mystats.themes[tid].tries }}
< / td >
< / tr >
< / tfoot >
2016-01-25 02:09:22 +00:00
< / table >
2017-03-31 17:47:48 +00:00
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "panel" ng-if = "s.type == 'rank' && !s.params.hide" >
< table class = "table table-bordered table-striped table-condensed" >
2016-01-25 02:09:22 +00:00
< thead >
< tr >
< th class = "text-right" > Place< / th >
< th > Équipe< / th >
< th > Score< / th >
< / tr >
< / thead >
2017-03-31 17:47:48 +00:00
< tbody ng-if = "s.params.which == 'general'" >
< tr ng-repeat = "r in rank | orderBy: 'rank' | limitTo: s.params.limit: s.params.begin" >
< th class = "text-right" > {{ r.rank }}< sup ng-if = "r.rank == 1" > er< / sup > < sup ng-if = "r.rank > 1" > e< / sup > < / th >
2016-01-25 02:09:22 +00:00
< td > {{ r.name }}< / td >
< td > {{ r.score }}< / td >
< / tr >
< / tbody >
< / table >
2017-03-31 17:47:48 +00:00
< / div >
2016-01-25 02:09:22 +00:00
< / div >
2017-03-31 17:47:48 +00:00
< / div >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div class = "col-xs-4" >
2016-01-25 02:09:22 +00:00
2017-03-31 17:47:48 +00:00
< div ng-controller = "EventsController" >
< div ng-repeat = "e in events | limitTo: 7" class = "repeated-item" >
2016-01-25 02:09:22 +00:00
< div class = "alert" ng-class = "e.kind" >
< div class = "heading" > {{ e.since | since }}< / div >
< span ng-bind-html = "e.txt" > < / span >
< / div >
< / div >
2017-03-31 17:47:48 +00:00
< div style = "box-shadow: 0px -5px 5px 5px #272b30; position: fixed; bottom: calc(14vh - 1px); right: 0; width: 33vw;" class = "navbar navbar-inverse" >
< div class = "text-center" ng-if = "time.hours === 0 || time.hours" style = "margin-top: -5px;" ng-controller = "TimeController" >
< div id = "clock" ng-class = "{expired: time.expired, end: time.end}" style = "font-size: 50px" ng-cloak >
< span id = "hours" > {{ time.hours | time }}< / span >
< span class = "point" > :< / span >
< span id = "min" > {{ time.minutes | time }}< / span >
< span class = "point" > :< / span >
< span id = "sec" > {{ time.seconds | time }}< / span >
< / div >
< div style = "font-size: 18px; margin-top: -15px; text-shadow: 0 0 6px #446688;" >
< span ng-if = "!time.end && time.duration != time.remaining" > Temps restant du challenge forensic< / span >
< span ng-if = "!time.end && time.duration == time.remaining" > Le challenge forensic va bientôt commencer !< / span >
< span ng-if = "time.end" > Le challenge forensic est terminé !< / span >
< / div >
< / div >
< div id = "clock" class = "col-sm-6" ng-if = "!(time.hours === 0 || time.hours)" >
{{ time.start | date:"shortDate" }}
< / div >
< / div >
< div style = "position: fixed; bottom: 0; right: 0; width: 33vw; height: 14vh" class = "navbar navbar-inverse" >
< div class = "carousel slide" id = "carousel-logos" data-ride = "carousel" >
< div class = "carousel-inner" >
< div class = "item active" >
< div class = "carousel-caption" >
< a href = "http://www.epita.fr/" > < img src = "/img/epita.png" alt = "Epita" style = "width:30%" > < / a >
< a href = "https://srs.epita.fr/" > < img src = "/img/srs.png" alt = "Laboratoire SRS" style = "width:30%" > < / a >
< img src = "/img/rcc.png" alt = "Réserve Citoyenne Cyberdéfense" style = "width:30%" >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption" style = "padding: 0 10px" >
< h2 > Bienvenue au challenge forensic !< / h2 >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption" >
< p class = "text-justify text-bold" style = "padding: 20px 16px; font-size: 111%" >
Ce challenge met en scène des scénarii d'attaques auxquels
nos systèmes d'information font faces chaque jour.
< / p >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption" >
< p class = "text-justify text-bold" style = "padding: 20px 16px; font-size: 111%" >
Les 42 équipes doivent, en 4 heures, retracer les attaques à la
recherche des données exfiltrées.
< / p >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption row" style = "padding: 12px" >
< div class = "col-xs-4" >
< a href = "https://www.epita.fr/" > < img src = "/img/epita.png" alt = "Épita" style = "height: 10vh" > < / a >
< / div >
< p class = "col-xs-8 text-bold" style = "font-size: 111%" >
Les challenges ont été réalisés par les étudiants de la
spécialisation SRS de l'Épita
< / p >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption row" style = "padding: 12px" >
< div class = "col-xs-4" >
< img src = "/img/rcc.png" alt = "Réserve Citoyenne Cyberdéfense" style = "max-width:100%; max-height: 11vh" >
< / div >
< p class = "col-xs-8 text-bold" style = "padding: 10px 10px 10px 0; font-size: 111%" >
Avec le parrainage du réseau de la Réserve Citoyenne Cyberdéfense
< / p >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption" style = "padding: 3px 25px; width: 32vw;" >
< table class = "table table-bordered table-condensed table-striped" >
< tbody >
< tr >
< td > 11 h< / td >
< td > Accueil des équipes< / td >
< / tr >
< tr >
< td > 11 h 30< / td >
< td > Début du challenge< / td >
< / tr >
< tr >
< td > 15 h 30< / td >
< td > Fin du challenge< / td >
< / tr >
< tr >
< td > 16 h 00< / td >
< td > Remise des prix< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "item" >
< div class = "carousel-caption row" style = "padding: 12px" >
< p class = "text-bold" style = "padding: 5px; font-size: 105%" >
Retrouvez la correction des challenges dès demain sur :
< span style = "display: block; font-size: 150%" class = "text-center" >
< a style = "font-family: mono" href = "https://fic.srs.epita.fr/" > < span class = "text-info" > https://fic.srs.epita.fr/< / span > < / a >
< / span >
< / p >
< / div >
< / div >
< / div >
< / div >
< / div >
2016-01-25 02:09:22 +00:00
< / div >
< / div >
< / div >
< script src = "/js/jquery.min.js" > < / script >
< script src = "/js/bootstrap.min.js" > < / script >
< script src = "/js/angular-animate.min.js" > < / script >
< script src = "/js/angular-route.min.js" > < / script >
< script src = "/js/angular-sanitize.min.js" > < / script >
2016-10-13 17:34:53 +00:00
< script src = "/js/i18n/angular-locale_fr-fr.js" > < / script >
2016-01-25 02:09:22 +00:00
< script src = "/js/public.js" > < / script >
2017-01-14 13:57:39 +00:00
< script src = "/js/common.js" > < / script >
2017-03-31 17:47:48 +00:00
< script >
$(".carousel").carousel({
interval: 21000
});
< / script >
2016-01-25 02:09:22 +00:00
< / body >
< / html >