跳到正文
DEV Community· Noël Nac·· 4 小時前AI 評分29

mon-recoweb 如何用 DIRB 和 ffuf 自動化 CTF 網站枚舉

Automatiser l'énumération web en CTF avec DIRB et ffuf

AI 導讀

mon-recoweb v3.0.0 是一款 Bash 腳本,結合 DIRB 和 ffuf,自動執行 CTF 網站的目錄及檔案枚舉,並將結果整合至 RESULTS_SUMMARY.txt。預設流程分為三個階段,亦可調整搜尋目錄、檔案副檔名、字典及執行參數,並設定結果篩選。

正文

Pourquoi j'ai développé mon-recoweb

Lorsque je résous une machine Hack The Box depuis ma Kali Linux, je suis toujours la même méthode de travail, organisée en trois grandes étapes : l'énumération, la prise de pied pour obtenir user.txt, puis l'escalade de privilèges pour atteindre root.txt.

L'énumération web fait systématiquement partie de cette première étape. Elle consiste notamment à rechercher des répertoires, des fichiers et des chemins qui pourraient ne pas être directement accessibles depuis les pages visibles du site.

Pour effectuer ces recherches, j'utilise deux outils bien connus : dirb et ffuf. Ils sont efficaces, mais leur utilisation successive implique de préparer plusieurs commandes, de choisir les wordlists appropriées et de consulter différents fichiers de résultats.

À force de répéter ces opérations au fil de mes résolutions CTF, j'ai voulu disposer d'un script qui automatise cette partie du travail, tout en conservant la possibilité d'adapter les recherches aux particularités de chaque cible.

C'est ainsi qu'est né mon-recoweb, un script Bash qui combine dirb et ffuf, organise leur exécution et rassemble les découvertes dans un fichier de synthèse unique. Aujourd'hui disponible sur mon site en version 3.0.0, il a progressivement évolué pour offrir davantage de possibilités de configuration et de filtrage des résultats, tout en conservant son objectif initial : automatiser les tâches répétitives de l'énumération web pour faciliter l'analyse des découvertes.

Présentation de mon-recoweb v3.0.0

mon-recoweb est un script Bash destiné à automatiser la recherche de répertoires et de fichiers sur un serveur web, en combinant les outils dirb et ffuf.

Son fonctionnement repose sur trois phases d'énumération exécutées successivement :

  1. Une première recherche générique avec dirb.
  2. Une recherche de répertoires avec ffuf.
  3. Une recherche de fichiers avec ffuf.

Dans sa configuration par défaut, il suffit de lui indiquer une cible pour lancer ces trois phases :

mon-recoweb cible.htb

Le script vérifie d'abord l'accessibilité de la cible, puis exécute les recherches en utilisant des wordlists par défaut.

Il permet également d'adapter l'énumération aux particularités de la cible :

  • Limiter les recherches à un répertoire précis.
  • Personnaliser les extensions de fichiers à rechercher.
  • Choisir les wordlists utilisées par chaque phase.
  • Activer ou désactiver individuellement les trois phases d'énumération.
  • Ajuster les paramètres d'exécution, notamment le nombre de threads, le débit et les délais d'attente.
  • Filtrer les résultats trop nombreux ou non pertinents, notamment en utilisant les différentes options de filtrage de ffuf.

Les découvertes de chaque phase sont regroupées dans un fichier de synthèse unique, RESULTS_SUMMARY.txt, situé dans un sous-répertoire du répertoire de travail. Ce fichier présente à la fois les résultats consolidés et les découvertes propres à chaque outil.

Cette organisation permet de conserver les résultats détaillés tout en disposant d'une vue d'ensemble des découvertes. Les différentes phases peuvent également être exécutées séparément, avec leurs propres paramètres de filtrage, sans perdre les résultats des autres phases lors de la mise à jour de la synthèse.

Les trois phases d'énumération

Par défaut, mon-recoweb exécute successivement trois phases de recherche. Chacune utilise une wordlist adaptée et poursuit un objectif particulier.

Phase 1 — Recherche générique avec DIRB

La première phase utilise dirb pour effectuer une recherche générale de répertoires et de fichiers sur la cible.

Le script utilise par défaut la wordlist common.txt, fournie avec DIRB et située dans :

/usr/share/wordlists/dirb/common.txt

Cette liste contient des noms courants de répertoires et de fichiers que l'on peut rencontrer sur un serveur web.

Cette première recherche permet de repérer rapidement des éléments intéressants, comme des répertoires d'administration, des pages de connexion ou des fichiers de configuration accessibles depuis le serveur.

Phase 2 — Recherche de répertoires avec ffuf

La deuxième phase utilise ffuf pour effectuer une recherche spécifiquement orientée vers les répertoires.

Elle s'appuie par défaut sur la wordlist :

/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt

Cette liste contient un ensemble beaucoup plus important de noms de répertoires potentiels.

ffuf utilise les noms contenus dans la wordlist pour construire et tester différentes URL sur le serveur web ciblé.

Cette deuxième recherche complète celle de DIRB en explorant un plus grand nombre de chemins possibles.

Phase 3 — Recherche de fichiers avec ffuf

La troisième phase utilise également ffuf, mais cette fois avec une wordlist orientée vers les noms de fichiers.

Par défaut, il s'agit de :

/usr/share/seclists/Discovery/Web-Content/raft-medium-files.txt

L'objectif est de rechercher des fichiers potentiellement intéressants : scripts, pages web, fichiers de sauvegarde ou de configuration, par exemple.

Cette phase permet également de rechercher des extensions particulières grâce à l'option --ext, notamment php, txt ou bak.

Tu verras plus loin comment adapter ces extensions en fonction de la technologie utilisée par la cible.

Pourquoi combiner ces trois phases ?

DIRB fournit une première recherche générale, tandis que les deux phases ffuf permettent d'approfondir séparément la découverte des répertoires et des fichiers.

Les recherches peuvent produire certains résultats identiques, mais aussi des découvertes différentes en fonction des wordlists utilisées.

L'intérêt de mon-recoweb est non seulement d'enchaîner automatiquement ces trois phases, mais aussi de regrouper leurs découvertes dans un fichier de synthèse unique, RESULTS_SUMMARY.txt, afin d'obtenir une vue consolidée des résultats.

Adapter l'énumération à la cible

Les paramètres par défaut de mon-recoweb permettent de lancer une première reconnaissance sans configuration particulière. Mais au cours d'une résolution CTF, les informations découvertes peuvent t'amener à rechercher des fichiers spécifiques, à explorer un répertoire particulier ou à modifier les paramètres des scans.

Le script propose plusieurs options pour adapter les recherches à ces situations.

Cibler un répertoire précis

Plutôt que de relancer une énumération sur l'ensemble d'un site, tu peux limiter les recherches à un répertoire identifié précédemment.

Par exemple, si tu as découvert un répertoire /cgi-bin/, lance :

mon-recoweb cible.htb/cgi-bin/

Les trois phases d'énumération se concentrent alors sur ce chemin.

Tu peux également préciser le protocole dans l'URL, notamment lorsque le serveur utilise HTTPS :

mon-recoweb https://cible.htb/cgi-bin/

Rechercher des extensions particulières

Lorsque tu identifies la technologie utilisée par une application web, il peut être intéressant de rechercher certaines extensions de fichiers.

Par exemple :

mon-recoweb cible.htb --ext php,txt,bak

L'option --ext permet d'ajouter les extensions indiquées à la recherche de fichiers effectuée par ffuf.

Tu peux ainsi adapter ton énumération à une application PHP ou rechercher d'éventuels fichiers de sauvegarde.

Autre exemple, pour explorer un répertoire /cgi-bin/ :

mon-recoweb cible.htb/cgi-bin/ --ext sh,cgi,pl

Cette commande associe un ciblage précis à une recherche d'extensions adaptées aux scripts susceptibles de se trouver dans ce répertoire.

Choisir ses propres wordlists

Chaque phase utilise une wordlist par défaut, comme expliqué précédemment.

Tu peux toutefois les remplacer individuellement avec les options suivantes :

  • --dirb-wordlist : wordlist utilisée par DIRB.
  • --raft-dirs : wordlist utilisée par ffuf pour les répertoires.
  • --raft-files : wordlist utilisée par ffuf pour les fichiers.

Par exemple, pour utiliser une autre liste lors de la recherche de répertoires :

mon-recoweb cible.htb \
  --raft-dirs /chemin/vers/ma-wordlist.txt

Cette possibilité est utile lorsque tu disposes d'une liste spécialisée, adaptée à une technologie ou à un contexte particulier.

Ajuster les paramètres d'exécution

Selon la réactivité du serveur web, tu peux également adapter certains paramètres de ffuf.

Option Fonction
-T, --threads Nombre de threads utilisés par ffuf (30 par défaut).
--rate Limite le nombre de requêtes par seconde.
--timeout Définit le délai d'attente d'une réponse (10 secondes par défaut).

Par exemple :

mon-recoweb cible.htb --threads 10 --rate 20 --timeout 15

Cette commande limite le nombre de threads à 10, fixe un maximum de 20 requêtes par seconde et porte le délai d'attente à 15 secondes.

Ces réglages peuvent être utiles lorsqu'un serveur répond lentement ou lorsque tu souhaites limiter l'intensité des requêtes.

Accéder aux options avancées

Les options présentées ici ne représentent qu'une partie des possibilités de configuration de mon-recoweb.

Pour afficher l'ensemble des paramètres disponibles, utilise :

mon-recoweb --help-advanced

Tu y retrouveras notamment les options de ciblage, de sélection des phases, de personnalisation des wordlists, de filtrage et de gestion des résultats.

La partie suivante présente les filtres de ffuf, particulièrement utiles lorsque les recherches produisent un nombre important de résultats non pertinents.

Filtrer les résultats parasites

Lors d'une énumération web, il arrive que ffuf retourne un nombre très important de résultats, parfois plusieurs milliers. Cela ne signifie pas nécessairement que tous les répertoires ou fichiers détectés existent réellement.

Certaines applications renvoient en effet une réponse similaire pour de nombreuses URL inexistantes. Par exemple, un serveur peut rediriger systématiquement les requêtes vers une page d'accueil ou retourner une page d'erreur personnalisée avec un code HTTP 200.

Dans ces situations, il devient difficile de distinguer les découvertes intéressantes des réponses parasites.

Comprendre les codes HTTP et les tailles de réponse

Pour identifier les réponses à filtrer, commence par examiner deux informations affichées par ffuf :

  • Status : le code HTTP retourné par le serveur (200, 301, 302, 403, 404, etc.).
  • Size : la taille de la réponse HTTP, exprimée en octets.

Imaginons que plusieurs chemins inexistants retournent systématiquement le code 302, avec une réponse de 97 octets.

Ce comportement peut indiquer que le serveur redirige toutes les requêtes inconnues vers une même page.

Il devient alors intéressant de filtrer ces réponses pour mieux faire ressortir les autres résultats.

Filtrer selon le code HTTP

mon-recoweb permet de transmettre des options supplémentaires à ffuf avec --ffuf-extra.

Pour exclure les réponses HTTP 302, utilise :

mon-recoweb cible.htb \
  --ffuf-extra "-fc 302"

L'option -fc (filter code) demande à ffuf de ne pas afficher les réponses portant le code HTTP indiqué.

Tu peux également exclure plusieurs codes :

mon-recoweb cible.htb \
  --ffuf-extra "-fc 302,401"

Attention toutefois : un code HTTP 302 ou 401 peut aussi correspondre à une ressource réellement intéressante. Avant de le filtrer, vérifie qu'il caractérise bien les réponses parasites observées sur la cible.

Filtrer selon la taille de réponse

Lorsque les réponses parasites présentent une taille identique, le filtrage par taille peut être plus précis.

Par exemple :

mon-recoweb cible.htb \
  --ffuf-extra "-fs 97"

L'option -fs (filter size) exclut les réponses de 97 octets.

Cette méthode est particulièrement utile lorsque le serveur retourne le même code HTTP pour des ressources existantes et inexistantes, mais avec des tailles de réponse différentes.

Tu peux également indiquer plusieurs tailles :

mon-recoweb cible.htb \
  --ffuf-extra "-fs 97,49,125"

Les valeurs utilisées dans ces exemples sont fictives. Elles doivent être adaptées aux réponses réellement observées sur la cible.

Combiner plusieurs critères avec -fmode and

Il arrive que le filtrage par code HTTP ou par taille soit insuffisant.

ffuf permet alors de combiner plusieurs critères grâce à l'option -fmode and.

Par exemple :

mon-recoweb cible.htb \
  --no-dirb \
  --no-ffuf-dirs \
  --ffuf-extra "-fc 302,401 -fs 97,49,125 -fmode and"

Cette commande exécute uniquement la phase de recherche de fichiers avec ffuf.

Elle exclut les réponses qui correspondent simultanément aux deux conditions suivantes :

  • Un code HTTP 302 ou 401.
  • Une taille de réponse de 97, 49 ou 125 octets.

Avec -fmode and, une réponse n'est donc écartée que si elle satisfait les deux critères. Cela permet de conserver, par exemple, une réponse HTTP 302 dont la taille ne correspond pas aux valeurs filtrées.

Ce filtrage combiné peut être particulièrement utile lorsque certaines réponses légitimes partagent le même code HTTP que les réponses parasites.

La détection automatique des soft-404

mon-recoweb intègre également une détection automatique de certaines réponses parasites.

Avant de lancer les recherches, le script teste une URL volontairement inexistante sur la cible.

Si le serveur retourne un code HTTP 200 malgré l'absence de cette ressource, le script mesure la taille de la réponse et peut utiliser cette valeur comme filtre pour les phases ffuf.

Ce comportement est appelé soft-404 : le serveur retourne une page correspondant à une ressource inexistante, mais avec un code HTTP qui indique normalement une réponse réussie.

Cette détection automatique constitue une première protection contre certains faux positifs.

Elle possède toutefois une limite : si le contenu de la page varie d'une requête à l'autre, sa taille peut également changer. Le filtre automatique risque alors de devenir insuffisant ou d'écarter des résultats intéressants.

C'est pourquoi il reste important de vérifier manuellement les réponses suspectes et d'adapter les filtres lorsque cela s'avère nécessaire.

Adapter les filtres à chaque phase ffuf

Les recherches de répertoires et de fichiers ne produisent pas nécessairement les mêmes réponses parasites.

Si les deux phases nécessitent des filtres différents, tu peux les exécuter séparément en désactivant les autres recherches.

Par exemple, pour rechercher uniquement les répertoires :

mon-recoweb cible.htb \
  --no-dirb \
  --no-ffuf-files \
  --ffuf-extra "-fc 302 -fs 97 -fmode and"

Puis, pour rechercher uniquement les fichiers :

mon-recoweb cible.htb \
  --no-dirb \
  --no-ffuf-dirs \
  --ffuf-extra "-fc 302,401 -fs 97,49,125 -fmode and"

Chaque phase dispose ainsi de filtres adaptés aux réponses observées.

Les résultats des différentes phases sont ensuite regroupés dans RESULTS_SUMMARY.txt, sans perdre les découvertes conservées des recherches précédentes.

Cette possibilité permet d'affiner progressivement l'énumération, plutôt que de relancer systématiquement les trois phases avec des paramètres identiques.

Exploiter les résultats de l'énumération

Une fois les recherches terminées, mon-recoweb rassemble les découvertes des trois phases dans un fichier unique, RESULTS_SUMMARY.txt.

Ce fichier permet de consulter les résultats sans devoir parcourir séparément les sorties de DIRB et des deux recherches ffuf.

Où retrouver les résultats ?

Par défaut, le script crée un répertoire scans_recoweb dans le répertoire de travail depuis lequel tu l'as lancé.

Lorsque la cible est un nom de domaine, un sous-répertoire portant ce nom est également créé.

Par exemple, après avoir exécuté :

mon-recoweb cible.htb

Tu retrouveras le fichier de synthèse dans :

scans_recoweb/cible.htb/RESULTS_SUMMARY.txt

Si tu cibles un répertoire particulier, le script ajoute également ce répertoire au chemin de sortie.

Tu peux modifier l'emplacement de base avec l'option -o ou --outdir.

Comment est organisé RESULTS_SUMMARY.txt ?

Le fichier commence par des informations permettant de retrouver le contexte de l'énumération :

  • La commande utilisée pour lancer le script.
  • Le nom et la version de mon-recoweb.
  • La cible et le périmètre analysé.
  • La date d'exécution.

Il contient ensuite deux grandes parties.

Résultat global (agrégé)

Cette première partie rassemble les découvertes des trois phases dans une liste commune.

Les URL sont normalisées et les résultats identiques sont regroupés afin de faciliter leur consultation.

Détails par outil

Cette seconde partie conserve les découvertes séparément, sous trois rubriques :

  • [DIRB]
  • [FFUF — DIRECTORIES]
  • [FFUF — FILES]

Tu peux ainsi retrouver les résultats de chaque recherche tout en disposant d'une vue consolidée.

Exemple de résultat

Voici un exemple simplifié et fictif de ce que tu pourrais retrouver dans le fichier :

=== Résultat global (agrégé) ===

http://cible.htb/admin/ (CODE:301|SIZE:0)
http://cible.htb/login.php (CODE:200|SIZE:2480)
http://cible.htb/robots.txt (CODE:200|SIZE:124)

=== Détails par outil ===

[DIRB]
http://cible.htb/login.php (CODE:200|SIZE:2480)
http://cible.htb/robots.txt (CODE:200|SIZE:124)

[FFUF — DIRECTORIES]
http://cible.htb/admin/ (CODE:301|SIZE:0)

[FFUF — FILES]
http://cible.htb/login.php (CODE:200|SIZE:2480)

Dans cet exemple, login.php a été découvert par DIRB et par ffuf-files.

Il apparaît une seule fois dans le résultat global, mais reste présent dans les deux rubriques détaillées.

Les codes HTTP et les tailles de réponse permettent également d'identifier les ressources qui méritent une vérification.

Conserver les découvertes entre plusieurs recherches

Une autre particularité de mon-recoweb est sa capacité à conserver les résultats des phases qui ne sont pas relancées.

Imaginons que tu aies exécuté les trois phases, puis décidé de relancer uniquement ffuf-files avec des filtres plus précis.

Le script met alors à jour les résultats de ffuf-files tout en conservant ceux de DIRB et de ffuf-directories.

Le fichier RESULTS_SUMMARY.txt est ainsi reconstruit avec les nouvelles découvertes et les résultats conservés des autres phases.

Cette gestion fonctionne également lorsque les phases sont exécutées depuis plusieurs terminaux : le script synchronise l'écriture du fichier pour éviter les conflits entre les exécutions.

Analyser les découvertes

Le fichier de synthèse constitue un point de départ pour poursuivre l'investigation.

Lors de sa lecture, porte notamment ton attention sur :

  • Les pages de connexion ou d'administration.
  • Les répertoires inhabituels.
  • Les fichiers de configuration ou de sauvegarde potentiellement accessibles.
  • Les codes HTTP 301 et 302, qui peuvent révéler des redirections intéressantes.
  • Les réponses HTTP 403, qui indiquent qu'une ressource ou un chemin est interdit d'accès.

Une URL découverte ne constitue pas nécessairement une vulnérabilité.

L'étape suivante consiste à examiner les ressources intéressantes, à vérifier les réponses du serveur et à comprendre leur rôle dans l'application web.

C'est précisément l'intérêt du fichier de synthèse : disposer d'une vue organisée des découvertes pour orienter la suite de l'énumération.

Installation et première utilisation

Le code source de mon-recoweb est disponible dans mon dépôt GitHub public mes-scripts-public.

Prérequis

Avant de lancer le script, assure-toi de disposer de dirb, de ffuf, de curl, de flock, de jq, de column, de nc et des wordlists nécessaires aux recherches.

Sur Kali Linux, tu peux vérifier la présence de ces outils avec :

command -v dirb
command -v ffuf
command -v curl
command -v flock
command -v jq
command -v column
command -v nc

Les wordlists utilisées par défaut ont été présentées dans la partie consacrée aux trois phases d'énumération. Vérifie également qu'elles sont présentes sur ton système.

Installer mon-recoweb

Plusieurs méthodes permettent d'installer mon-recoweb sur Kali Linux, selon que tu souhaites utiliser uniquement ce script ou disposer de l'ensemble de mes outils.

Méthode 1 — Télécharger uniquement mon-recoweb

Si tu souhaites utiliser uniquement mon-recoweb, tu peux télécharger directement son fichier depuis le dépôt GitHub public :

wget https://raw.githubusercontent.com/NoelNac-HackEthical/mes-scripts-public/main/mon-recoweb
chmod +x mon-recoweb

Il suffit ensuite de placer le script dans un répertoire déjà présent dans ton PATH, par exemple ~/.local/bin, pour pouvoir l'exécuter depuis n'importe quel répertoire de travail.

Cette méthode nécessite de vérifier manuellement la présence des dépendances et des wordlists utilisées par le script, ainsi que de gérer ses futures mises à jour.

Méthode 2 — Utiliser installe-mes-scripts

Pour installer et maintenir à jour l'ensemble de mes scripts, tu peux utiliser installe-mes-scripts, disponible sur HackEthical.

Sur cette page, clique sur le bouton Télécharger pour récupérer le script, puis rends-le exécutable et lance-le depuis ton terminal Kali Linux :

chmod +x installe-mes-scripts
./installe-mes-scripts

L'installateur récupère l'ensemble des scripts publiés, les installe dans ~/.local/bin/mes-scripts/ et prend en charge leur mise à jour ainsi que leur accessibilité depuis le PATH.

Il s'occupe également de l'installation de la wordlist personnalisée utilisée par mon-subdomains, si elle n'est pas déjà présente.

Méthode 3 — Cloner le dépôt GitHub

Si tu es plus à l'aise avec Git et souhaites disposer localement de l'ensemble des scripts, tu peux également cloner directement le dépôt public :

git clone https://github.com/NoelNac-HackEthical/mes-scripts-public.git

Tu disposeras alors d'une copie locale de tous les scripts publiés, que tu pourras consulter et exécuter depuis le répertoire du dépôt, ou intégrer à ton environnement selon tes préférences.

Cette méthode convient particulièrement aux utilisateurs qui souhaitent examiner les scripts, suivre leurs évolutions ou gérer eux-mêmes leur installation et leurs mises à jour.

En résumé, le téléchargement direct permet de récupérer uniquement mon-recoweb, tandis que installe-mes-scripts et le clonage du dépôt donnent accès à l'ensemble de mes scripts. Le clonage ne les installe toutefois pas automatiquement dans ton PATH.

Vérifier l'installation

Une fois l'installation terminée, vérifie la version de mon-recoweb :

mon-recoweb --version

Pour la version présentée dans cet article, le résultat attendu est :

mon-recoweb v3.0.0

Tu peux également afficher l'aide :

mon-recoweb --help

Et accéder à l'ensemble des paramètres de configuration avec :

mon-recoweb --help-advanced

Lancer une première énumération

Pour commencer, place-toi dans le répertoire de travail de ta machine CTF.

Vérifie que le nom de domaine ciblé est correctement résolu depuis Kali Linux, puis lance :

mon-recoweb cible.htb

Le script exécute les trois phases d'énumération avec leurs paramètres par défaut.

Les résultats sont enregistrés dans le répertoire scans_recoweb, créé automatiquement dans ton répertoire de travail.

À la fin des recherches, tu peux consulter le fichier de synthèse :

cat scans_recoweb/cible.htb/RESULTS_SUMMARY.txt

Tu disposes ainsi d'une première vue des répertoires et fichiers découverts, que tu peux ensuite examiner pour poursuivre ton énumération.

Si les résultats sont trop nombreux ou contiennent des réponses parasites, les options de filtrage présentées précédemment te permettront d'affiner les recherches.

Conclusion

Avec mon-recoweb, j'ai voulu rendre l'énumération web plus simple à organiser et plus efficace lors de mes résolutions CTF.

En combinant dirb et ffuf dans un même script Bash, il devient possible d'automatiser trois recherches complémentaires, d'adapter les paramètres aux particularités d'une cible et de filtrer les résultats qui compliquent parfois l'analyse.

Le regroupement des découvertes dans RESULTS_SUMMARY.txt apporte également un avantage pratique : disposer d'une vue consolidée des résultats, sans perdre les informations propres à chaque phase.

Mais l'automatisation ne remplace pas l'analyse. Une URL découverte, un code HTTP inhabituel ou un fichier accessible ne constituent pas nécessairement une vulnérabilité. Ce sont avant tout des éléments à examiner pour orienter la suite de l'investigation.

mon-recoweb reste un outil que je fais évoluer au fil de mes résolutions Hack The Box, en fonction des besoins rencontrés et des améliorations qui me semblent utiles.

Si tu souhaites découvrir son fonctionnement plus en détail, tu peux consulter la documentation de mon-recoweb sur HackEthical.

Transparence éditoriale

Le script mon-recoweb a été développé avec l'assistance de ChatGPT, à partir de besoins rencontrés lors de mes résolutions CTF. Ses fonctionnalités, ses tests et ses évolutions reposent sur mon utilisation personnelle. ChatGPT m'a également accompagné dans la structuration, la formulation et la relecture de cet article.

來源:DEV Community · dev.to