Introduction
Gearroom prête du matériel à des créateurs locaux. Les membres se connectent pour consulter leurs informations de retrait, de retour et de rangement. Une limite de connexion doit suspendre les essais répétés de mots de passe, mais le compteur actuel est partagé par tous. Les échecs d’un membre peuvent empêcher un autre de commencer son travail.
Utilisez Hydra pour produire un petit test reproductible, faites suivre le compteur au compte et démontrez la protection ainsi que l’accès normal. Votre résultat est une politique réellement active avec une authentification réelle et des dossiers de prêt intacts, pas un rapport. Vous ne pouvez bloquer que le membre de test synthétique déclaré. Utilisez le membre de référence uniquement avec son mot de passe correct connu et ne modifiez ni serveur, ni comptes, ni dossiers originaux.
Vous devez connaître la saisie élémentaire dans un terminal, les chemins et le changement d’onglet. Les options Hydra nécessaires, les champs du formulaire, les guillemets du shell et la structure JSON de la politique sont expliqués ici. Le terminal Workstation et le site Equipment Desk préparés sont deux interfaces d’un même conteneur de formation isolé. Cette unité démarre indépendamment des autres laboratoires. Toutes les personnes, tous les mots de passe et dossiers sont des données synthétiques locales de formation.
Prévoyez environ 55 minutes, lecture et erreurs courantes comprises. Il s’agit d’une estimation de l’auteur, pas d’un temps mesuré auprès de débutants. La petite limite de trois échecs en 30 secondes suivis d’un blocage de 12 secondes est un contrat de formation, pas une recommandation de sécurité pour la production.
Établir deux connexions de membres fonctionnelles
Dans cette étape, ouvrez les deux dossiers connus avant de tester la limite. Une authentification réussie signifie que le serveur a accepté une identité précise ; celle-ci détermine le dossier que vous pouvez consulter.
Ouvrez Equipment Desk. Sélectionnez Review brief dans la navigation supérieure. Le membre de test autorisé est member, avec le mot de passe Member24. Le membre de référence normal est reference, avec Reference24. Ces identifiants sont connus : vous n’avez pas à découvrir leurs mots de passe.

Utilisez les deux champs libellés et le bouton Sign in. La ligne sous le formulaire indique le véritable chemin POST et les noms de champs envoyés.
Sélectionnez Member sign-in, saisissez les identifiants de test puis sélectionnez Sign in. Attendez-vous à Signed in as member. Sélectionnez Open your record. Vérifiez le prêt LN-204, Mina Park, Compact projector kit, le retrait Thursday 14:00, le retour Monday 10:00 et la note concernant le câble HDMI dans la poche latérale. Sélectionnez Sign out.

Comparez les champs Member et Record au matériel, au retrait, au retour et à la note de rangement. Une connexion réussie ne prouve pas à elle seule que le dossier original est intact.
Sélectionnez à nouveau Member sign-in, utilisez les identifiants de référence puis Open your record. Vérifiez LN-119, Theo Bell, Portable audio recorder et la note sur la bonnette anti-vent. Sélectionnez encore Sign out. Ces dossiers sont distincts ; conserver les deux fait partie de votre tâche. Un navigateur stocke normalement automatiquement le cookie, un identifiant de session émis par le serveur, après une connexion réussie. La déconnexion termine cette session.
Passez à Workstation. Son répertoire initial configuré est /home/labex/project/login-limits. pwd affiche le répertoire actuel :
pwd
Vous devez voir /home/labex/project/login-limits. Si vous êtes ailleurs, cd change de répertoire :
cd /home/labex/project/login-limits
cat affiche un fichier. Lisez la politique préparée :
cat policy.json
Il s’agit de JSON, un format de texte structuré dont les champs nommés sont entre guillemets doubles. Les deux-points relient les noms aux valeurs ; les virgules séparent les champs et les accolades entourent un objet. La clé key vaut actuellement global : le même compteur peut donc inclure différents comptes. failed_attempts, window_seconds et cooldown_seconds correspondent aux trois échecs, à la fenêtre de 30 secondes et au blocage de 12 secondes convenus. entry_groups énumère les chemins de connexion préparés ; conservez cette correspondance dans cette unité. Vous étudierez les groupes d’entrée dans le prochain laboratoire indépendant.
deskctl est la commande préparée de maintenance limitée. Son action status lit la véritable politique active ; elle ne se connecte pas, ne vide pas les compteurs et ne modifie pas le service :
deskctl status
La politique active doit correspondre au fichier. Une révision identifie celle qui est en cours d’utilisation. Modifier le fichier plus tard ne changera pas la politique active tant que vous ne l’aurez pas appliquée.
Observer le problème du compteur partagé
Dans cette étape, envoyez uniquement les mots de passe incorrects fournis pour le membre de test autorisé, puis observez comment le compteur global refuse aussi le membre de référence.
Restez dans Workstation. Lisez le fichier complet des candidats autorisés :
cat wrong-passwords.txt
NotThis11
NotThis22
NotThis33
NotThis44
NotThis55
Les cinq sont volontairement incorrects pour le compte de test. N’ajoutez pas de véritables identifiants et ne testez pas un autre compte de façon répétée. Hydra produira les tentatives bornées ; ce n’est ni un concours de vitesse ni une recherche de mots de passe.
127.0.0.1 est l’adresse de bouclage de ce conteneur ; le port 8080 atteint son service local préparé, pas un site extérieur. Le formulaire principal envoie une requête POST à /signin. POST transporte des champs nommés dans son corps. Ici, il s’agit de username et password, séparés par &. L’argument http-post-form de Hydra comporte trois parties séparées par des deux-points : le chemin, les champs et une condition de réponse. ^USER^ et ^PASS^ sont des marqueurs Hydra. S=Signed in as exige le texte d’une réponse réellement authentifiée ; une page limitée ou refusée ne doit pas compter comme une connexion valide.
Les options Hydra sont -I pour ignorer une ancienne demande de restauration dans cet espace, -l member pour fixer un nom d’utilisateur, -P pour son fichier de mots de passe fourni, -s pour le port et -t 1 pour un seul travailleur. Un travailleur rend cette petite séquence facile à observer. Il ne crée pas de limite côté serveur. L’argument final entre apostrophes reste un seul argument même avec des espaces et &.
Le bloc suivant utilise aussi curl, un client HTTP de terminal. Il est distinct du navigateur et ne réutilise pas automatiquement sa session. --data fournit les champs POST ; -s masque la progression, -o enregistre le corps et -w affiche le statut HTTP. Le \n entre apostrophes ajoute un saut de ligne au statut affiché. Les apostrophes réservent &, les espaces et %{http_code} à curl au lieu de les laisser interpréter par le shell. Ces deux connexions de diagnostic utilisent des mots de passe corrects connus.
Attendez d’abord l’expiration naturelle des tentatives précédentes. deskctl wait observe la disponibilité ; il ne réinitialise pas les compteurs et n’ajoute pas de tentatives :
deskctl wait
Exécutez les trois commandes suivantes ensemble, comme un seul bloc. Elles capturent les deux réponses pendant le blocage de 12 secondes ; il n’est donc pas nécessaire de lire entre les commandes :
hydra -I -l member -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o test-login.html -w 'Test member HTTP %{http_code}\n' --data 'username=member&password=Member24' http://127.0.0.1:8080/signin
curl -s -o reference-login.html -w 'Reference member HTTP %{http_code}\n' --data 'username=reference&password=Reference24' http://127.0.0.1:8080/signin
Hydra doit signaler 0 valid password found, car tous les candidats fournis sont incorrects. Les deux diagnostics doivent indiquer HTTP 429. Un 429 signifie que le service limite les tentatives ; il ne dit pas que le mot de passe est incorrect. Curl peut se terminer normalement en recevant un refus HTTP : lisez donc le statut affiché et le corps enregistré au lieu de confondre son code de sortie avec une authentification. Ici, la troisième tentative refusée lance le blocage ; les suivantes sont limitées avant la vérification de leur mot de passe.
grep recherche du texte. Son option -o affiche seulement les mots correspondants, sans la page HTML qui les entoure :
grep -o 'Too many attempts' reference-login.html
Le mot de passe correct du compte de référence a aussi été refusé. Voilà le problème métier : un compteur global suspend la nouvelle connexion d’un autre membre.
Lisez les événements existants du serveur :
deskctl events
Cherchez member sur /signin avec les résultats rejected, threshold, puis limited, suivi de la connexion de reference marquée limited. Ce sont de véritables décisions du serveur, pas des interprétations de la sortie Hydra. L’historique reste lisible après le blocage ; vous n’avez pas à saisir une page fugitive.
Si un diagnostic a été trop tardif, laissez terminer deskctl wait puis relancez le même petit bloc de trois commandes. Si Hydra signale une erreur de syntaxe ou de connexion, corrigez l’argument entre apostrophes, l’adresse 127.0.0.1, le port 8080 ou le chemin déclaré avant d’interpréter le résultat. Un échec de connexion ne prouve pas une protection réussie. HTTP 400 indique des champs incorrects ; 404 indique un mauvais chemin. Corrigez ces erreurs ordinaires sans réinitialiser l’environnement.
Appliquer une politique par compte
Dans cette étape, changez uniquement la clé du compteur pour donner à chaque membre une limite indépendante. Conservez les valeurs de formation et la correspondance des entrées.
Restez dans Workstation. La commande suivante remplace votre policy.json local. cat > policy.json écrit le texte dans le fichier ; > écrase un fichier existant. Un here-document fournit les lignes jusqu’au marqueur final EOF. Les apostrophes de 'EOF' conservent le contenu littéralement. Placez le marqueur seul sur sa ligne, sans espaces au début :
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "loans",
"/mobile/signin": "loans"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
La seule valeur modifiée est key : account regroupe les tentatives par identifiant de membre soumis au lieu de réunir tous les comptes. Abaisser le seuil à zéro, supprimer un compte ou refuser tout le monde ne préserverait pas le service normal.
Appliquez le fichier avec la commande de contrôle préparée :
deskctl apply policy.json --wait
apply valide le fichier et modifie explicitement la politique active. --wait attend l’expiration naturelle de tout blocage ou de toute fenêtre partielle d’échecs avant d’appliquer une politique différente. Une fenêtre partielle peut prendre jusqu’à 30 secondes pour se stabiliser. L’ancienne politique reste active pendant l’attente. La commande ne redémarre pas le service, n’efface pas l’historique et ne vide pas les compteurs actifs. Réappliquer exactement la même politique ne produit aucun changement et ne peut pas débloquer un compte.
Pour la première modification, attendez-vous à ok: true, changed: true et à une nouvelle révision dont key vaut account. Si vous avez déjà appliqué le même fichier valide, changed: false est normal.
deskctl status
Lisez la politique active, pas seulement le fichier. Une erreur JSON provient souvent d’une virgule, d’un guillemet ou d’une accolade manquants : comparez le fichier au bloc complet, corrigez puis appliquez de nouveau. Une politique invalide laisse la politique active inchangée. Ne redémarrez pas le serveur et ne modifiez pas son implémentation pour réussir la vérification.
Démontrer la protection et le rétablissement normal
Dans cette étape, testez la politique effective, préservez l’accès du membre de référence et confirmez le rétablissement naturel du membre limité.
Restez dans Workstation. Commencez avec des compteurs naturellement stabilisés :
deskctl wait
Relancez ce bloc complet. Les chemins, les mots de passe de diagnostic connus et les candidats incorrects restent identiques ; la clé active du compteur a changé :
hydra -I -l member -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o test-login.html -w 'Test member HTTP %{http_code}\n' --data 'username=member&password=Member24' http://127.0.0.1:8080/signin
curl -s -o reference-login.html -w 'Reference member HTTP %{http_code}\n' --data 'username=reference&password=Reference24' http://127.0.0.1:8080/signin
Attendez-vous à zéro résultat Hydra, Test member HTTP 429 et Reference member HTTP 200. Le compte protégé reste limité tandis que le compte de référence distinct peut s’authentifier. HTTP 200 ne suffit pas ; vérifiez l’identité dans le corps enregistré :
grep -o 'Signed in as reference' reference-login.html
grep -o 'Too many attempts' test-login.html
Lisez les décisions enregistrées sous la nouvelle révision :
deskctl events
Vous devez voir un seuil et une connexion limitée de member, avec une connexion authentifiée de reference. Seuls les événements de la politique actuelle démontrent cette réparation. Les preuves de l’ancienne politique globale sont conservées, mais ne prouvent pas la nouvelle. Si vous avez fait une pause entre les commandes et manqué le blocage, attendez naturellement puis répétez le même bloc borné ; n’augmentez pas les candidats et ne videz pas les compteurs.
Laissez maintenant se terminer le blocage du membre de test :
deskctl wait
Passez à Equipment Desk. Sélectionnez Member sign-in, utilisez member / Member24, puis Sign in et Open your record. Le dossier doit toujours être LN-204, Mina Park, Compact projector kit, avec tous ses détails originaux. Cette nouvelle connexion démontre le rétablissement après expiration naturelle. Sélectionnez Sign out, puis Member sign-in avec reference / Reference24 et ouvrez encore LN-119. Confirmez l’enregistreur et la note sur la bonnette, puis déconnectez-vous.
Enfin, sélectionnez Visitor guide. Les informations publiques de retrait restent disponibles. Vos connexions curl du terminal et ce navigateur utilisent des sessions distinctes ; la réponse curl précédente ne connecte pas automatiquement le navigateur. Si un dossier retourne 403, connectez-vous par le véritable formulaire puis utilisez Open your record. Corrigez une faute ordinaire de mot de passe ou de chemin au lieu de redémarrer la VM.
Votre policy.json correspond désormais à la politique réelle par compte. Le serveur possède de véritables preuves de la révision actuelle : échecs répétés, tentative avec mot de passe correct limitée, authentification normale de référence pendant cette limite, puis connexion de test naturellement rétablie, avec les deux dossiers originaux intacts. L’évaluation lit ces faits existants et les pages publiques ; elle ne soumet pas de connexions manquantes, ne réinitialise pas les limites et ne termine pas le rétablissement à votre place. Cette formation contrôlée à processus unique prouve le comportement local déclaré, pas une défense complète de production contre toutes les attaques d’authentification.
Résumé
Vous avez utilisé une séquence Hydra bornée pour révéler un compteur global, appliqué une politique par compte sans redémarrer ni réinitialiser le service, puis vérifié refus et disponibilité. Le membre de test est resté limité même avec un mot de passe correct, un autre membre a pu s’authentifier et l’expiration naturelle a rétabli l’accès à des dossiers intacts. La politique actuelle et les décisions réelles du serveur établissent le résultat, pas une sortie Hydra vide ou un statut vert seuls.



