Construction du champ de tir CTF, production des questions de compétition Web et déploiement de l'environnement Docker du terminal

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

 écrire devant

╔════════════════════════════════════════ ═════════ ═════════════════════════╗

Bonjour à tous! Je m'appelle Myon. Tant que mon serveur cloud n'a pas expiré, je vais vous faire un tutoriel très détaillé sur la mise en place du pas de tir pour la compétition CTF ainsi que la production des questions de compétition Web et le déploiement de l'environnement docker. capacité limitée, je peux seulement vous dire quelques choses simples et basiques. Vous êtes invités à communiquer et à apprendre les uns des autres dans la zone de commentaires. J'espère que vous pourrez apprendre quelque chose de nouveau grâce à ce blog. J'attends également avec impatience votre attention et soutien!

╚════════════════════════════════════════ ═════════ ═════════════════════════╝

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

Parce que j'ai déjà construit ce genre de stand de tir CTF. Si vous avez lu le blog que j'ai écrit auparavant, vous saurez que le précédent était purement basé sur CTFd, mais cette fois il est basé sur H1ve (celui-ci a l'air mieux). J'ai été responsable de la construction, de l'exploitation et de la maintenance du dernier concours CTF dans notre école, ainsi que du déploiement de l'environnement des questions du concours Pwn et Web. Je les présenterai plus tard.

Laissez-moi d'abord vous montrer les rendus du produit fini.

page de garde:

classement:

défis:

annonce:

J'écris ce blog principalement pour compléter et résumer une partie du contenu précédent. Si vous ne comprenez rien à la lecture, n'hésitez pas à vous référer à mes articles précédents. Dans la rubrique "Construction du site Web", merci encore pour votre soutien et attention!

 Avant de commencer cet article, permettez-moi de partager avec vous un site d’apprentissage de l’intelligence artificielle, simple à comprendre et humoristique.

Intelligence artificielle icon-default.png?t=N7T8https://www.captainbed.cn/myon/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Utiliser le serveur : centos8 OK le texte commence ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Table des matières

Partie 1, construction du stand de tir CTF

1. Cloner H1ve depuis github

2. Installer le menu fixe

3. Installez python-pip 

4. Installez docker-composer 

5. Tirez l'image et démarrez le mode unique

6. Définissez tous les conteneurs de l'ensemble du répertoire H1ve pour qu'ils démarrent automatiquement

Partie 2, Production de questions de compétition Web et déploiement de l'environnement Docker de terminal

1. Préparation des documents de questions

(1) dossier de fichiers

(2)Dockerfichier

​(3)docker-compose.yml

2. Déploiement de l'environnement Docker

3. Déploiement front-end des questions de concurrence

4. Question de concurrence sur les terminaux, fonctionnement et maintenance


Partie 1, construction du stand de tir CTF

S'il s'agit d'un nouveau serveur et qu'il n'y a pas de commande git, nous l'installons d'abord.

yum install git

1. Cloner H1ve depuis github

Vous pouvez le placer où vous le souhaitez. J'ai créé un dossier Myon dans le répertoire racine et je l'y ai cloné.

git clone https://github.com/D0g3-Lab/H1ve.git

Après le clonage, nous devons d'abord installer certaines choses

Configurer la source Yum

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2. Installer le menu fixe

yum install -y docker-ce

 Voir terminé signifie que l’installation est terminée.

Vérifions la version de Docker et configurons-le pour qu'il démarre automatiquement au démarrage

docker version

systemctl start docker

systemctl enable docker

Ensuite, nous installons docker-compose

(Cette commande docker-compose sera fréquemment utilisée plus tard lors de l'extraction d'images et de l'environnement de compétition)

3. Installez python-pip 

✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧

Notez que l'installation par défaut de pip ici provoquera une erreur. N'exécutez pas d'abord la commande suivante, lisez d'abord l'explication de l'erreur plus tard.

L'installation par défaut est la version Python2.7, et ici nous avons besoin de la version Python3 de pip

✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧

yum -y install epel-release

yum -y install python-pip

Si vous voyez terminé, cela signifie que l'installation est réussie. Nous pouvons également le vérifier en utilisant la commande

pip -V

Mais lorsque nous essaierons d'installer docker-compose, nous rencontrerons une erreur

pip install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple 

Le sens général est que notre version pip est trop ancienne et nous ne pouvons pas trouver de version docker-compose appropriée pour satisfaire

 Essayez de mettre à jour la version pip 

pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade pip

Mais il y a une forte probabilité que vous rencontriez le rapport d’erreur suivant :

Impossible de trouver une version qui satisfait à l'exigence docker-compose (à partir des versions : )
Aucune distribution correspondante trouvée pour docker-compose

Vous utilisez pip version 8.1.2, cependant la version 23.3.1 est disponible.
Vous devriez envisager de mettre à niveau via la commande « pip install --upgrade pip ».

Solution : installer pip de python3

D'après pip -v ci-dessus, nous savons que la version par défaut de Python2.7 est installée

Alors ici, nous installons pip de Python3 et le mettons à niveau

yum install python3-pip

pip3 install --upgrade pip

Vous pouvez voir que pip a été mis à niveau avec succès vers 21.3.1 

 Toutes les opérations pip ultérieures seront remplacées par pip3.

4. Installez docker-composer 

pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple 

Vous pouvez voir que l’installation a réussi. Quant à l’avertissement, ne vous inquiétez pas.

Ensuite, nous entrons dans le répertoire H1ve que nous avons cloné auparavant.

Modifier le fichier de configuration

(Il est préférable de ne pas effectuer cette étape en premier, car je ne suis pas sûr que l'erreur suivante soit liée à cette étape. Il est recommandé d'essayer directement l'opération d'extraction d'image suivante. En cas de problème, vous pouvez essayer de supprimer H1ve. et cloner à nouveau)

sed -i 's/mariadb:10.4/mariadb:10.4.12/g' single.yml

sed -i 's/mariadb:10.4/mariadb:10.4.12/g' single-nginx.yml

5. Tirez l'image et démarrez le mode unique

docker-compose -f single.yml up

J'ai rencontré l'erreur suivante :

ERREUR : manifeste pour mariadb : 10.4.12.12.12.12 introuvable : manifeste inconnu : manifeste inconnu 

Cette situation signifie que Docker a besoin que nous spécifiions le numéro de version de l'image téléchargée.

Mais je n'ai pas trouvé de solution, j'ai donc remplacé son fichier single.yml

Ensuite, vous pouvez le retirer (je soupçonne que cela est dû à la modification du fichier de configuration plus tôt)

Accédez ensuite au port 8000

Après avoir rempli les informations de base, la page ci-dessous peut être chargée.

J'ai donc supprimé H1ve et l'ai cloné à nouveau pour le tester.

Déterminer s'il y a un problème avec single.yml en raison d'une modification du fichier de configuration

Après le clonage, vous n'avez rien à faire, allez simplement dans le répertoire et extrayez-le directement, et il devient en fait

Ensuite, essayez d'activer le mode Single-Nginx 

docker-compose -f single-nginx.yml up

 Il peut être extrait avec succès mais n'est pas accessible ici

Modifiez le fichier de configuration pour vérification et constatez qu'il peut être extrait avec succès.

C'est très étrange. Bien sûr, je ne peux pas exclure que lorsque j'ai extrait la version précédente, cela ait eu un impact sur l'environnement de la version que je viens de cloner depuis github.

En général, ma suggestion est d'essayer d'extraire l'image directement après l'avoir clonée (pour des tests ultérieurs, vous pouvez l'extraire avec succès sans configurer de fichier de configuration. Les détails dépendent toujours de la configuration de l'environnement de votre propre serveur) . sont également possibles. Essayez de supprimer H1ve et de le re-cloner.

À propos, vous devez également vous assurer que les ports utilisés sont autorisés et définis dans les règles du groupe de sécurité du serveur.

Bien entendu, si vous souhaitez accéder directement à l'adresse IP et vous rendre au stand de tir, vous devrez peut-être mettre en place une redirection proxy pour rediriger le port 80 vers 8000.

(Ce n'est pas nécessaire dans celui dont j'ai parlé avant qui a été construit entièrement basé sur CTFd. L'accès direct à l'IP est la page d'accueil du stand de tir)

Pour un contenu spécifique, veuillez vous référer à mon blog précédent : "Construction d'un blog basé sur un serveur cloud et d'un champ de tir - Expérience et leçons".

Nous devons ouvrir tous les conteneurs liés à H1ve et les configurer pour qu'ils démarrent automatiquement

Afficher le conteneur

docker ps -a

Démarrer le conteneur 

docker start 容器名

6. Définissez tous les conteneurs de l'ensemble du répertoire H1ve pour qu'ils démarrent automatiquement

docker update --restart=always $(docker ps -aq)

 Afficher les conteneurs ouverts

docker ps

Désormais, nous n'avons plus besoin de tirer l'image, nous pouvons accéder directement à l'adresse du champ de prise de vue + au numéro de port, et le champ de prise de vue sera toujours ouvert.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

Vient ensuite la deuxième partie ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
 

Partie 2, Production de questions de compétition Web et déploiement de l'environnement Docker de terminal

Afin de faciliter les tests, j'ai ouvert ici tous les ports du serveur, vous pouvez ajouter le vôtre en fonction du port où se situe la question.

1. Préparation des documents de questions

Chaque page Web doit contenir au moins un index.php ou index.html (fichier de la page d'accueil)

Commençons par la question Web la plus simple, comme cacher le drapeau dans le code source d'une page Web.

Le fichier s'appelle index.php et son contenu est comme indiqué ci-dessous

Le contenu peut paraître compliqué, mais en réalité il ne s’agit que d’une page. 

(1) dossier de fichiers

Nous avons donc le fichier de questions, créons un nouveau dossier files, et mettons ce fichier index.php dans le répertoire files.

(Pourquoi le dossier s'appelle-t-il fichiers ? Parce que je vous donnerai deux fichiers modèles plus tard, suivez simplement ce que j'ai dit)

Bien sûr, si vous pouvez écrire Dockerfile et docker-compose.yml vous-même, vous pouvez le faire comme vous le souhaitez.

J'ai demandé à ChatGPT de l'écrire, et c'est faisable, mais ici je parle principalement de routines de base, je vais donc vous donner un modèle. Suivez ce que j'ai dit et vous pourrez déployer des questions simples de compétition Web.

En plus des fichiers, nous avons également besoin de deux autres fichiers :

(2)Dockerfichier

(Vous pouvez utiliser ce fichier directement sans modification)

Le contenu est le suivant :

FROM php:5.6-fpm-alpine

RUN rm -rf ar/wwwml/*

COPY ./files ar/wwwml

EXPOSE 80

WORKDIR ar/wwwml
CMD ["php", "-S", "0.0.0.0:80"]



(3)docker-compose.yml

(Ce fichier doit remplacer le port par le port sur lequel votre propre question est déployée)

Le contenu est le suivant :

version: "2"

services:

  web:
    build: .
    restart: always
    ports:
      - "0.0.0.0:8001:80"
    environment:
      - FLAG=Myon{s0_eaSyest_wEb_fl2}

Explication du contenu du deuxième fichier :

0.0.0.0:8001:80 # La question est déployée sur le port 8001. Les joueurs peuvent accéder à l'environnement de la question en accédant au port 8001.

80 est le port où se trouve ngnix. Cela dépend de votre environnement. Il est généralement à 80. Bien sûr, j'ai déjà rencontré d'autres problèmes lors du déploiement des questions du concours Pwn. Je dois modifier le fichier de configuration. Pour plus de détails, vous pouvez vous référer à mon blog précédent:

"Déploiement de questions Web dans CTFd sur la base de CTFTraining"  et

"Déployer la question pwn basée sur xinetd (100 % réussi et peut nc l'adresse du champ de tir)"

FLAG=Myon{s0_eaSyest_wEb_fl2} # En fait, j'ai découvert plus tard que cela semble n'avoir aucun impact, car le bon indicateur est placé vous-même dans le fichier, à moins que la question ne soit liée à des variables d'environnement qui peuvent l'affecter, donc pour être sur du côté sûr, vous pouvez remplacer la valeur FLAG ici par la valeur du drapeau de votre propre question, juste pour garantir davantage la cohérence.

Tout le reste reste inchangé.

Mettez les fichiers ci-dessus : files, Dockerfile, docker-compose.yml dans un nouveau dossier

Afin de faciliter la mémoire, le fonctionnement et la maintenance, j'aime nommer la question d'après le nom, par exemple, elle s'appelle f12 (voir le code source de la question)

De cette façon, tous les fichiers de notre concours web sont prêts. Mettez le dossier f12 dans le terminal.

J'ai d'abord créé un dossier testctf ici pour stocker les questions du concours CTF.

Commande pour créer un nouveau dossier

mkdir 文件夹名

Lors du transfert de fichiers, je préfère utiliser xftp, directement tirer ou coller et copier.

2. Déploiement de l'environnement Docker

Entrez dans le répertoire f12 et utilisez la commande pour extraire l'image

docker-compose up -d

Une fois l'extraction réussie, utilisez la commande pour afficher le conteneur

docker ps

Accédez au port où se trouve la question, voici le 8001

Utilisez F12 pour trouver le drapeau dans le code source de la page Web

3. Déploiement front-end des questions de concurrence

Alors, comment poser les questions du concours, les ajouter au début de notre champ de tir, placer le drapeau et marquer, etc., ont été discutés en détail dans mon blog "Déploiement de questions Web dans CTFd basé sur CTFTraining", donc j'ai n'entrerai pas dans les détails ici.

http://t.csdnimg.cn/TRiOo

Le lien devrait expirer. Vous pouvez rechercher directement le nom de mon blog pour le retrouver, ou dans la colonne "Construction du site"

De plus, j'ai également ici le code source de certains autres types de questions Web. Il est très facile de créer ces questions telles que les mini-jeux, le passage de paramètres de base, la désérialisation PHP, l'exécution de commandes, le téléchargement de fichiers, le contournement PHP et les fuites d'informations. ... Bienvenue à tous, venez me voir pour en discuter.

Pour l'injection SQL, il doit être combiné avec la base de données. Le code source de certaines questions peut également être écrit par ChatGPT.

4. Question de concurrence sur les terminaux, fonctionnement et maintenance

Si nous rencontrons des problèmes lors du déploiement de l'environnement Docker, tels qu'une inaccessibilité, ou si certaines informations du fichier n'ont pas été modifiées, mais que l'environnement d'image du sujet a été extrait, nous devons d'abord supprimer le conteneur, puis le récupérer :

Afficher le nom du conteneur de questions

docker ps

Supprimez le conteneur problématique à l'aide de la commande

docker rm -f 容器名

La page de questions n'est plus accessible pour le moment

Mais voici le point : pouvons-nous toujours utiliser docker-compose up -d pour extraire directement ?

Cette opération ne fonctionnera pas. Après avoir extrait, vous obtiendrez le même conteneur qu'avant de le supprimer, même si vous avez modifié le contenu du fichier.

Pour cette question, vous pouvez toujours lire mon précédent blog "Déployer la question pwn basée sur xinetd (100% réussi et peut nc l'adresse du stand de tir)"

http://t.csdnimg.cn/3QPno

Étant donné que Docker construit un conteneur, vous pouvez le comprendre comme un environnement indépendant et les chemins des fichiers qu'il contient sont différents. Pourquoi osons-nous déployer des vulnérabilités directement sur nos propres serveurs ? C'est parce que la sécurité de Docker est toujours très forte. Bien sûr, il peut y avoir des conteneurs Docker qui s'échappent vers le local, mais en général, les choses construites avec Docker sont toujours très sûres, même Si quelque chose est cassé, cela n'affectera pas les éléments locaux sur votre serveur. Il s'agit d'un environnement distinct.

Pour véritablement remplacer l'environnement des questions, il existe deux opérations correctes :

Méthode 1 : renommez le dossier de questions (par exemple, remplacez F12 par F12) et utilisez la commande mv

Bien sûr, vous devez vous assurer que le nom que vous renommez est le nom de l'image qui n'a pas été extraite, c'est-à-dire un tout nouveau nom.

mv f12 F12

A ce moment, nous entrons F12 pour extraire l'image, en utilisant également

docker-compose up -d

Méthode 2 : supprimer tous les réseaux inutilisés. Les réseaux inutilisés sont des réseaux qui ne sont référencés par aucun conteneur.

docker network prune

Parce que le conteneur d'origine de ce réseau a été supprimé par nous, mais son réseau existe toujours, mais il n'est pas référencé par le conteneur, il doit donc d'abord être effacé, puis l'extraction d'image peut être utilisée pour extraire le contenu de votre fichier modifié.

Il est recommandé d'utiliser la méthode 2, mais vous pouvez également utiliser la méthode de renommage et attendre que les réseaux inutilisés s'accumulent pendant un certain temps avant de les effacer.

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

L'article se termine ici. J'espère que vous gagnerez quelque chose en le lisant. J'attends avec impatience votre attention et votre soutien◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

Je suppose que tu aimes

Origine blog.csdn.net/Myon5/article/details/134540207
conseillé
Classement