https://wiki.hackbbs.org/api.php?action=feedcontributions&user=Korigan&feedformat=atomHackBBS - Contributions [fr]2024-03-28T18:44:56ZContributionsMediaWiki 1.42.0-alphahttps://wiki.hackbbs.org/index.php?title=Intelligence_DataSet&diff=93702Intelligence DataSet2024-01-13T20:26:58Z<p>Korigan : Page créée avec « TODO »</p>
<hr />
<div>TODO</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93701Roadmap2024-01-13T14:42:46Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /><br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
-Finir la description des roles sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS_Reloaded#Liste_des_t%C3%A2ches_pour_le_developement_de_HackBBS_Reloaded<br />
-Implementer les nouveaux roles {intel, pilot, ...) afin de rendre les premieres missions disponible<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Develop an IRC functino to get notified on IRC when something change on the wiki<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br /><br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit<br /><br />
-Publier la mission intel qui vise a scanner les domaines identifier comme source d'attaques: loadResource('classifyDomain.php')<br />
-Chiffrer les permissions des utilisateurs afin que meme les admins ne sachent pas a quel group apartient un utilisateur. Peut necessiter une implementation similaire aux certificats SSL avec verification des signatures des niveaux intermediaire afin de valider que toutes la chaine d'utilisateur detient reelement les droits requis.<br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93700Roadmap2024-01-13T14:41:36Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /><br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
-Finir la description des roles sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS_Reloaded#Liste_des_t%C3%A2ches_pour_le_developement_de_HackBBS_Reloaded<br />
-Implementer les nouveaux roles {intel, pilot, ...) afin de rendre les premieres missions disponible<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Develop an IRC functino to get notified on IRC when something change on the wiki<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br /><br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit<br /><br />
-Publier la mission intel qui vise a scanner les domaines identifier comme source d'attaques: loadResource('classifyDomain.php')<br />
-Chiffrer les permissions des utilisateurs afin que meme les admins ne sachent pas a quel group apartient un utilisateur. Peux necessiter une implementation similaire aux certificats SSL avec verification des signature des niveau intermediaire.<br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=FAQ_:_D%C3%A9veloppement_de_modules&diff=93675FAQ : Développement de modules2024-01-09T00:33:12Z<p>Korigan : </p>
<hr />
<div><br />
== Utiliser les sessions ==<br />
Le noyau gère une pseudo isolation des variables de session. Ceci empèche un module d'écraser accidentellement une variable de session d'un autre module.<br />
<br />
Il est donc prohibé d'utiliser directement le $_SESSION de php. Pour setter / getter des variables de session, vous devez passer le service SessionService.<br />
<br />
Pour setter une variable de session, il vous faudra une instance de votre implémentation de IModule ou a défaut le nom de la classe qui implémente IModule dans votre module.<br />
<br />
<br />
<code><br />
/*Sette une variable de session*/<br />
<br />
SessionService::setSessionVarForModule($instancedeIModule, "nomVariableDeSession", $variableDeSession);<br />
<br />
/*Recupere une variable de session*/<br />
<br />
SessionService::getSessionVarForModule($instancedeIModule, "nomVariableDeSession");<br />
</code><br />
<br />
== Récupérer l'utilisateur actuellement identifié ==<br />
<br />
SessionService::getAuthenticatedUsed();<br />
<br />
Renvoie un objet du type User contenant les informations de l'utilisateur actuellement loggé.<br />
<br />
== Vérifier si un utilisateur est connecté ==<br />
<br />
UserService::getInstance()->isUserLoggedIn();<br />
<br />
Renvoie true si un utilisateur est loggué, false sinon.<br />
<br />
== Vérifier les permissions d'un utilisateur ==<br />
<br />
UserService::getInstance()->isUserAllowed($permission);<br />
<br />
Renvoie true si l'utilisateur actuellement loggué dispose de la permission envoyée en argument. False sinon.<br />
<br />
== Documentation des modules pour les utilisateurs ==<br />
Certaines commandes doivent être expliquées aux utilisateurs les plus débutants. <br />
<br />
La documentation de ces commandes peut être hébergée sur ce wiki, ce qui facilite la mise à jour du contenu. Pour accéder au contenu du wiki, Reloaded peut utiliser l'[[API de MediaWiki]]. Voici un exemple de page :<br />
<br />
[[HackBBS:Py]]<br />
<br />
[[HackBBS:Authentification]]<br />
<br />
[[HackBBS:Cat]]<br />
<br />
[[HackBBS:Chat]]<br />
<br />
[[HackBBS:FindProxy]]<br />
<br />
[[HackBBS:Help]]<br />
<br />
[[HackBBS:Ls]]<br />
<br />
[[HackBBS:Nft]]<br />
<br />
[[HackBBS:NoHelper]]<br />
<br />
[[HackBBS:Reset]]<br />
<br />
[[HackBBS:Rm]]<br />
<br />
[[HackBBS:SetProxy]]<br />
<br />
[[HackBBS:Edit]]<br />
<br />
[[HackBBS:Msg]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93674HackBBS Reloaded2024-01-06T18:33:08Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les rôles ===<br />
L'[[administration des roles|administration des rôles]] doit se faire via un accès à la BDD.<br />
<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
# '''Exec'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Coordination des Recherches :''' Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.<br />
# '''Instructions à l'Équipe INTEL :''' Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.<br />
# '''Demandes aux Architectes :''' Les pilotes intéragissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.<br />
# '''Alignement Stratégique :''' Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.<br />
<br />
==== Intéraction avec les Autres Équipes : ====<br />
<br />
* '''INTEL :''' Collaboration étroite pour définir les objectifs de collecte d'informations.<br />
* '''ARCHITECTE :''' Demande de conception de solutions adaptées aux besoins identifiés.<br />
* '''FORMATEUR :''' Identification des besoins en formation pour renforcer les compétences des différentes équipes.<br />
* '''RH :''' Implication dans le recrutement et la constitution d'équipes performantes.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.<br />
<br />
=== Ressources Humaines (RH) ===<br />
L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Recrutement :''' L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.<br />
# '''Gestion des Effectifs :''' Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.<br />
# '''Communication Interne :''' Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.<br />
# '''Gestion des Projets RH :''' Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.<br />
# '''Relations Membres :''' L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de collaboration positif.<br />
<br />
==== Intéraction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.<br />
* '''INTEL :''' Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.<br />
* '''ARCHITECTE :''' Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.<br />
* '''FORMATEUR :''' Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'équipe INTEL a pour mission de collecter et d'organiser des renseignements stratégiques afin d'anticiper les menaces et de renforcer la posture de sécurité de l'organisation. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
La collecte de l'intel peut se faire via differentes methodes tel que:<br />
* SIGINT: Le SIGINT est un renseignement dérivé de signaux et de systèmes électroniques utilisés par des cibles étrangères, tels que des systèmes de communication.<br />
* MASINT: MASINT, ou Measurement and Signature Intelligence, est une discipline de renseignement fondée sur la capture et la mesure des caractéristiques et des composants intrinsèques d'un objet ou d'une activité.<br />
* HUMINT : L’intelligence humaine – également connue sous le nom de HUMINT – désigne essentiellement les informations collectées et fournies par une personne. C’est probablement l’un des principaux moyens de collecte de renseignements qui vient à l’esprit lorsque la plupart des gens pensent à l’espionnage.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Collecte d'Intelligence :''' Les membres de l'équipe INTEL sont chargés de collecter des informations provenant de sources variées, y compris l'OSINT (Open Source Intelligence) et des sources privées. Ils rassemblent des données pertinentes pour comprendre les tendances, les acteurs, et les menaces potentiels.<br />
# '''Classification de l'Information :''' Les données collectées sont classifiées en trois catégories : Noire (confidentielle), Grise (semi-confidentielle), et Blanche (publique). Cette classification permet de déterminer le niveau de sensibilité et de partager les informations de manière appropriée.<br />
# '''Collaboration avec l'Équipe PILOTE :''' L'équipe INTEL travaille en étroite collaboration avec l'équipe PILOTE pour définir les objectifs de collecte d'informations alignés sur la stratégie globale de l'organisation. Ils fournissent des informations cruciales pour orienter les recherches et les opérations.<br />
# '''Analyse de l'Information :''' Les membres de l'équipe INTEL analysent les données collectées pour identifier des tendances, des vulnérabilités potentielles, et des menaces émergentes. Ils produisent des rapports d'analyse détaillés pour informer les prises de décisions au niveau stratégique.<br />
# '''Participation à des Opérations Spécifiques :''' L'équipe INTEL peut être impliquée dans des opérations spécifiques, telles que la recherche approfondie sur des acteurs malveillants, la surveillance d'infrastructures ciblées, et la collecte d'informations sensibles.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Définition des objectifs de collecte d'informations et partage des analyses pour orienter les décisions stratégiques.<br />
* '''ARCHITECTE :''' Informations sur les menaces actuelles et potentielles pour guider la conception de nouvelles solutions sécurisées.<br />
* '''EXEC :''' Collaboration pour comprendre les tactiques et techniques d'attaques émergentes, et ajustement des scénarios de tests d'intrusion en conséquence.<br />
* '''FORMATEUR :''' Partage de connaissances sur les dernières tendances en matière de sécurité et de renseignement.<br />
* '''RH :''' Identification des compétences spécifiques nécessaires au sein de l'équipe INTEL.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe INTEL doivent avoir des compétences avancées en collecte de renseignements, une compréhension approfondie des menaces cybernétiques, et la capacité à produire des analyses de qualité. La discrétion et le respect des protocoles de sécurité sont impératifs étant donné la nature sensible des informations manipulées. La collaboration et la communication efficace avec les autres équipes sont également essentielles pour garantir une réponse proactive aux menaces.<br />
<br />
=== EXEC (Execution / Red Team) ===<br />
L'équipe EXEC est chargée de mener des attaques de type Red Team, contribuant ainsi à renforcer la sécurité de l'organisation en identifiant les vulnérabilités et en évaluant l'efficacité des mesures de défense.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Exécution d'Attaques Red Team :''' Les membres de l'équipe EXEC sont des spécialistes en test d'intrusion, chargés de simuler des attaques réalistes pour évaluer la résilience du système de sécurité. Ils utilisent des techniques d'attaques avancées pour identifier les faiblesses potentielles.<br />
# '''Évaluation des Vulnérabilités :''' Ils analysent les systèmes, les réseaux, les applications, et les infrastructures pour découvrir des vulnérabilités susceptibles d'être exploitées par des attaquants réels. Cela inclut la recherche de CVE, l'analyse des configurations, et la recherche de points faibles.<br />
# '''Rapports d'Incidents :''' Les membres de l'équipe EXEC documentent de manière détaillée les résultats de leurs tests d'intrusion, fournissant des rapports complets sur les vulnérabilités découvertes, les vecteurs d'attaque utilisés, et les recommandations pour renforcer la sécurité.<br />
# '''Collaboration avec les Autres Équipes :''' Ils interagissent avec les équipes PILOTE, INTEL, ARCHITECTE, et FORMATEUR pour partager des informations sur les scénarios d'attaques simulées, les résultats des tests, et les leçons apprises. Cette collaboration permet d'améliorer constamment les défenses de l'organisation.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Présentation des résultats des attaques simulées, ajustement des scénarios en fonction des objectifs stratégiques.<br />
* '''INTEL :''' Partage d'informations sur les techniques d'attaque émergentes et collaboration pour intégrer ces informations dans les stratégies défensives.<br />
* '''ARCHITECTE :''' Recommandations pour renforcer l'architecture des systèmes en fonction des vulnérabilités identifiées.<br />
* '''FORMATEUR :''' Contribution à la formation de l'équipe sur les dernières techniques d'attaques et les moyens de défense.<br />
* '''RH :''' Participation aux processus de recrutement pour s'assurer que l'équipe EXEC dispose des compétences nécessaires.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe EXEC doivent démontrer une expertise approfondie en matière de sécurité informatique, de compréhension des tactiques d'attaques, et de capacité à penser comme un attaquant. Ils doivent être capables de travailler de manière autonome et en équipe, avec un souci du détail pour identifier des vulnérabilités subtiles. La communication claire et la capacité à documenter de manière exhaustive sont cruciales pour garantir la valeur des tests d'intrusion et la mise en place de solutions de sécurité efficaces.<br />
<br />
== Liste des tâches pour le developement de HackBBS Reloaded ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#008000">FAIT</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
Pour une liste complete, voir la [[Roadmap]]<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93619HackBBS Reloaded2023-12-05T01:14:26Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
L'[[administration des roles]] doit se faire via un acces a la BDD.<br />
<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
# '''Exec'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Coordination des Recherches :''' Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.<br />
# '''Instructions à l'Équipe INTEL :''' Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.<br />
# '''Demandes aux Architectes :''' Les pilotes interagissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.<br />
# '''Alignement Stratégique :''' Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''INTEL :''' Collaboration étroite pour définir les objectifs de collecte d'informations.<br />
* '''ARCHITECTE :''' Demande de conception de solutions adaptées aux besoins identifiés.<br />
* '''FORMATEUR :''' Identification des besoins en formation pour renforcer les compétences des differentes équipes.<br />
* '''RH :''' Implication dans le recrutement et la constitution d'équipes performantes.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.<br />
<br />
=== Ressources Humaines (RH) ===<br />
L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Recrutement :''' L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.<br />
# '''Gestion des Effectifs :''' Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.<br />
# '''Communication Interne :''' Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.<br />
# '''Gestion des Projets RH :''' Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.<br />
# '''Relations Membres :''' L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de colaboration positif.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.<br />
* '''INTEL :''' Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.<br />
* '''ARCHITECTE :''' Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.<br />
* '''FORMATEUR :''' Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'équipe INTEL a pour mission de collecter et d'organiser des renseignements stratégiques afin d'anticiper les menaces et de renforcer la posture de sécurité de l'organisation. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Collecte d'Intelligence :''' Les membres de l'équipe INTEL sont chargés de collecter des informations provenant de sources variées, y compris l'OSINT (Open Source Intelligence) et des sources privées. Ils rassemblent des données pertinentes pour comprendre les tendances, les acteurs, et les menaces potentiels.<br />
# '''Classification de l'Information :''' Les données collectées sont classifiées en trois catégories : Noire (confidentielle), Grise (semi-confidentielle), et Blanche (publique). Cette classification permet de déterminer le niveau de sensibilité et de partager les informations de manière appropriée.<br />
# '''Collaboration avec l'Équipe PILOTE :''' L'équipe INTEL travaille en étroite collaboration avec l'équipe PILOTE pour définir les objectifs de collecte d'informations alignés sur la stratégie globale de l'organisation. Ils fournissent des informations cruciales pour orienter les recherches et les opérations.<br />
# '''Analyse de l'Information :''' Les membres de l'équipe INTEL analysent les données collectées pour identifier des tendances, des vulnérabilités potentielles, et des menaces émergentes. Ils produisent des rapports d'analyse détaillés pour informer les prises de décisions au niveau stratégique.<br />
# '''Participation à des Opérations Spécifiques :''' L'équipe INTEL peut être impliquée dans des opérations spécifiques, telles que la recherche approfondie sur des acteurs malveillants, la surveillance d'infrastructures ciblées, et la collecte d'informations sensibles.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Définition des objectifs de collecte d'informations et partage des analyses pour orienter les décisions stratégiques.<br />
* '''ARCHITECTE :''' Informations sur les menaces actuelles et potentielles pour guider la conception de nouvelles solutions sécurisées.<br />
* '''EXEC :''' Collaboration pour comprendre les tactiques et techniques d'attaques émergentes, et ajustement des scénarios de tests d'intrusion en conséquence.<br />
* '''FORMATEUR :''' Partage de connaissances sur les dernières tendances en matière de sécurité et de renseignement.<br />
* '''RH :''' Identification des compétences spécifiques nécessaires au sein de l'équipe INTEL.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe INTEL doivent avoir des compétences avancées en collecte de renseignements, une compréhension approfondie des menaces cybernétiques, et la capacité à produire des analyses de qualité. La discrétion et le respect des protocoles de sécurité sont impératifs étant donné la nature sensible des informations manipulées. La collaboration et la communication efficace avec les autres équipes sont également essentielles pour garantir une réponse proactive aux menaces.<br />
<br />
=== EXEC (Execution / Red Team) ===<br />
L'équipe EXEC est chargée de mener des attaques de type Red Team, contribuant ainsi à renforcer la sécurité de l'organisation en identifiant les vulnérabilités et en évaluant l'efficacité des mesures de défense.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Exécution d'Attaques Red Team :''' Les membres de l'équipe EXEC sont des spécialistes en test d'intrusion, chargés de simuler des attaques réalistes pour évaluer la résilience du système de sécurité. Ils utilisent des techniques d'attaques avancées pour identifier les faiblesses potentielles.<br />
# '''Évaluation des Vulnérabilités :''' Ils analysent les systèmes, les réseaux, les applications, et les infrastructures pour découvrir des vulnérabilités susceptibles d'être exploitées par des attaquants réels. Cela inclut la recherche de CVE, l'analyse des configurations, et la recherche de points faibles.<br />
# '''Rapports d'Incidents :''' Les membres de l'équipe EXEC documentent de manière détaillée les résultats de leurs tests d'intrusion, fournissant des rapports complets sur les vulnérabilités découvertes, les vecteurs d'attaque utilisés, et les recommandations pour renforcer la sécurité.<br />
# '''Collaboration avec les Autres Équipes :''' Ils interagissent avec les équipes PILOTE, INTEL, ARCHITECTE, et FORMATEUR pour partager des informations sur les scénarios d'attaques simulées, les résultats des tests, et les leçons apprises. Cette collaboration permet d'améliorer constamment les défenses de l'organisation.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Présentation des résultats des attaques simulées, ajustement des scénarios en fonction des objectifs stratégiques.<br />
* '''INTEL :''' Partage d'informations sur les techniques d'attaque émergentes et collaboration pour intégrer ces informations dans les stratégies défensives.<br />
* '''ARCHITECTE :''' Recommandations pour renforcer l'architecture des systèmes en fonction des vulnérabilités identifiées.<br />
* '''FORMATEUR :''' Contribution à la formation de l'équipe sur les dernières techniques d'attaques et les moyens de défense.<br />
* '''RH :''' Participation aux processus de recrutement pour s'assurer que l'équipe EXEC dispose des compétences nécessaires.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe EXEC doivent démontrer une expertise approfondie en matière de sécurité informatique, de compréhension des tactiques d'attaques, et de capacité à penser comme un attaquant. Ils doivent être capables de travailler de manière autonome et en équipe, avec un souci du détail pour identifier des vulnérabilités subtiles. La communication claire et la capacité à documenter de manière exhaustive sont cruciales pour garantir la valeur des tests d'intrusion et la mise en place de solutions de sécurité efficaces.<br />
<br />
== Liste des tâches pour le developement de HackBBS Reloaded ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#008000">FAIT</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
Pour une liste complete, voir la [[Roadmap]]<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Administration_des_roles&diff=93618Administration des roles2023-12-04T23:47:28Z<p>Korigan : </p>
<hr />
<div>1. Se connecter a la BDD<br />
<pre><br />
mysql -u root -p<br />
</pre><br />
2. Acceder a la BDD hackbbs<br />
<pre><br />
use hackbbs<br />
</pre><br />
<br />
3. La table des roles est definie ainsi: (Exemple)<br />
<pre><br />
MariaDB [hackbbs]> select * from rank;<br />
+----+--------+-------------+----------------------------------------------------------------------------------------------+<br />
| id | idRank | labelRank | Description |<br />
+----+--------+-------------+----------------------------------------------------------------------------------------------+<br />
| 0 | 0 | Anonymous | Un invite est un visiteur non inscrit |<br />
| 1 | 16 | User | Le membre est une personne ou un bot inscrit |<br />
| 2 | 32 | Notificator | Le notificateur prévient le correcteur lorsqu'il suspect des erreurs |<br />
| 3 | 48 | Corrector | Le correcteur est habilité à proposer une solution lorsqu'une erreur est avérée |<br />
| 4 | 64 | Moderator | Le modérateur dispose des droits en écriture sur le serveur pour appliquer les corrections |<br />
| 5 | 240 | Admin | L'admin réalise la maintenance du système |<br />
| 6 | 255 | Root | System admin |<br />
+----+--------+-------------+----------------------------------------------------------------------------------------------+<br />
</pre><br />
<br />
4. L'ajout d'un nouveau role peut se faire avec:<br />
<pre><br />
insert into rank value(7,17,'Intel','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Intel');<br />
insert into rank value(8,18,'Pilote','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Pilot');<br />
insert into rank value(9,19,'RH','Le membre dispose des privileges pour acceder aux ressources de l\'équipe RH');<br />
insert into rank value(10,20,'Formateur','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Formateur');<br />
insert into rank value(11,21,'Architecte','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Architecte');<br />
insert into rank value(12,22,'Developeur','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Developeur');<br />
insert into rank value(13,23,'Pentest','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Pentest');<br />
</pre></div>Koriganhttps://wiki.hackbbs.org/index.php?title=Administration_des_roles&diff=93617Administration des roles2023-12-04T23:46:18Z<p>Korigan : Page créée avec « 1. Se connecter a la BDD mysql -u root -p 2. Acceder a la BDD hackbbs use hackbbs 3. La table des roles est definie ainsi: (Exemple) MariaDB [hackbbs]> select * from rank; +----+--------+-------------+----------------------------------------------------------------------------------------------+ | id | idRank | labelRank | Description | +----+--------+-------------+--------------... »</p>
<hr />
<div>1. Se connecter a la BDD<br />
mysql -u root -p<br />
<br />
2. Acceder a la BDD hackbbs<br />
use hackbbs<br />
<br />
3. La table des roles est definie ainsi: (Exemple)<br />
MariaDB [hackbbs]> select * from rank;<br />
+----+--------+-------------+----------------------------------------------------------------------------------------------+<br />
| id | idRank | labelRank | Description |<br />
+----+--------+-------------+----------------------------------------------------------------------------------------------+<br />
| 0 | 0 | Anonymous | Un invite est un visiteur non inscrit |<br />
| 1 | 16 | User | Le membre est une personne ou un bot inscrit |<br />
| 2 | 32 | Notificator | Le notificateur prévient le correcteur lorsqu'il suspect des erreurs |<br />
| 3 | 48 | Corrector | Le correcteur est habilité à proposer une solution lorsqu'une erreur est avérée |<br />
| 4 | 64 | Moderator | Le modérateur dispose des droits en écriture sur le serveur pour appliquer les corrections |<br />
| 5 | 240 | Admin | L'admin réalise la maintenance du système |<br />
| 6 | 255 | Root | System admin |<br />
+----+--------+-------------+----------------------------------------------------------------------------------------------+<br />
<br />
4. L'ajout d'un nouveau role peut se faire avec:<br />
insert into rank value(7,17,'Intel','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Intel');<br />
insert into rank value(8,18,'Pilote','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Pilot');<br />
insert into rank value(9,19,'RH','Le membre dispose des privileges pour acceder aux ressources de l\'équipe RH');<br />
insert into rank value(10,20,'Formateur','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Formateur');<br />
insert into rank value(11,21,'Architecte','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Architecte');<br />
insert into rank value(12,22,'Developeur','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Developeur');<br />
insert into rank value(13,23,'Pentest','Le membre dispose des privileges pour acceder aux ressources de l\'équipe Pentest');</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93616HackBBS Reloaded2023-12-04T23:29:32Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
L'[[administration des roles]] doit se faire via un acces a la BDD.<br />
<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Coordination des Recherches :''' Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.<br />
# '''Instructions à l'Équipe INTEL :''' Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.<br />
# '''Demandes aux Architectes :''' Les pilotes interagissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.<br />
# '''Alignement Stratégique :''' Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''INTEL :''' Collaboration étroite pour définir les objectifs de collecte d'informations.<br />
* '''ARCHITECTE :''' Demande de conception de solutions adaptées aux besoins identifiés.<br />
* '''FORMATEUR :''' Identification des besoins en formation pour renforcer les compétences des differentes équipes.<br />
* '''RH :''' Implication dans le recrutement et la constitution d'équipes performantes.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.<br />
<br />
=== Ressources Humaines (RH) ===<br />
L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Recrutement :''' L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.<br />
# '''Gestion des Effectifs :''' Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.<br />
# '''Communication Interne :''' Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.<br />
# '''Gestion des Projets RH :''' Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.<br />
# '''Relations Membres :''' L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de colaboration positif.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.<br />
* '''INTEL :''' Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.<br />
* '''ARCHITECTE :''' Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.<br />
* '''FORMATEUR :''' Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnée. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
(TBC)<br />
<br />
<br />
== Liste des tâches pour le developement de HackBBS Reloaded ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#008000">FAIT</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
Pour une liste complete, voir la [[Roadmap]]<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93615HackBBS Reloaded2023-12-04T23:27:52Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
Les adminsitrateurs peuvent [[administrer les roles]] via une page dédié.<br />
<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Coordination des Recherches :''' Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.<br />
# '''Instructions à l'Équipe INTEL :''' Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.<br />
# '''Demandes aux Architectes :''' Les pilotes interagissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.<br />
# '''Alignement Stratégique :''' Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''INTEL :''' Collaboration étroite pour définir les objectifs de collecte d'informations.<br />
* '''ARCHITECTE :''' Demande de conception de solutions adaptées aux besoins identifiés.<br />
* '''FORMATEUR :''' Identification des besoins en formation pour renforcer les compétences des differentes équipes.<br />
* '''RH :''' Implication dans le recrutement et la constitution d'équipes performantes.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.<br />
<br />
=== Ressources Humaines (RH) ===<br />
L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Recrutement :''' L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.<br />
# '''Gestion des Effectifs :''' Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.<br />
# '''Communication Interne :''' Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.<br />
# '''Gestion des Projets RH :''' Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.<br />
# '''Relations Membres :''' L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de colaboration positif.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.<br />
* '''INTEL :''' Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.<br />
* '''ARCHITECTE :''' Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.<br />
* '''FORMATEUR :''' Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnée. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
(TBC)<br />
<br />
<br />
== Liste des tâches pour le developement de HackBBS Reloaded ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#008000">FAIT</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
Pour une liste complete, voir la [[Roadmap]]<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93614Roadmap2023-12-04T22:13:41Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /><br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
-Finir la description des roles sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS_Reloaded#Liste_des_t%C3%A2ches_pour_le_developement_de_HackBBS_Reloaded<br />
-Implementer les nouveaux roles {intel, pilot, ...) afin de rendre les premieres missions disponible<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Develop an IRC functino to get notified on IRC when something change on the wiki<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br /><br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit<br /><br />
-Publier la mission intel qui vise a scanner les domaines identifier comme source d'attaques: loadResource('classifyDomain.php')</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93613Roadmap2023-12-04T22:12:29Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /><br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
-Finir la description des roles sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS_Reloaded#Liste_des_t%C3%A2ches_pour_le_developement_de_HackBBS_Reloaded<br />
-Implementer les nouveaux roles {intel, pilot, ...) afin de rendre les premieres missions disponible<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br /><br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit<br /><br />
-Publier la mission intel qui vise a scanner les domaines identifier comme source d'attaques: loadResource('classifyDomain.php')</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93612HackBBS Reloaded2023-12-04T22:06:44Z<p>Korigan : /* Liste des tâches */</p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Coordination des Recherches :''' Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.<br />
# '''Instructions à l'Équipe INTEL :''' Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.<br />
# '''Demandes aux Architectes :''' Les pilotes interagissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.<br />
# '''Alignement Stratégique :''' Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''INTEL :''' Collaboration étroite pour définir les objectifs de collecte d'informations.<br />
* '''ARCHITECTE :''' Demande de conception de solutions adaptées aux besoins identifiés.<br />
* '''FORMATEUR :''' Identification des besoins en formation pour renforcer les compétences des differentes équipes.<br />
* '''RH :''' Implication dans le recrutement et la constitution d'équipes performantes.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.<br />
<br />
=== Ressources Humaines (RH) ===<br />
L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Recrutement :''' L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.<br />
# '''Gestion des Effectifs :''' Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.<br />
# '''Communication Interne :''' Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.<br />
# '''Gestion des Projets RH :''' Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.<br />
# '''Relations Membres :''' L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de colaboration positif.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.<br />
* '''INTEL :''' Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.<br />
* '''ARCHITECTE :''' Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.<br />
* '''FORMATEUR :''' Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnée. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
(TBC)<br />
<br />
<br />
== Liste des tâches pour le developement de HackBBS Reloaded ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#008000">FAIT</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
Pour une liste complete, voir la [[Roadmap]]<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93611HackBBS Reloaded2023-12-04T21:55:11Z<p>Korigan : /* Pilote */</p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Coordination des Recherches :''' Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.<br />
# '''Instructions à l'Équipe INTEL :''' Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.<br />
# '''Demandes aux Architectes :''' Les pilotes interagissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.<br />
# '''Alignement Stratégique :''' Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''INTEL :''' Collaboration étroite pour définir les objectifs de collecte d'informations.<br />
* '''ARCHITECTE :''' Demande de conception de solutions adaptées aux besoins identifiés.<br />
* '''FORMATEUR :''' Identification des besoins en formation pour renforcer les compétences des differentes équipes.<br />
* '''RH :''' Implication dans le recrutement et la constitution d'équipes performantes.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.<br />
<br />
=== Ressources Humaines (RH) ===<br />
L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.<br />
<br />
==== Responsabilités Principales : ====<br />
<br />
# '''Recrutement :''' L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.<br />
# '''Gestion des Effectifs :''' Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.<br />
# '''Communication Interne :''' Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.<br />
# '''Gestion des Projets RH :''' Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.<br />
# '''Relations Membres :''' L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de colaboration positif.<br />
<br />
==== Interaction avec les Autres Équipes : ====<br />
<br />
* '''PILOTE :''' Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.<br />
* '''INTEL :''' Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.<br />
* '''ARCHITECTE :''' Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.<br />
* '''FORMATEUR :''' Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.<br />
<br />
==== Attentes : ====<br />
Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnée. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
(TBC)<br />
<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93610HackBBS Reloaded2023-12-04T21:48:01Z<p>Korigan : /* TRAINOR */</p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
Les utilisateurs peuvent exercer différentes activités liées à des rôles.<br />
<br />
# '''Pilote'''<br />
# '''RH (Ressources Humaines)'''<br />
# '''Formateur'''<br />
# '''Architecte'''<br />
# '''Constructeur'''<br />
# '''Renseignement (Intel)'''<br />
<br />
Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.<br />
<br />
=== Pilote ===<br />
(TBC)<br />
<br />
=== RH (Ressources Humaines) ===<br />
(TBC)<br />
<br />
=== FORMATEUR ===<br />
L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.<br />
<br />
Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :<br />
<br />
* Cryptographie/Stéganographie<br />
* Reverse Engineering<br />
* Programmation Réseau<br />
* Management<br />
* ...<br />
<br />
(TBC)<br />
<br />
=== ARCHITECTE ===<br />
(TBC)<br />
<br />
=== CONSTRUCTEUR ===<br />
(TBC)<br />
<br />
=== RENSEIGNEMENT (INTEL) ===<br />
'''Définition :''' L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnée. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.<br />
<br />
L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.<br />
<br />
* Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.<br />
* Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.<br />
* Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.<br />
<br />
L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.<br />
<br />
Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :<br />
<br />
* Reconnaissance<br />
* Collecte d'informations<br />
* Analyse de vulnérabilités<br />
* ...<br />
<br />
(TBC)<br />
<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93607HackBBS Reloaded2023-12-04T18:03:20Z<p>Korigan : /* TRAINOR */</p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
Les utilisateurs peuvent exercer differentes activitee liee a des roles.<br />
* Pilot<br />
* HR <br />
* Trainor<br />
* Architect<br />
* Builder<br />
* Intel<br />
<br />
Chaque role offre differentes possibilitee tel que decrite dans les section ci-dessous<br />
==== Pilot ====<br />
TBC<br />
==== HR ====<br />
TBC<br />
==== TRAINOR ====<br />
L'equipe TRAINOR participe a la formation des membres en partagant des documentations, tutoriels et articles mais aussi en triant les demandes d'aide et en organisant des evenement pour former sur differents sujet. Cela peut allez du pilotage, au recrutement en passant par des formations purement technique afin d'expliquer comment attaquer ou defendre un systeme.<br />
<br />
Les sources d'information de l'equipe trainor peuvent etre categorisee en diverse categories tel que :<br />
<br />
* cryptographie/stéganographie<br />
<br />
* reverse engineering<br />
* programmation réseau<br />
* management<br />
* ...<br />
<br />
TBC<br />
<br />
==== ARCHITECT ====<br />
TBC<br />
==== BUILDER ====<br />
TBC<br />
==== INTEL ====<br />
-Definition: L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnee. Les sources de donnees peuvent etre issue de l'OSINT (open source intelligence) ou bien de source privee. <br />
<br />
L'information est generalement classifie est 3 categories: {Black, Grey, White}.<br />
* Les information <b>Black</b> sont privee et generalement confidentiel ou hautement confidentiel. <br />
* Les donnee <b>grise</b> appartiennent generalement a des entreprises ou groupe d'individu. Accessible aux seul membres autorise a y acceder. Ces information ne sont pas confidentiel mais ne sont pas non plus publique. Ce sont generalement des donnee issue de reseau privee. <br />
* Les donnee <b>blanche</b> sont publique. L'OSINT consomme generalement des donnees blanche et les organise et/ou les met en valeur.<br />
<br />
L'equipe INTEL a pour principal but de collecter et d'organiser les donnee blanche afin que les autres equipe puissent travailler sur des donnees a jour. <br />
L'equipe INTEL collabore avec l'equipe PILOT qui definit les objectifs a atteindre.<br />
Les membres de l'equipe INTEL realisent des tache unitaire, chacun aide comme il le desire, mais le travail est de preference integree et integrable dans des objectifs ayant une portee plus large. Par exemple, l'identification et la caracterisation de cibles (identification d'ip, ports ouverts, version des serveurs en ecoute, CVEs des cibes), qui sont des taches propres a l'equipe INTEL, peut aider les equipes EXEC a travailler sur des donnes precises, et avoir ete requise par l'equipe PILOT qui as besoin d'identifier la source d'une attaque contre nos infrastructures.<br />
Les taches sont donc attribue par les membres de l'equipe PILOT de maniere individuel ou collective en fonction des besoins.<br />
<br />
Les membres de l'equipe INTEL peuvent souhaiter se sous-diviser en plusieurs categories tel que:<br />
<br />
* Reconnaissance<br />
* Information gathering<br />
* Analyse de vulnerabilitee<br />
* ...<br />
<br />
TBC<br />
<br />
<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93606HackBBS Reloaded2023-12-04T17:46:12Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles ===<br />
Les utilisateurs peuvent exercer differentes activitee liee a des roles.<br />
* Pilot<br />
* HR <br />
* Trainor<br />
* Architect<br />
* Builder<br />
* Intel<br />
<br />
Chaque role offre differentes possibilitee tel que decrite dans les section ci-dessous<br />
==== Pilot ====<br />
TBC<br />
==== HR ====<br />
TBC<br />
==== TRAINOR ====<br />
TBC<br />
==== ARCHITECT ====<br />
TBC<br />
==== BUILDER ====<br />
TBC<br />
==== INTEL ====<br />
-Definition: L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnee. Les sources de donnees peuvent etre issue de l'OSINT (open source intelligence) ou bien de source privee. <br />
<br />
L'information est generalement classifie est 3 categories: {Black, Grey, White}.<br />
* Les information <b>Black</b> sont privee et generalement confidentiel ou hautement confidentiel. <br />
* Les donnee <b>grise</b> appartiennent generalement a des entreprises ou groupe d'individu. Accessible aux seul membres autorise a y acceder. Ces information ne sont pas confidentiel mais ne sont pas non plus publique. Ce sont generalement des donnee issue de reseau privee. <br />
* Les donnee <b>blanche</b> sont publique. L'OSINT consomme generalement des donnees blanche et les organise et/ou les met en valeur.<br />
<br />
L'equipe INTEL a pour principal but de collecter et d'organiser les donnee blanche afin que les autres equipe puissent travailler sur des donnees a jour. <br />
L'equipe INTEL collabore avec l'equipe PILOT qui definit les objectifs a atteindre.<br />
Les membres de l'equipe INTEL realisent des tache unitaire, chacun aide comme il le desire, mais le travail est de preference integree et integrable dans des objectifs ayant une portee plus large. Par exemple, l'identification et la caracterisation de cibles (identification d'ip, ports ouverts, version des serveurs en ecoute, CVEs des cibes), qui sont des taches propres a l'equipe INTEL, peut aider les equipes EXEC a travailler sur des donnes precises, et avoir ete requise par l'equipe PILOT qui as besoin d'identifier la source d'une attaque contre nos infrastructures.<br />
Les taches sont donc attribue par les membres de l'equipe PILOT de maniere individuel ou collective en fonction des besoins.<br />
<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93605HackBBS Reloaded2023-12-04T17:26:49Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Vous ? :-)<br />
<br />
=== Les roles <br />
Les utilisateurs peuvent exercer differentes activitee liee a des roles.<br />
* Pilot<br />
* HR <br />
* Trainor<br />
* Architect<br />
* Builder<br />
* Intel<br />
<br />
Chaque role offre differentes possibilitee tel que decrite dans les section ci-dessous<br />
==== Pilot ====<br />
TBC<br />
==== HR ====<br />
TBC<br />
==== TRAINOR ====<br />
TBC<br />
==== ARCHITECT ====<br />
TBC<br />
==== BUILDER ====<br />
TBC<br />
==== INTEL ====<br />
-Definition: TBC<br />
-Tache Individuel Vs Tache collective<br />
-Tache reelle ou fictive?<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Intel_classificationDomains&diff=93602HackBBS:Intel classificationDomains2023-12-03T19:27:58Z<p>Korigan : </p>
<hr />
<div><h2>Description du poste</h2><br />
Tu viens d'intégrer l'équipe <nowiki><b>INTEL</b></nowiki> de HackBBS. Intel pour Intelligence.<br /><br />
Cela signifie que ta mission est de collecter de l'intelligence pour les équipes de pentest qui s'en serviront.<br /><br />
<br />
<h2>Description de la mission</h2><br />
<br />
Ta première mission est de nous aider a catégoriser une liste de domaines ayant récemment été impliqués dans plusieurs séries d'attaques contre HackBBS, notamment le wiki.<br /><br />
<br /><br />
La liste de <a href="https://hackbbs.org/resources/classifyDomain.php?dataSource">ces domaines</a> est disponible en téléchargement afin de procéder au scan de ports ouverts. <br />
Suite à un premier tri, nous avons pu identifier ceux qui avaient une entrée DNS de ceux qui ont totalement disparu. <br /><br />
<br />
Nous devons maintenant déterminer si parmi les noms de domaines restants (qui ont une IP), il existe des serveurs en écoute, et <u>sur quels ports</u>.<br /><br />
<br /><br />
<h3>Critères de sélection des domaines</h3><br />
<br />
Dans un premier temps, nous nous intéressons aux ports ouverts:<br />
<br />
<ul><br />
<li>80 (http)</li><br />
<li>443 (https)</li><br />
</ul><br />
<br />
Nous souhaiterions par la suite classifier ces noms de domaines afin d'identifier les potentielles sources de ces attaques avec d'autres données qui vous seront transmises ultérieurement.<br /><br />
<br /><br />
Lorsque tu auras identifi&eacute; les cibles qui ont les ports 80 <b>ou</b> 443 ouvert, nous pourrons procéder à la classification des cibles qui peuvent potentiellement êtres vulnérables.<br /><br />
<br />
Afin de partager tes r&eacute;sultats avec les autres membres de l'&eacute;quipe intel, tu peux uploader les domaines qui répondent aux critères énoncés ci-dessus via le formulaire ci-dessous.<br /><br />
<br />
Le format attendu est <b>un domaine par ligne</b><br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Intel_classificationDomains&diff=93601HackBBS:Intel classificationDomains2023-12-03T19:27:42Z<p>Korigan : </p>
<hr />
<div><h2>Description du poste2</h2><br />
Tu viens d'intégrer l'équipe <nowiki><b>INTEL</b></nowiki> de HackBBS. Intel pour Intelligence.<br /><br />
Cela signifie que ta mission est de collecter de l'intelligence pour les équipes de pentest qui s'en serviront.<br /><br />
<br />
<h2>Description de la mission</h2><br />
<br />
Ta première mission est de nous aider a catégoriser une liste de domaines ayant récemment été impliqués dans plusieurs séries d'attaques contre HackBBS, notamment le wiki.<br /><br />
<br /><br />
La liste de <a href="https://hackbbs.org/resources/classifyDomain.php?dataSource">ces domaines</a> est disponible en téléchargement afin de procéder au scan de ports ouverts. <br />
Suite à un premier tri, nous avons pu identifier ceux qui avaient une entrée DNS de ceux qui ont totalement disparu. <br /><br />
<br />
Nous devons maintenant déterminer si parmi les noms de domaines restants (qui ont une IP), il existe des serveurs en écoute, et <u>sur quels ports</u>.<br /><br />
<br /><br />
<h3>Critères de sélection des domaines</h3><br />
<br />
Dans un premier temps, nous nous intéressons aux ports ouverts:<br />
<br />
<ul><br />
<li>80 (http)</li><br />
<li>443 (https)</li><br />
</ul><br />
<br />
Nous souhaiterions par la suite classifier ces noms de domaines afin d'identifier les potentielles sources de ces attaques avec d'autres données qui vous seront transmises ultérieurement.<br /><br />
<br /><br />
Lorsque tu auras identifi&eacute; les cibles qui ont les ports 80 <b>ou</b> 443 ouvert, nous pourrons procéder à la classification des cibles qui peuvent potentiellement êtres vulnérables.<br /><br />
<br />
Afin de partager tes r&eacute;sultats avec les autres membres de l'&eacute;quipe intel, tu peux uploader les domaines qui répondent aux critères énoncés ci-dessus via le formulaire ci-dessous.<br /><br />
<br />
Le format attendu est <b>un domaine par ligne</b><br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Intel_classificationDomains&diff=93600HackBBS:Intel classificationDomains2023-12-03T19:25:45Z<p>Korigan : </p>
<hr />
<div><h2>Description du poste</h2><br />
Tu viens d'intégrer l'équipe <nowiki><b>INTEL</b></nowiki> de HackBBS. Intel pour Intelligence.<br /><br />
Cela signifie que ta mission est de collecter de l'intelligence pour les équipes de pentest qui s'en serviront.<br /><br />
<br />
<h2>Description de la mission</h2><br />
<br />
Ta première mission est de nous aider a catégoriser une liste de domaines ayant récemment été impliqués dans plusieurs séries d'attaques contre HackBBS, notamment le wiki.<br /><br />
<br /><br />
La liste de <a href="https://hackbbs.org/resources/classifyDomain.php?dataSource">ces domaines</a> est disponible en téléchargement afin de procéder au scan de ports ouverts. <br />
Suite à un premier tri, nous avons pu identifier ceux qui avaient une entrée DNS de ceux qui ont totalement disparu. <br /><br />
<br />
Nous devons maintenant déterminer si parmi les noms de domaines restants (qui ont une IP), il existe des serveurs en écoute, et <u>sur quels ports</u>.<br /><br />
<br /><br />
<h3>Critères de sélection des domaines</h3><br />
<br />
Dans un premier temps, nous nous intéressons aux ports ouverts:<br />
<br />
<ul><br />
<li>80 (http)</li><br />
<li>443 (https)</li><br />
</ul><br />
<br />
Nous souhaiterions par la suite classifier ces noms de domaines afin d'identifier les potentielles sources de ces attaques avec d'autres données qui vous seront transmises ultérieurement.<br /><br />
<br /><br />
Lorsque tu auras identifi&eacute; les cibles qui ont les ports 80 <b>ou</b> 443 ouvert, nous pourrons procéder à la classification des cibles qui peuvent potentiellement êtres vulnérables.<br /><br />
<br />
Afin de partager tes r&eacute;sultats avec les autres membres de l'&eacute;quipe intel, tu peux uploader les domaines qui répondent aux critères énoncés ci-dessus via le formulaire ci-dessous.<br /><br />
<br />
Le format attendu est <b>un domaine par ligne</b><br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93593Roadmap2023-12-02T21:42:11Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /><br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br /><br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit<br /><br />
-Publier la mission intel qui vise a scanner les domaines identifier comme source d'attaques: loadResource('classifyDomain.php')</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93592Roadmap2023-12-02T21:38:19Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /><br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93591Roadmap2023-12-02T21:38:05Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
-Revue de code pour MkdirModule - From Neib<br /><br />
-Revue de code pour Md5Module - From Neib.php<br /><br />
-Revue de code pour Sha1Module - From Neib.php<br /><br />
-Revue de code pour Base64Module - From Neib.php<br /><br />
-Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</br><br />
-Fix get ip for client with more restricted browser</br><br />
-New commande: cp</br><br />
-New commande: rm</br><br />
-Permettre de cacher la map en cas de besoin</br><br />
-Agrandir la taille par defaut de la fenetre de chat irc<br /><br />
-Corriger le postit qui se redimenssionne tres mal<br /> <br />
-New command to detect if a target belongs to a scammer<br /><br />
-Load location of the ip from cache if it was already located<br /><br />
-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe<br /><br />
-New feature: <i>locate</i> to perform a whereis on a given IP<br /><br />
-Admins can Add/Remove privileges to users<br /><br />
-Sort module by alphabetical order in the help module<br /><br />
-remettre les bons numéros de missions dans les autres<br />
-Ameliorer le module w pour afficher les utilisateur en ligne<br /><br />
- inversion des explications pour "help" et "adduser"<br /><br />
-investiguer pb username avec Majuscule<br /><br />
-Ameliorer la websocket pour charger/recharger les mission depuis un fichier json, dynamiquement, a la demande<br /><br />
-Les nouveaux proxy sont desormais valide<br /><br />
-La mission "trouve un proxy" peut desormais etre resolu avec la commande checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/<br />
-Finir le module Mission qui permet de lister, ajouter et supprimer des mission dans le postit</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HOWTO_:_La_WebSocket_todo.py&diff=93588HOWTO : La WebSocket todo.py2023-12-02T20:50:58Z<p>Korigan : </p>
<hr />
<div>La WebSocket todo.py reponds a differents type de messages comme documente ci-dessous:<br />
<br />
* getContracts: Pour un utilisateur donner, verifie dans le workspace de l'utilisateur pour determiner les prochaines missions a afficher dans la post'it<br />
* refreshMission: Generalement invoquer par un admin, permet au daemon de rafraichir sa liste de mission disponible. (Recharger le fichier achievements.json<br />
* sendMsg: Cette commande permet de broadcaster a tous ou a un seul utilisateur, le message definit par la commande msg<br />
<br />
<br />
Pour tester un message, il est posssible d'executer en Javascript dans le browser une commande du type:<br />
msg = {type:"message", text: "refreshMission",username: getCookie("username"),id: getCookie("PHPSESSID"),date: Date.now()};<br />
socket.send(JSON.stringify(msg));</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HOWTO_:_La_WebSocket_todo.py&diff=93587HOWTO : La WebSocket todo.py2023-12-02T20:33:47Z<p>Korigan : Page créée avec « La WebSocket todo.py reponds a differents type de messages comme documente ci-dessous: * getContracts: Pour un utilisateur donner, verifie dans le workspace de l'utilisateur pour determiner les prochaines missions a afficher dans la post'it * refreshMission: Generalement invoquer par un admin, permet au daemon de rafraichir sa liste de mission disponible. (Recharger le fichier achievements.json * sendMsg: Cette commande permet de broadcaster a tous ou a un se... »</p>
<hr />
<div>La WebSocket todo.py reponds a differents type de messages comme documente ci-dessous:<br />
<br />
* getContracts: Pour un utilisateur donner, verifie dans le workspace de l'utilisateur pour determiner les prochaines missions a afficher dans la post'it<br />
* refreshMission: Generalement invoquer par un admin, permet au daemon de rafraichir sa liste de mission disponible. (Recharger le fichier achievements.json<br />
* sendMsg: Cette commande permet de broadcaster a tous ou a un seul utilisateur, le message definit par la commande msg</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93586HackBBS Reloaded2023-12-02T20:30:50Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Shiney : <to be completed><br />
* Manu404 : <to be completed><br />
* Vous ? :-)<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]<br />
* [[HOWTO : La WebSocket todo.py]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93579Roadmap2023-12-02T18:55:13Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
<s>-Revue de code pour MkdirModule - From Neib<br /></s><br />
<s>-Revue de code pour Md5Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Sha1Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Base64Module - From Neib.php<br /></s><br />
<s>Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</s></br><br />
<s>-Fix get ip for client with more restricted browser</s></br><br />
<s>-New commande: cp</s></br><br />
<s>-New commande: rm</s></br><br />
<s>-Permettre de cacher la map en cas de besoin</s></br><br />
<s>-Agrandir la taille par defaut de la fenetre de chat irc</s><br /><br />
<s>-Corriger le postit qui se redimenssionne tres mal</s><br /> <br />
<s>-New command to detect if a target belongs to a scammer</s><br /><br />
<s>-Load location of the ip from cache if it was already located</s><br /><br />
<s>-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe</s><br /><br />
<s>-New feature: <i>locate</i> to perform a whereis on a given IP</s><br /><br />
<s>-Admins can Add/Remove privileges to users</s><br /><br />
<s>-Sort module by alphabetical order in the help module</s><br /><br />
<s>-remettre les bons numéros de missions dans les autres</s><br />
<s>-Ameliorer le module w pour afficher les utilisateur en ligne<br /></s><br />
<s>- inversion des explications pour "help" et "adduser"<br /></s><br />
<s>-investiguer pb username avec Majuscule<br /><br />
- Trouver un proxy peut desormais etre valider. On utilise checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /><br />
-Constituer une liste d'ip a proposer aux membres a partir de https://spys.one/en/http-proxy-list/</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Hacking:Bug_bounties&diff=93578Hacking:Bug bounties2023-12-02T18:53:08Z<p>Korigan : </p>
<hr />
<div>* https://hackerone.com<br />
* https://www.bugcrowd.com/<br />
* https://www.intigriti.com/</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Hacking:Bug_bounties&diff=93577Hacking:Bug bounties2023-12-02T18:52:22Z<p>Korigan : Page créée avec « * https://www.intigriti.com/ »</p>
<hr />
<div>* https://www.intigriti.com/</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Accueil&diff=93575Accueil2023-12-02T18:52:09Z<p>Korigan : </p>
<hr />
<div><big>'''Wiki HackBBS !'''</big><br />
<br />
Contribuons ensemble à ce wiki afin d'étendre nos connaissances !<br />
<br />
==Sites==<br />
{| cellpadding="10"<br />
![https://hackbbs.org/ HackBBS]<br />
|}<br />
<br />
==Projets==<br />
* [[Roadmap Community]] Roadmap de la communautee HackBBS (High-Level)<br />
<br />
===Projets en développement===<br />
* [[Roadmap]] Liste des prochaines tâches à éffectuer p(a|ou)r la communautée<br />
* [[HackBBS Reloaded]]: Refonte hackBBS. HackBBS Reloaded<br />
* [[BBB]]: Bomb Battle Bot<br />
* [[dn42]]<br />
* [[ctf]]<br />
* [[atmelchal 1]]: Challenge Atmel 1 => Challenge Special 3<br />
* [[Hackbbs Todo]] : Tdo / Gestion des projets de HackBBS pour toutes et tous.<br />
* [[Hackbbs Collaboratif]] : Outil de gestion de projet mis en place pour la gestion des projets établis sur la Todo, permettant une collaboration avec des outils indispensables. Une fois l'API de HackBBS implémentée, elle y sera intégrée.<br />
<br />
<br />
====Hosting a ctf====<br />
* [[List of software]]<br />
* [[List of server]]<br />
<br />
===Projet en test===<br />
* [[svn.hackbbs.org]]: [http://svn.hackbbs.org]<br />
Ce service nous permet de gérer les versions de nos développements et est un dépôt de nos projets.<br />
Récemment quelques membres ont eu l'occasion d'y tester des injections JavaScript.<br />
<br />
===Projet en production===<br />
* [[mail.hackbbs.org]]: [http://mail.hackbbs.org/]<br />
<br />
===Projets des membres===<br />
* [[Avr robot]]: Project lead's by Moshen<br />
* [[GSM hack France]] : How to sniff and decode GSM voice and data<br />
* [[LTE sniff]] : Phreaking on LTE<br />
* [[RTL-SDR]] : Sniff long term private fm record by striping silence with sox<br />
* [[NFC]] : Technologie sans contact. Poc sur le SCL3711<br />
* [[EMP]] : Désactivation d'appareils électroniques à distance. Poc<br />
* [[Biere]] : Brasser sa propre bière avec un starter's kit<br />
* [[433.848Mhz Barriere parking]] : Cloner une telecommande qui ouvre les barrières de parking<br />
<br />
== Meetings ==<br />
* [[HackBBS-BBQ4]] venez profiter d'un petit meeting - BBQ. Informations ici : [[HackBBS-BBQ4]].<br />
<br />
==Archives==<br />
* [[Bug bounties]]<br />
=== Meetings ===<br />
* [[Nuit du Hack - Hack in Paris - 2013]]<br />
* [[Nuit du Hack - Hack in Paris - 2012]]<br />
* [[AG du 11/09/10]]<br />
* [[HackBBS-BBQ3]] terminé, consultez le résumé sur cette page : [[HackBBS-BBQ3]].</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93574Roadmap2023-12-02T18:29:34Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
<s>-Revue de code pour MkdirModule - From Neib<br /></s><br />
<s>-Revue de code pour Md5Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Sha1Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Base64Module - From Neib.php<br /></s><br />
<s>Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</s></br><br />
<s>-Fix get ip for client with more restricted browser</s></br><br />
<s>-New commande: cp</s></br><br />
<s>-New commande: rm</s></br><br />
<s>-Permettre de cacher la map en cas de besoin</s></br><br />
<s>-Agrandir la taille par defaut de la fenetre de chat irc</s><br /><br />
<s>-Corriger le postit qui se redimenssionne tres mal</s><br /> <br />
<s>-New command to detect if a target belongs to a scammer</s><br /><br />
<s>-Load location of the ip from cache if it was already located</s><br /><br />
<s>-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe</s><br /><br />
<s>-New feature: <i>locate</i> to perform a whereis on a given IP</s><br /><br />
<s>-Admins can Add/Remove privileges to users</s><br /><br />
<s>-Sort module by alphabetical order in the help module</s><br /><br />
<s>-remettre les bons numéros de missions dans les autres</s><br />
<s>-Ameliorer le module w pour afficher les utilisateur en ligne<br /></s><br />
<s>- inversion des explications pour "help" et "adduser"<br /></s><br />
<s>-investiguer pb username avec Majuscule<br /><br />
- Trouver un proxy peut desormais etre valider. On utilise checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /><br />
-Evaluer outils OSINT Blackbird: https://github.com/worldofcyberskills/Blackbird <br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93573Roadmap2023-12-02T17:58:37Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
<s>-Revue de code pour MkdirModule - From Neib<br /></s><br />
<s>-Revue de code pour Md5Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Sha1Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Base64Module - From Neib.php<br /></s><br />
<s>Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</s></br><br />
<s>-Fix get ip for client with more restricted browser</s></br><br />
<s>-New commande: cp</s></br><br />
<s>-New commande: rm</s></br><br />
<s>-Permettre de cacher la map en cas de besoin</s></br><br />
<s>-Agrandir la taille par defaut de la fenetre de chat irc</s><br /><br />
<s>-Corriger le postit qui se redimenssionne tres mal</s><br /> <br />
<s>-New command to detect if a target belongs to a scammer</s><br /><br />
<s>-Load location of the ip from cache if it was already located</s><br /><br />
<s>-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe</s><br /><br />
<s>-New feature: <i>locate</i> to perform a whereis on a given IP</s><br /><br />
<s>-Admins can Add/Remove privileges to users</s><br /><br />
<s>-Sort module by alphabetical order in the help module</s><br /><br />
<s>-remettre les bons numéros de missions dans les autres</s><br />
<s>-Ameliorer le module w pour afficher les utilisateur en ligne<br /></s><br />
<s>- inversion des explications pour "help" et "adduser"<br /></s><br />
<s>-investiguer pb username avec Majuscule<br /><br />
- Trouver un proxy peut desormais etre valider. On utilise checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br /><br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br /><br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki<br /></div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93572Roadmap2023-12-02T17:58:15Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
<s>-Revue de code pour MkdirModule - From Neib<br /></s><br />
<s>-Revue de code pour Md5Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Sha1Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Base64Module - From Neib.php<br /></s><br />
<s>Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</s></br><br />
<s>-Fix get ip for client with more restricted browser</s></br><br />
<s>-New commande: cp</s></br><br />
<s>-New commande: rm</s></br><br />
<s>-Permettre de cacher la map en cas de besoin</s></br><br />
<s>-Agrandir la taille par defaut de la fenetre de chat irc</s><br /><br />
<s>-Corriger le postit qui se redimenssionne tres mal</s><br /> <br />
<s>-New command to detect if a target belongs to a scammer</s><br /><br />
<s>-Load location of the ip from cache if it was already located</s><br /><br />
<s>-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe</s><br /><br />
<s>-New feature: <i>locate</i> to perform a whereis on a given IP</s><br /><br />
<s>-Admins can Add/Remove privileges to users</s><br /><br />
<s>-Sort module by alphabetical order in the help module</s><br /><br />
<s>-remettre les bons numéros de missions dans les autres</s><br />
<s>-Ameliorer le module w pour afficher les utilisateur en ligne<br /></s><br />
<s>- inversion des explications pour "help" et "adduser"<br /></s><br />
<s>-investiguer pb username avec Majuscule<br /><br />
- Trouver un proxy peut desormais etre valider. On utilise checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de<br />
-Rajouter un module a botz pour diffuser un message sur IRC lorsqu'il y a un changement sur le wiki</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS_Reloaded&diff=93567HackBBS Reloaded2023-12-02T17:28:37Z<p>Korigan : </p>
<hr />
<div>== Introduction ==<br />
<br />
<br />
Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable. <br />
<br />
C'est dans cette optique que la refonte du site a été envisagée.<br />
<br />
== Équipe ==<br />
<br />
* Korigan : CDP, dev<br />
* Sliim : Root<br />
* Neomoloch : Admin<br />
* Neib : Admin<br />
* TorTukiTu : Architecte, dev<br />
* Lancien : dev<br />
* heaven : GDP (Gestionnaire de projet), dev<br />
* fredo2009 : dev<br />
* Shiney : <to be completed><br />
* Manu404 : <to be completed><br />
* Vous ? :-)<br />
<br />
== Liste des tâches ==<br />
* <span style="color:#008000">FAIT</span> - Concevoir et Développer la GUI (IHM) - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Concevoir le noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu<br />
* <span style="color:#008000">FAIT</span> - Créer le dépot [[GIT reloadedHackBBS]] - Korigan<br />
* <span style="color:#008000">FAIT</span> - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan<br />
* <span style="color:#008000">FAIT à revoir avec Korigan</span> - [[Migrer devBBS vers le wiki]] - Neomoloch, Zer00cool, Lancien - <span style="color:#FF0000">Manque 2 fichiers .sql</span><br />
* <span style="color:#ff0000">A faire</span> - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code métier du noyau - Tortukitu, Korigan<br />
* <span style="color:#0000ff">En cours</span> - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan<br />
* <span style="color:#ff0000">A faire</span> - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)<br />
* <span style="color:#ff0000">En cours</span> - Référencement, campagne publicitaire. - Neomoloch<br />
* <span style="color:#008000">FAIT</span> - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.<br />
<br />
== Contraintes ==<br />
<br />
* Utiliser l'installation et la configuration actuelle du serveur Apache2<br />
* Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)<br />
* Utiliser des technologies permettant une modularité<br />
* Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)<br />
* Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum <br />
<br />
== Technologies retenues ==<br />
<br />
<br />
* PHP<br />
* PDO<br />
* Ajax<br />
* HTML5<br />
* gitlab? (Cf heaven, sliim et korigan)<br />
<br />
== Architecture ==<br />
<br />
Il s'agit d'une architecture 3 couches:<br />
* Une couche gère l'interface utiisateur<br />
* Une couche contient le code métier<br />
* Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).<br />
<br />
Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.<br />
<br />
[[Fichier:hackbbs_reloaded_architecture.png]]<br />
<br />
La communication entre les couches '''DOIT''' suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.<br />
<br />
Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne '''DOIVENT JAMAIS''' comporter des fonctions métier de traitement.<br />
<br />
D'une manière plus générale, retenez seulement que vos modules ne devraient accéder '''QUE''' a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).<br />
<br />
L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).<br />
<br />
<br />
=== Couche provider (Interface utilisateur) ===<br />
<br />
Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte.<br />
La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.<br />
<br />
La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php<br />
<br />
L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/''' et '''/resources'''.<br />
<br />
=== Couche business (métier) ===<br />
<br />
La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques.<br />
Les services présentés sont les suivants:<br />
* LoaderService : Gère le chargement dynamique des modules.<br />
* SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs<br />
* SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant<br />
* UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur<br />
* SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/business''' et '''/php/modules'''.<br />
<br />
=== Couche consumer (consommateur de services) ===<br />
<br />
Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/core_services/consumer'''.<br />
<br />
'''Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.'''<br />
<br />
Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :<br />
<br />
[[Fichier:class_diagram_consumer.png]]<br />
<br />
Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.<br />
<br />
=== Couche transversale : modèle ===<br />
<br />
Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.<br />
<br />
Les fichiers de cette couche sont situés dans le répertoire '''/php/model'''.<br />
<br />
Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.<br />
<br />
Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.<br />
<br />
Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.<br />
<br />
=== Couche transversale : sécurité ===<br />
<br />
TODO.<br />
<br />
=== Couche transversale : logging ===<br />
<br />
TODO.<br />
<br />
== Infrastructure ==<br />
HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans <b>/opt/jail/tmp/workspace/<username></b><br />
<br />
Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee <b>intel</b>. Les informations traitee sont situee dans <b>/opt/jail/tmp/intel</b><br />
<br />
== Configuration ==<br />
<br />
La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/<br />
<br />
[[Détail du fichier de confguration]]<br />
<br />
== Développement de modules ==<br />
<br />
Un module (ici Monmodule) est consitué de trois éléments:<br />
* Une implémentation de l'interface IModule (''obligatoire'') appellé par convention MonmoduleModule.<br />
* Un dossier (''optionnel'') appellé par convention monmoduleModule.<br />
* Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (''obligatoire'').<br />
<br />
'''<span style="color:#ff0000">ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.</span>'''<br />
<br />
=== Implémentation de IModule ===<br />
<br />
L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :<br />
<br />
* function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.<br />
* function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page [[Contrôle du terminal via DataBusVO]].<br />
* function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement <b>macommande</b> : Ce que fait ma commande.<br />
<br />
Ci dessous une implémentation de démonstration de IModule<br />
<br />
<tt><br />
class MonmoduleModule implements IModule{<br />
public function canHandleData($data) {<br />
$ans = false;<br />
if($data == "macommande"){<br />
$ans = true;<br />
}<br />
return $ans;<br />
}<br />
public function getPrototype() {<br />
return "<b>macommande</b> : Ce que fait ma commande";<br />
}<br />
public function manageData($data) {<br />
$dataBus = new DataBusVO();<br />
$dataBus->setHtmlData("Cette comande ne fait rien de particulier.");<br />
return $dataBus;<br />
} <br />
}<br />
</tt><br />
<br />
Cette implémentation est à placer dans le répertoire '''/php/modules'''.<br />
<br />
=== Modification du fichier de configuration ===<br />
<br />
Ajouter la ligne :<br />
<br />
names[] = Monmodule<br />
<br />
A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini<br />
<br />
=== Répertoire monmoduleModule ===<br />
<br />
Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer.<br />
Ce répertoire est à placer dans le répertoire '''/php/modules'''.<br />
<br />
'''REMARQUE''' : ''Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, '''<span style="color:#ff0000">la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements</span>'''. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.''<br />
<br />
== Règles générales (A toujours avoir sous les yeux !) ==<br />
<br />
* A toute classe son interface.<br />
* Jamais de copier coller<br />
* '''Respectez l'architecture'''<br />
* Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)<br />
* '''Chaque classe et fonction doit être commentée'''<br />
* '''Pensez sécurité...''' Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !<br />
* Choisissez toujours la convention sur la configuration<br />
* (Optionnel) Écrire une page de wiki par module<br />
* (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien<br />
<br />
== FAQ / HOWTO ==<br />
* [[FAQ : Développement de modules]]<br />
* [[HOWTO : Modification du modèle du noyau]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93511Roadmap2023-12-01T22:02:43Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
<s>-Revue de code pour MkdirModule - From Neib<br /></s><br />
<s>-Revue de code pour Md5Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Sha1Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Base64Module - From Neib.php<br /></s><br />
<s>Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</s></br><br />
<s>-Fix get ip for client with more restricted browser</s></br><br />
<s>-New commande: cp</s></br><br />
<s>-New commande: rm</s></br><br />
<s>-Permettre de cacher la map en cas de besoin</s></br><br />
<s>-Agrandir la taille par defaut de la fenetre de chat irc</s><br /><br />
<s>-Corriger le postit qui se redimenssionne tres mal</s><br /> <br />
<s>-New command to detect if a target belongs to a scammer</s><br /><br />
<s>-Load location of the ip from cache if it was already located</s><br /><br />
<s>-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe</s><br /><br />
<s>-New feature: <i>locate</i> to perform a whereis on a given IP</s><br /><br />
<s>-Admins can Add/Remove privileges to users</s><br /><br />
<s>-Sort module by alphabetical order in the help module</s><br /><br />
<s>-remettre les bons numéros de missions dans les autres</s><br />
<s>-Ameliorer le module w pour afficher les utilisateur en ligne<br /></s><br />
<s>- inversion des explications pour "help" et "adduser"<br /></s><br />
<s>-investiguer pb username avec Majuscule<br /><br />
- Trouver un proxy peut desormais etre valider. On utilise checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su<br />
-Rediger la page a propos sur le wiki: https://wiki.hackbbs.org/index.php/HackBBS:%C3%80_propos_de</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Msg&diff=93494HackBBS:Msg2023-12-01T17:58:19Z<p>Korigan : Page créée avec « <div id="achievement" class="achievement"> <div class="section"> <h1>Envoyer un message a un autre utilisateur</h1> <p>La commande <i>msg</i> permet d'envoyer un message dans la InBox d'un autre utilisateur. Si cet utilisateur est en ligne, une notification apparaitra dans son post-it.</p> </div> </div> »</p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Envoyer un message a un autre utilisateur</h1><br />
<p>La commande <i>msg</i> permet d'envoyer un message dans la InBox d'un autre utilisateur. Si cet utilisateur est en ligne, une notification apparaitra dans son post-it.</p><br />
</div><br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Edit&diff=93493HackBBS:Edit2023-12-01T17:55:53Z<p>Korigan : Page créée avec « <div id="achievement" class="achievement"> <div class="section"> <h1>Utilisez Edit pour editer le fichier input</h1> <p>...</p> </div> </div> »</p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Utilisez Edit pour editer le fichier input</h1><br />
<p>...</p><br />
</div><br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=FAQ_:_D%C3%A9veloppement_de_modules&diff=93492FAQ : Développement de modules2023-12-01T17:54:24Z<p>Korigan : </p>
<hr />
<div><br />
== Utiliser les sessions ==<br />
Le noyau gère une pseudo isolation des variables de session. Ceci empèche un module d'écraser accidentellement une variable de session d'un autre module.<br />
<br />
Il est donc prohibé d'utiliser directement le $_SESSION de php. Pour setter / getter des variables de session, vous devez passer le service SessionService.<br />
<br />
Pour setter une variable de session, il vous faudra une instance de votre implémentation de IModule ou a défaut le nom de la classe qui implémente IModule dans votre module.<br />
<br />
<br />
<code><br />
/*Sette une variable de session*/<br />
<br />
SessionService::setSessionVarForModule($instancedeIModule, "nomVariableDeSession", $variableDeSession);<br />
<br />
/*Recupere une variable de session*/<br />
<br />
SessionService::getSessionVarForModule($instancedeIModule, "nomVariableDeSession");<br />
</code><br />
<br />
== Récupérer l'utilisateur actuellement identifié ==<br />
<br />
SessionService::getAuthenticatedUsed();<br />
<br />
Renvoie un objet du type User contenant les informations de l'utilisateur actuellement loggé.<br />
<br />
== Vérifier si un utilisateur est connecté ==<br />
<br />
UserService::getInstance()->isUserLoggedIn();<br />
<br />
Renvoie true si un utilisateur est loggué, false sinon.<br />
<br />
== Vérifier les permissions d'un utilisateur ==<br />
<br />
UserService::getInstance()->isUserAllowed($permission);<br />
<br />
Renvoie true si l'utilisateur actuellement loggué dispose de la permission envoyée en argument. False sinon.<br />
<br />
== Documentation des modules pour les utilisateurs ==<br />
Certaines commandes doivent être expliquées aux utilisateurs les plus débutants. <br />
<br />
La documentation de ces commandes peut être hébergée sur ce wiki, ce qui facilite la mise à jour du contenu. Pour accéder au contenu du wiki, Reloaded peut utiliser l'[[API de MediaWiki]]. Voici un exemple de page :<br />
<br />
[[Py]]<br />
<br />
[[Authentification]]<br />
<br />
[[Cat]]<br />
<br />
[[Chat]]<br />
<br />
[[FindProxy]]<br />
<br />
[[Help]]<br />
<br />
[[Ls]]<br />
<br />
[[Nft]]<br />
<br />
[[NoHelper]]<br />
<br />
[[Reset]]<br />
<br />
[[Rm]]<br />
<br />
[[SetProxy]]<br />
<br />
[[Edit]]<br />
<br />
[[Msg]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=FAQ_:_D%C3%A9veloppement_de_modules&diff=93491FAQ : Développement de modules2023-12-01T17:54:12Z<p>Korigan : </p>
<hr />
<div><br />
== Utiliser les sessions ==<br />
Le noyau gère une pseudo isolation des variables de session. Ceci empèche un module d'écraser accidentellement une variable de session d'un autre module.<br />
<br />
Il est donc prohibé d'utiliser directement le $_SESSION de php. Pour setter / getter des variables de session, vous devez passer le service SessionService.<br />
<br />
Pour setter une variable de session, il vous faudra une instance de votre implémentation de IModule ou a défaut le nom de la classe qui implémente IModule dans votre module.<br />
<br />
<br />
<code><br />
/*Sette une variable de session*/<br />
<br />
SessionService::setSessionVarForModule($instancedeIModule, "nomVariableDeSession", $variableDeSession);<br />
<br />
/*Recupere une variable de session*/<br />
<br />
SessionService::getSessionVarForModule($instancedeIModule, "nomVariableDeSession");<br />
</code><br />
<br />
== Récupérer l'utilisateur actuellement identifié ==<br />
<br />
SessionService::getAuthenticatedUsed();<br />
<br />
Renvoie un objet du type User contenant les informations de l'utilisateur actuellement loggé.<br />
<br />
== Vérifier si un utilisateur est connecté ==<br />
<br />
UserService::getInstance()->isUserLoggedIn();<br />
<br />
Renvoie true si un utilisateur est loggué, false sinon.<br />
<br />
== Vérifier les permissions d'un utilisateur ==<br />
<br />
UserService::getInstance()->isUserAllowed($permission);<br />
<br />
Renvoie true si l'utilisateur actuellement loggué dispose de la permission envoyée en argument. False sinon.<br />
<br />
== Documentation des modules pour les utilisateurs ==<br />
Certaines commandes doivent être expliquées aux utilisateurs les plus débutants. <br />
<br />
La documentation de ces commandes peut être hébergée sur ce wiki, ce qui facilite la mise à jour du contenu. Pour accéder au contenu du wiki, Reloaded peut utiliser l'[[API de MediaWiki]]. Voici un exemple de page :<br />
<br />
[[Py]]<br />
<br />
[[Authentification]]<br />
<br />
[[Cat]]<br />
<br />
[[Chat]]<br />
<br />
[[FindProxy]]<br />
<br />
[[Help]]<br />
<br />
[[Ls]]<br />
<br />
[[Nft]]<br />
<br />
[[NoHelper]]<br />
<br />
[[Reset]]<br />
<br />
[[Rm]]<br />
<br />
[[SetProxy]]<br />
<br />
[[edit]]<br />
<br />
[[msg]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=Roadmap&diff=93489Roadmap2023-12-01T17:51:04Z<p>Korigan : </p>
<hr />
<div><s>-Develop scan command<br /></s> <br />
<s>-Revue de code pour MkdirModule - From Neib<br /></s><br />
<s>-Revue de code pour Md5Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Sha1Module - From Neib.php<br /></s><br />
<s>-Revue de code pour Base64Module - From Neib.php<br /></s><br />
<s>Fixed: Command edituser/setprivileges => On peut maintenant definir les priv en hexa</s></br><br />
<s>-Fix get ip for client with more restricted browser</s></br><br />
<s>-New commande: cp</s></br><br />
<s>-New commande: rm</s></br><br />
<s>-Permettre de cacher la map en cas de besoin</s></br><br />
<s>-Agrandir la taille par defaut de la fenetre de chat irc</s><br /><br />
<s>-Corriger le postit qui se redimenssionne tres mal</s><br /> <br />
<s>-New command to detect if a target belongs to a scammer</s><br /><br />
<s>-Load location of the ip from cache if it was already located</s><br /><br />
<s>-Trace on the map the user connection from its location to the target. Green=safe, Blue=Normal, Red=Unsafe</s><br /><br />
<s>-New feature: <i>locate</i> to perform a whereis on a given IP</s><br /><br />
<s>-Admins can Add/Remove privileges to users</s><br /><br />
<s>-Sort module by alphabetical order in the help module</s><br /><br />
<s>-remettre les bons numéros de missions dans les autres</s><br />
<s>-Ameliorer le module w pour afficher les utilisateur en ligne<br /></s><br />
<s>- inversion des explications pour "help" et "adduser"<br /></s><br />
<s>-investiguer pb username avec Majuscule<br /><br />
- Trouver un proxy peut desormais etre valider. On utilise checkproxy<br /><br />
-Confusion entre "Vous" et "Tu", c'est l'un ou l'autre!<br /><br />
-Il faut préciser au utilisateur que les requêtes sont relayées par Tor.<br /><br />
-Fixed: Access right du fichier /var/ossec/logs/alerts/alerts.log file<br /><br />
-Fix roadmap wrap word<br /><br />
-Le retour de "help" se retrouve tout tassé.<br /><br />
-Corriger la page Help<br /><br />
REJECTED-Develop an IRC bot to update the roadmap<br /><br />
-Désafficher la map fout toujours la merde ^^<br /><br />
-Developpement d'une commande "proxyfy" ?<br /><br />
</s><br />
<br />
-Petits mots sur les bots irc?<br /><br />
-Documenter la commande edit<br />
-Documenter la commande msg<br />
-refaire aussi la page module python<br /><br />
-rajouter des controles sur la bonne syntax du contenu du fichier proxy<br />
-Faire une revue du module proxyfy<br />
-Integrer la notion de 'categorie' pour chaque commande et documenter la modification dans le wiki<br />
-Rendre dispo l'ancienne IHM de hackbbs sur 'retro.hackbbs.org'<br />
-Improve the curl command to take the client configured proxy.<br />
-Fix Control Access for Wiki module, make it available to all user when the endpoint will be fixed.<br /><br />
-Execute the autostart at logins<br />
-Disable registering/login on the wiki and use the main website cookies<br /><br />
-Develop a smart contract to offer hackbbs services to the comunity (sellable multiple times)<br /><br />
-Develop an IRC bot to fill new bugs or mark them as solved<br /><br />
-Show latest git update<br /><br />
-Tester les commandes setproxy, checkproxy, wget, sha1, md5, base64, mkdir<br /><br />
-Develop crack commands<br /><br />
<br />
-Add a reload mechanism on the captcha<br /><br />
-Add a notification mechanism to receive messages sent while the user was offline<br /><br />
-Add a command: recruite&apply<br /><br />
-Add a command: intelligence<br /><br />
-Develop: networking<br /><br />
-Add a sections: target allocation<br /><br />
-Do a mission: sslstrip Vs sslsplit<br /><br />
-Rajouter une option 'plein ecran' pour la fenetre de chat<br /> <br />
-Creer cronjob pour nettoyer les workspace gourmant en resources (espace de stockage)<br /> <br />
-certaines commandes comme rmXneib fonctionnent alors qu'elles ne devraient pas. => exiger un espace!<br /> <br />
-tester commandes msg contre xss<br/><br />
-developper un service monip pour remplacer la 3rd party et corriger le bug de cross origin policy<br/><br />
-developper un systeme pour verifier la signature gpg des contributions -> authentifier les auteurs<br /><br />
-Dans SetProxyModule.php, valider que le proxy selectionne fonctionne.<br /><br />
-Developper un APK pour packager hackbbs sur Android.<br /><br />
-Ameliorer le module kitkat pour utiliser l'api mediawiki et afficher des pages au hasard<br /><br />
-Completer notre ftp avec les documents de http://fuuu.be/hack/ <br /><br />
-Ecriture trop petite sur l'ensemble des pages (notemment l'attaque div)<br />
-Ameliorer le captcha de l'authentification<br />
-Mettre une commande help direct dans le postit<br />
-Changer la couleur du prompt<br />
-Besoin d'explications sur "setproxy" et "checkproxy"<br /><br />
-Ce serait bien dans une petite fenêtre iframe non? ^^<br /><br />
-Besoin de retaper son mdp pour les tâches d'administration et amoindrir l'impacte des CSRF<br /><br />
-le username choisi par l'utilisateur n'est pas clair. Indiquer qu'il sera utiliser par su</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:SetProxy&diff=93480HackBBS:SetProxy2023-12-01T15:59:04Z<p>Korigan : </p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Utiliser un proxy entre votre gateway HackBBS et votre cible</h1><br />
<p>Lorsque vous utilisez des commandes comme wget, suck et nmap, vous avez la possibilité de router votre trafic via le proxy de votre choix entre HackBBS et votre cible.</p><br />
<p>Sans proxy, votre trafic serait le suivant :</p><br />
<p>Utilisateur -> HackBBS Gateway -> Cible</p><br />
<p>Avec la commande setProxy, vous pouvez ajouter un proxy entre HackBBS et votre cible :</p><br />
<p>Utilisateur -> HackBBS Gateway -> Proxy -> Cible</p><br />
<p>Par défaut, HackBBS tentera de router votre trafic via Tor afin de vous assurer un niveau maximal de protection :</p><br />
<p>Utilisateur -> HackBBS Gateway -> Tor -> Cible</p><br />
<p>Cependant, vous permettre de définir votre propre proxy peut, dans certains cas, vous aider à mieux attaquer une cible, sans voir certaines requêtes filtrées par le réseau Tor. En effet, en fonction du nœud de sortie, Tor peut parfois bloquer certaines de vos requêtes. La commande setproxy vous permet alors d'utiliser une alternative à Tor.</p><br />
<p>Si vous souhaitez ne plus utiliser de proxy entre HackBBS et votre cible, il vous suffit de supprimer le fichier proxy de votre workspace: <i>rm proxy</i><br />
</div><br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=BBB&diff=93479BBB2023-12-01T15:43:36Z<p>Korigan : </p>
<hr />
<div>== Présentation ==<br />
<br />
Ce contest se déroule sur un chan IRC (pour le moment #test_bot pour les bots non fonctionnels et/ou les tests divers, #hackbbs-battle pour les rencontres. (=> sur irc.2600.net ),<br />
si ce n'est pas le cas demander a tosh ou WapiFlapi, les organisateurs.<br />
Le contest ce déroule au tour par tour (voir section 2.deroulement d'une partie)<br />
<br />
Chaque joueur (Bot) a des points de fireppower, de speed, et de timer, respectivement<br />
ces points permettent de faire des bombes qui explosent plus, de poser des bombes qui<br />
exploseront plus tard dans le temps, de se déplacer plus vite.<br />
<br />
Le but du jeu est d'être les dernier survivant.<br />
<br />
<br />
Le jeu se déroule dans un repère :<br />
<br />
<br />
Y <br />
. <br />
. <br />
. <br />
. <br />
. <br />
3 <br />
2 <br />
1 <br />
0 <br />
0 1 2 3 . . . . . X <br />
<br />
Toute coordonnée sera donnée sous la forme X Y<br />
Les valeurs minimum de X et Y sont 0<br />
Les valeurs maximum de X et Y sont (nombre de joueurs * 5) - 1<br />
Ce qui nous fait une map de largeur et de hauteur égale a 5 fois le nombre de joueurs.<br />
<br />
<br />
Quand une bombe explose et vous touche vous êtes mort et la partie est finit pour vous.<br />
<br />
== Source(s) ==<br />
<br />
Les sources de l'arbitre sont maintenant disponible :<br />
http://tosh-codes.tuxfamily.org/Documents/Irc_bot.tar.gz<br />
<br />
Vous pouvez librement le faire tourner sur un de vos salons pour vos tests personnel, et/ou sur le salon "officiel" si il n'y as pas encore d'arbitre.<br />
<br />
== Règles ==<br />
<br />
<br />
- Tout message dans le chan en public, une fois le jeu comencer (c'est a dire<br />
une fois que l'arbitre a annoncer le debut du TOUR 1) resultera en la disqualification<br />
imediate du joueur pour ce tour.<br />
<br />
- Toute tentative de changement de pseudo, ou autre action en vu de perturber<br />
l'arbitre, resultera en la disqualification imediate du joueur pour ce tour.<br />
<br />
- Tout travail en equipe des bots, est autorisee et meme encourager cependant<br />
le jeu ne s'arettera que quand il n'y aura plus qu'un survivant. Les comunication<br />
inter-euipes devront etre faites en respectant les regles.<br />
<br />
- Les organisateurs ce reservent le droit de disqualifier des joueurs quand ils<br />
considerent que ces joueurs nuient au bon déroulement du jeu en essayant de<br />
contourner les règles ou en pratiquant du 'travail en équipe' abusif (des equipes<br />
de 50bots par exemple) ou autre.<br />
<br />
== Déroulement d'une partie ==<br />
<br />
,-- Debut du tour<br />
|<br />
| l'Arbitre annonce le numero du tour, ceci marque le debut de ce tour<br />
|<br />
+-- Envoi des actions<br />
|<br />
| l'Arbitre annonce : 'SEND_YOUR_ACTION"<br />
|<br />
| Periode pendant laquelle chaque joueur peut envoyer des msg prives a l'arbitre avec ses actions.<br />
| Seul le dernier msg envoyee pendant un tour sera pris en compte<br />
|<br />
| Ce tour aura une duree limitee qui sera donnee en debut de jeu.<br />
|<br />
+-- Execution des actions<br />
|<br />
| pendant cette periode l'Arbitre efectue les calculs dans l'ordre :<br />
|<br />
| Execution des deminages.<br />
| Executions des deplacements.<br />
| Executions des etudes.<br />
| Execution des posages de bombes.<br />
| Execution des explosions. (les <br />
|<br />
+-- Publication des actions<br />
|<br />
| Pendant cette periode (de duree quasi-nulle) l'arbitre poste les actions de chacun sur le chan public.<br />
| Les Bots peuvent alors prendre conaissance des actions des autres.<br />
|<br />
'-------------------------<br />
<br />
== Commandes de l'arbitre ==<br />
Listes des informations que le bot envois sur le canal ou en privé :<br />
(les [] indique que la commande attends un argument /!\ il ne faut pas lenvoyer les '[' et ']' /!\ )<br />
--------------------------------------------------------------------<br />
<br />
BEGIN_GAME : annonce le début d'une partie, vous devez envoyer "join_game" au bot avant que la partie ne commence<br />
JOIN_OK : indique que vous êtes bien enregistré pour la partie<br />
MAP_SIZE [size] : indique la taille de la carte au début de partie (une map 2D [size]*[size])<br />
JOUEURS [nb] : [nb] joueurs ont rejoins cette partie<br />
ROUND_LENGHT [lenght] : indique que la durée de chaque tour est de [lenght] secondes<br />
POSITION [player] [x] [y] : indique que [player] se situe maintenant en [x],[y] sur la map.<br />
TOUR [nb] : indique que l'on passe au tour numéro [nb]<br />
NO_ACTION [player] : indique que [player] n'effectue aucune action pour ce tour<br />
STUDY_FIREPOWER [player] [t] : indique qu'il reste [t] tours à [player] pour gagner 1 point de firepower<br />
STUDY_SPEED [player] [t] : indique qu'il reste [t] tours à [player] pour gagner 1 point de speed<br />
STUDY_TIMER [player] [t] : indique qu'il reste [t] tours à [player] pour gagner 1 point de timer<br />
BOMB [player] [t] : indique que [player] a posé une bombe qui explosera dans [t] tours<br />
DEFUSE [player] : indique que [player] est en train de désamorcer les bombes se trouvant sur sa position<br />
SEND_YOUR_ACTION : les informations de ce tours ont finies d'arriver, vous pouvez envoyer votre action pour le prochain tour<br />
NO_ENOUGH_PLAYERS : indique qu'il n'y a pas assez de joueurs pour commencer une partie<br />
DEAD [player] : [player] est mort, la partie est finie pour lui<br />
<br />
Listes des commandes que l'on peut envoyer au bot :<br />
(les [] indique que la commande attends un argument /!\ il ne faut pas les envoyer /!\ )<br />
--------------------------------------------------------------------<br />
<br />
join_game : rejoindre une partie (après un message BEGIN_GAME)<br />
NORTH [c] : se déplacer de [c] cases vers le nord<br />
SOUTH [c] : se déplacer de [c] cases vers le sud<br />
EAST [c] : se déplacer de [c] cases vers l'est<br />
WEST [c] : se déplacer de [c] cases vers l'ouest<br />
BOMB [t] : pose une bombe à la position où l'on se trouve, et qui explosera au tour [t]<br />
STUDY_FIREPOWER : permet de gagner 1 point de firepower (il est alors impossible d'effectuer une action pendant 3 tours)<br />
STUDY_TIMER : permet de gagner 1 point de timer (impossible d'effectuer une action pendant 2 tours)<br />
STUDY_SPEED : permet de gagner 1 point de speed (impossible d'effectuer une action pendant 3 tours)<br />
DEFUSE : détruit toutes les bombes se trouvant sur votre case (impossible d'effectuer une action pendant 2 tours)<br />
<br />
== Actions ==<br />
<br />
vous trouverez ici une description des diferantes actions :<br />
<br />
NORTH/SOUTH/EAST/WEST :<br />
<br />
<br />
<br />
Ces actions permetent de ce deplacer respectivement vers Y+ , Y- , X+ , X-<br />
Ce qui est illustrée ici :<br />
<br />
<br />
<br />
Y <br />
. <br />
. N <br />
. ^ <br />
. W <- + -> E <br />
. v <br />
3 S <br />
2 <br />
1 <br />
0 <br />
0 1 2 3 . . . . . X <br />
<br />
<br />
Ces actions prenent un argument qui definit de combien de cases on se deplace dans<br />
la direction donnee. Si ce nombre est superieur au SPEED du joueur alors l'action<br />
est invalide.<br />
<br />
BOMB :<br />
<br />
BOMB permet de poser une bombe sur la case ou vous vous trouvez.<br />
<br />
Les bombes explosent en croix et ont une puissance de feu egale au FIREPOWER du joueur.<br />
Exemple :<br />
<br />
Les '!' representes les cases touchees par l'explosion de @ si @ a un FIREPOWER de 3 :<br />
<br />
Y <br />
. <br />
. ! <br />
. ! <br />
. ! <br />
. ! ! ! @ ! ! ! <br />
3 ! <br />
2 ! <br />
1 ! <br />
0 <br />
0 1 2 3 . . . . . X<br />
<br />
La bombe explosera au tour donner en parametre. ainssi BOMB 42 , fera exploser la BOMBE au tour 42.<br />
<br />
REMARQUE : Si une bombe, en explosant, atteint une autre bombe, alors cette dernière explose en même temps (et les memes regles s'appliquent pour cette nouvelle bombe.<br />
<br />
STUDY_ FIREPOWER/SPEED/TIMER :<br />
<br />
les commandes STUDY_MACHIN permetent de gagner un point dans le domaine en question.<br />
Il faut savoir que ces etudes prenent plusieurs tours.<br />
<br />
STUDY_FIREPOWER : permet de gagner 1 point de firepower (il est alors impossible d'effectuer une action pendant 3 tours)<br />
<br />
STUDY_SPEED : permet de gagner 1 point de speed (il est alors impossible d'effectuer une action pendant 3 tours)<br />
<br />
STUDY_TIMER : permet de gagner 1 point de timer (il est alors impossible d'effectuer une action pendant 2 tours)<br />
<br />
DEFUSE :<br />
<br />
Cette comande ne prend pas d'arguments , mais elle prend deux tours :p<br />
<br />
premier tour : elle detruit toue les bombes sur votre case (avants qu'elles<br />
n'explosent, si elle devaient exploser pendant ce tour)<br />
second tour : le Bot 'range son materiel' et est donc imobiliser.<br />
<br />
== FAQ ==<br />
<br />
Pour avoir des reponsses qui ne sont pas ici demander a tosh ou WapiFlapi , on mettra aussi a jour la FAQ !<br />
<br />
# A-t-on le droit d'attaquer directement et autrement qu'avec les methodes definies par le jeu les adversaires?<br />
<br />
Des rounds spécial 'FreePlay' seront organisée ou l'on poura TOUT faire :p , mais si rien n'est préciser c'est interdit,<br />
ceci afin déviter des degats pour les joueurs dont les bots ne sont pas pret du point de vue securitaire,<br />
en phase de test par example<br />
<br />
# Si je fais BOMB 5, et que je suis au tour 10, est-ce que mon 'BOMB 5' est compté comme une action quand meme<br />
# (et donc je ne peut rien faire d'autre), ou bien est-ce ignoré par l'arbitre?<br />
<br />
En fait l'arbitre prend en compte la derniere action envoyer. Qu'elle sois valide ou non.<br />
Puis si elle est valide elle est executer :<br />
- On est au tour 10.<br />
- J'envois 'BOMB 15' (qui est valide)<br />
- Puis j'envois 'BOMB 5' (invalide)<br />
L'Arbitre prend en compte uniquement le BOMB 5 qui est invalide, donc je ne ferais rien.<br />
<br />
# Si je fais BOMB 45, et STUDY_FIREPOWER entre temps, la bomb gagnera en puissance.<br />
# Le nombre de points de Timer correspond au nombre de tours maximun avant l'explosion de la bombe,<br />
<br />
Par exemple :<br />
Avec un bot à 3 points de Timer, on pourra choisir de faire exploser notre bombe jusqu'à 3 tours plus tard.<br />
Soit au tour 10, l'envois de 'BOMB' sera valide de 11 à 13</div>Koriganhttps://wiki.hackbbs.org/index.php?title=FAQ_:_D%C3%A9veloppement_de_modules&diff=93477FAQ : Développement de modules2023-12-01T15:29:19Z<p>Korigan : A protégé « FAQ : Développement de modules » : Pages devant etre protegees car incluse dans l'IHM de HackBBS Reloaded ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini)) [protection en cascade]</p>
<hr />
<div><br />
== Utiliser les sessions ==<br />
Le noyau gère une pseudo isolation des variables de session. Ceci empèche un module d'écraser accidentellement une variable de session d'un autre module.<br />
<br />
Il est donc prohibé d'utiliser directement le $_SESSION de php. Pour setter / getter des variables de session, vous devez passer le service SessionService.<br />
<br />
Pour setter une variable de session, il vous faudra une instance de votre implémentation de IModule ou a défaut le nom de la classe qui implémente IModule dans votre module.<br />
<br />
<br />
<code><br />
/*Sette une variable de session*/<br />
<br />
SessionService::setSessionVarForModule($instancedeIModule, "nomVariableDeSession", $variableDeSession);<br />
<br />
/*Recupere une variable de session*/<br />
<br />
SessionService::getSessionVarForModule($instancedeIModule, "nomVariableDeSession");<br />
</code><br />
<br />
== Récupérer l'utilisateur actuellement identifié ==<br />
<br />
SessionService::getAuthenticatedUsed();<br />
<br />
Renvoie un objet du type User contenant les informations de l'utilisateur actuellement loggé.<br />
<br />
== Vérifier si un utilisateur est connecté ==<br />
<br />
UserService::getInstance()->isUserLoggedIn();<br />
<br />
Renvoie true si un utilisateur est loggué, false sinon.<br />
<br />
== Vérifier les permissions d'un utilisateur ==<br />
<br />
UserService::getInstance()->isUserAllowed($permission);<br />
<br />
Renvoie true si l'utilisateur actuellement loggué dispose de la permission envoyée en argument. False sinon.<br />
<br />
== Documentation des modules pour les utilisateurs ==<br />
Certaines commandes doivent être expliquées aux utilisateurs les plus débutants. <br />
<br />
La documentation de ces commandes peut être hébergée sur ce wiki, ce qui facilite la mise à jour du contenu. Pour accéder au contenu du wiki, Reloaded peut utiliser l'[[API de MediaWiki]]. Voici un exemple de page :<br />
<br />
[[Py]]<br />
<br />
[[Authentification]]<br />
<br />
[[Cat]]<br />
<br />
[[Chat]]<br />
<br />
[[FindProxy]]<br />
<br />
[[Help]]<br />
<br />
[[Ls]]<br />
<br />
[[Nft]]<br />
<br />
[[NoHelper]]<br />
<br />
[[Reset]]<br />
<br />
[[Rm]]<br />
<br />
[[SetProxy]]</div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:SetProxy&diff=93476HackBBS:SetProxy2023-12-01T15:27:32Z<p>Korigan : A protégé « SetProxy » ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini))</p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Utiliser un proxy entre votre gateway HackBBS et votre cible</h1><br />
<p>Lorsque vous utilisez des commandes comme wget, suck et nmap, vous avez la possibilité de router votre trafic via le proxy de votre choix entre HackBBS et votre cible.</p><br />
<p>Sans proxy, votre trafic serait le suivant :</p><br />
<p>Utilisateur -> HackBBS Gateway -> Cible</p><br />
<p>Avec la commande setProxy, vous pouvez ajouter un proxy entre HackBBS et votre cible :</p><br />
<p>Utilisateur -> HackBBS Gateway -> Proxy -> Cible</p><br />
<p>Par défaut, HackBBS tentera de router votre trafic via Tor afin de vous assurer un niveau maximal de protection :</p><br />
<p>Utilisateur -> HackBBS Gateway -> Tor -> Cible</p><br />
<p>Cependant, vous permettre de définir votre propre proxy peut, dans certains cas, vous aider à mieux attaquer une cible, sans voir certaines requêtes filtrées par le réseau Tor. En effet, en fonction du nœud de sortie, Tor peut parfois bloquer certaines de vos requêtes. La commande setproxy vous permet alors d'utiliser une alternative à Tor.</p><br />
</div><br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Rm&diff=93475HackBBS:Rm2023-12-01T15:27:22Z<p>Korigan : A protégé « Rm » ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini))</p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Supprimer un fichier du Workspace</h1><br />
<p>Nous disposons d'un espace contenant des dossiers et des fichiers.</p><br />
<p>Vous pouvez supprimer certains fichiers et répertoires.</p><br />
</div><br />
<br />
<div class="section"><br />
<p><strong>Objectif :</strong> Supprimer un fichier ou un répertoire du "workspace".</p><br />
<p>Pour ce faire, utilisez la commande "rm".</p><br />
<p>Cette commande est sensible à la casse. Cela signifie que les minuscules et majuscules sont importantes.</p><br />
</div><br />
<br />
<div class="section"><br />
<h3>Informations complémentaires :</h3><br />
<p>La commande "rm" sera votre alliée pour cette mission.</p><br />
<p>Lorsque vous supprimez un répertoire, l'intégralité de son contenu sera supprimée.</p><br />
</div><br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Reset&diff=93474HackBBS:Reset2023-12-01T15:27:11Z<p>Korigan : A protégé « Reset » ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini))</p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Réinitialiser l'Avancement</h1><br />
<p>À tout moment, vous avez la possibilité de réinitialiser votre progression.</p><br />
</div><br />
<br />
<div class="section"><br />
<p><strong>Objectif :</strong> Réinitialiser votre progression dans les missions.</p><br />
<p>Utilisez simplement la commande "reset" pour atteindre cet objectif.</p><br />
<p>Cette commande vous permettra de recommencer les missions depuis le début, vous offrant ainsi une nouvelle opportunité.</p><br />
</div><br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:NoHelper&diff=93473HackBBS:NoHelper2023-12-01T15:26:58Z<p>Korigan : A protégé « NoHelper » ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini))</p>
<hr />
<div><div id="achievement" class="achievement"><br />
Aucune indication n'est disponible pour ce contrat.<br /><br />
Tu vas devoir agir seul(e) !<br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Nft&diff=93472HackBBS:Nft2023-12-01T15:26:43Z<p>Korigan : A protégé « Nft » ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini))</p>
<hr />
<div><div id="achievement" class="achievement"><br />
Un NFT (de l’anglais non-fungible token) ou jeton non fongible (JNF) est un objet informatique (un jeton) suivi, stocké et authentifié grâce à un protocole de chaîne de blocs (blockchain), auquel est rattaché un identifiant numérique, ce qui le rend unique et non fongible. Ce jeton accorde des droits, de propriété ou autre, sur un objet réel ou virtuel comme une œuvre d'art (souvent numérique), un contrat, un diplôme etc.. et est associé à un compte propriétaire comme tout jeton de blockchain, mais le jeton étant non fongible, le propriétaire est garanti unique, ce qui donne la valeur au jeton. <br /><br />
<br /><br />
Sur HackBBS, les NFT sont utilisé pour te permettre d'acceder a des ressources protégé comme des scripts qui peuvent être échangé ou vendu entre utilisateurs. <br /><br />
Lors de la création d'un NFT, sont créateur doit lui donner un nom, une description, un prix en Ether et un type de resources.<br /><br />
Le type de ressources peut être "endpoint" ou "fichier". Dans le cas de "endpoint", cela signifie que le NFT protege l'acces a une lien sur le web. Dans le cas de "fichier", le NFT protege l'acces a un fichier.<br /><br />
Les NFT accessible a l'achat peuvent être listé depuis la market place dans la section "buyer". (Voire commande "marketplace")<br /><br />
Pour utiliser un nft, l'utilisateur peut simplement executer la commande "nft", puis cliquer sur le bouton "executer" du NFT dont il souhaite voir láction réalisée.<br /><br />
<br />
</div></div>Koriganhttps://wiki.hackbbs.org/index.php?title=HackBBS:Ls&diff=93471HackBBS:Ls2023-12-01T15:26:32Z<p>Korigan : A protégé « Ls » ([Modifier = Autoriser uniquement les administrateurs] (infini) [Renommer = Autoriser uniquement les administrateurs] (infini))</p>
<hr />
<div><div id="achievement" class="achievement"><br />
<div class="section"><br />
<h1>Lister le Workspace</h1><br />
<p>Nous disposons d'un espace contenant des dossiers et des fichiers.</p><br />
<p>Prenez un moment pour explorer son contenu.</p><br />
</div><br />
<br />
<div class="section"><br />
<p><strong>Objectif :</strong> Énumérer les répertoires et fichiers du "workspace".</p><br />
<p>Pour ce faire, utilisez la commande "ls".</p><br />
<p>Pour en savoir plus, consultez <a href="https://duckduckgo.com/?q=commande+ls&t=newext&atb=v391-3&ia=web">cette ressource</a>.</p><br />
</div><br />
<br />
<div class="section"><br />
<h3>Informations complémentaires :</h3><br />
<p>La commande "ls" sera votre alliée pour cette mission.</p><br />
<p>Notez que nous entrons désormais dans le cœur du sujet du Hacking. Votre rôle est de rechercher les informations nécessaires.</p><br />
<p>Rappelez-vous que vous êtes ici pour apprendre, donc exploitez cette opportunité au maximum!</p><br />
</div><br />
</div></div>Korigan