Construcción de campo de tiro CTF, producción de preguntas de competencia web e implementación de entorno de terminal acoplable

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

 escribir delante

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

¡Hola a todos! Soy Myon. Si bien mi servidor en la nube no ha caducado, les daré un tutorial muy detallado sobre cómo configurar el campo de tiro para la competencia CTF, así como la producción de preguntas de la competencia web y la implementación del entorno Docker. Debido a mi capacidad limitada, solo puedo decirles algunas cosas básicas y simples. Pueden comunicarse y aprender unos de otros en el área de comentarios. Espero que puedan aprender algo nuevo a través de este blog. También espero su atención y ¡apoyo!

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

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

Porque he construido este tipo de campo de tiro CTF antes. Si has leído el blog que escribí antes, sabrás que el anterior se basaba exclusivamente en CTFd, pero esta vez se basa en H1ve (este se ve mejor). Fui responsable de la construcción, operación y mantenimiento de la última competencia CTF en nuestra escuela, así como del despliegue ambiental de las preguntas de competencia Pwn y Web, las presentaré más adelante.

Déjame mostrarte primero las representaciones del producto terminado.

página delantera:

clasificación:

desafíos:

anuncio:

Escribo este blog principalmente para complementar y resumir parte del contenido anterior. Si no comprende nada durante el proceso de lectura, puede consultar mis artículos anteriores. En la columna "Construcción del sitio web", gracias nuevamente por su apoyo y atención!

 Antes de comenzar el artículo, permítanme compartir con ustedes un sitio web para aprender inteligencia artificial, que es fácil de entender y divertido.

Inteligencia artificial icono-default.png?t=N7T8https://www.captainbed.cn/myon/

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

Usar servidor: centos8 OK comienza el texto ◉ ‿ ◉

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

Tabla de contenido

Parte 1, construcción del campo de tiro CTF

1. Clonar H1ve desde github

2. Instalar la ventana acoplable

3. Instalar Python-pip 

4. Instale Docker-compose 

5. Extraiga la imagen e inicie el modo único.

6. Configure todos los contenedores en todo el directorio H1ve para que se inicien automáticamente.

Parte 2, Producción de preguntas de competencia web e implementación del entorno de terminal acoplable

1. Preparación de documentos de preguntas.

(1) carpeta de archivos

(2)Archivo Docker

​(3)docker-compose.yml

2. Implementación del entorno Docker

3. Despliegue inicial de preguntas sobre competencia.

4. Operación y mantenimiento de preguntas de competencia de terminales


Parte 1, construcción del campo de tiro CTF

Si es un servidor nuevo y no hay ningún comando git, lo instalamos primero.

yum install git

1. Clonar H1ve desde github

Puedes colocarlo donde quieras. Creé una carpeta Myon en el directorio raíz y la cloné en ella.

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

Después de la clonación, todavía necesitamos instalar algunas cosas primero.

Configurar fuente yum

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

2. Instalar la ventana acoplable

yum install -y docker-ce

 Ver completa significa que la instalación está completa.

Comprobemos la versión de Docker y configurémosla para que se inicie automáticamente al arrancar.

docker version

systemctl start docker

systemctl enable docker

Luego instalamos docker-compose

(Este comando docker-compose se usará con frecuencia más adelante al extraer imágenes y entornos de competencia)

3. Instalar Python-pip 

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

Tenga en cuenta que la instalación predeterminada de pip aquí provocará un error. No ejecute el siguiente comando primero, primero lea la explicación del error más adelante.

La instalación predeterminada es la versión Python2.7, y aquí necesitamos la versión Python3 de pip.

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

yum -y install epel-release

yum -y install python-pip

Si lo ve completo significa que la instalación fue exitosa, también podemos verificarlo usando el comando

pip -V

Pero cuando intentamos instalar Docker-Compose, encontraremos un error.

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

El significado general es que nuestra versión de pip es demasiado antigua y no podemos encontrar una versión de Docker-Compose adecuada para satisfacer

 Intenta actualizar la versión de pip 

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

Pero existe una alta probabilidad de que encuentre el siguiente informe de error:

No se pudo encontrar una versión que satisfaga el requisito docker-compose (de versiones:)
No se encontró ninguna distribución coincidente para docker-compose

Está utilizando la versión 8.1.2 de pip, sin embargo, la versión 23.3.1 está disponible.
Debería considerar actualizar mediante el comando 'pip install --upgrade pip'.

Solución: instale pip de python3

Por el pip -v anterior sabemos que la versión predeterminada de Python2.7 está instalada

Entonces aquí instalamos pip de Python3 y lo actualizamos.

yum install python3-pip

pip3 install --upgrade pip

Puede ver que pip se actualizó exitosamente a 21.3.1 

 Todas las operaciones de pip posteriores serán reemplazadas por pip3.

4. Instale Docker-compose 

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

Puedes ver que la instalación fue exitosa. En cuanto a la advertencia, no te preocupes.

A continuación ingresamos al directorio H1ve que clonamos antes.

Modificar archivo de configuración

(Es mejor no realizar este paso primero, porque no estoy seguro de si el error posterior está relacionado con este paso. Se recomienda intentar la operación de extracción de imágenes posterior directamente. Si hay algún problema, puede intentar eliminar H1ve y clonar de nuevo)

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. Extraiga la imagen e inicie el modo único.

docker-compose -f single.yml up

Encontré el siguiente error:

ERROR: manifiesto para mariadb: 10.4.12.12.12.12 no encontrado: manifiesto desconocido: manifiesto desconocido 

Esta situación significa que Docker necesita que especifiquemos el número de versión de la imagen descargada.

Pero no encontré una solución, así que reemplacé su archivo single.yml.

Luego puedes extraerlo (sospecho que se debe a que modificaste el archivo de configuración anteriormente)

Luego acceda al puerto 8000

Después de completar la información básica, se puede cargar la página que se muestra a continuación.

Así que eliminé H1ve y lo cloné nuevamente para realizar pruebas.

Determinar si hay un problema con single.yml debido a la modificación del archivo de configuración

Después de la clonación, no necesita hacer nada, simplemente vaya al directorio y extraigalo directamente, y en realidad se convierte en

Luego intente activar el modo Single-Nginx 

docker-compose -f single-nginx.yml up

 Se puede extraer correctamente pero no se puede acceder a él aquí.

Modifique el archivo de configuración para verificarlo y descubra que se puede extraer con éxito.

Es muy extraño, por supuesto, no puedo descartar que cuando saqué la versión anterior, tuvo un impacto en el entorno de la versión que acabo de clonar de github.

En general, mi sugerencia para usted es intentar extraer la imagen directamente después de clonarla (para pruebas posteriores, puede extraerla exitosamente sin configurar un archivo de configuración. Los detalles aún dependen de la configuración del entorno de su propio servidor) . También son posibles. Intente eliminar H1ve y volver a clonarlo.

Por cierto, también debe asegurarse de que los puertos utilizados estén permitidos y configurados en las reglas del grupo de seguridad del servidor.

Por supuesto, si desea acceder directamente a la dirección IP e ir al campo de tiro, es posible que deba configurar un reenvío de proxy para reenviar el puerto 80 al 8000.

(No es necesario en el que hablé antes que fue construido íntegramente en base a CTFd. El acceso directo a la IP es la página de inicio del campo de tiro)

Para contenido específico, consulte mi blog anterior: "Construcción de campos de tiro y blogs basados ​​en servidores en la nube: experiencia y lecciones"

Necesitamos abrir todos los contenedores relacionados con H1ve y configurarlos para que se inicien automáticamente.

Ver contenedor

docker ps -a

Contenedor de inicio 

docker start 容器名

6. Configure todos los contenedores en todo el directorio H1ve para que se inicien automáticamente.

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

 Ver contenedores abiertos

docker ps

Ahora ya no necesitamos extraer la imagen, podemos acceder directamente a la dirección del campo de tiro + número de puerto, y el campo de tiro siempre estará abierto.

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

Luego viene la segunda parte ◉ ‿ ◉

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

Parte 2, Producción de preguntas de competencia web e implementación del entorno de terminal acoplable

Para facilitar las pruebas, he abierto todos los puertos del servidor aquí, puedes agregar el tuyo según el puerto donde se encuentre la pregunta.

1. Preparación de documentos de preguntas.

Cada página web debe contener al menos un index.php o index.html (archivo de página de inicio)

Primero hagamos la pregunta web más simple, como ocultar la bandera en el código fuente de una página web.

El archivo se llama index.php y su contenido es el que se muestra a continuación

El contenido puede parecer complicado, pero en realidad es sólo una página. 

(1) carpeta de archivos

Entonces tenemos el archivo de preguntas, creamos una nueva carpeta de archivos y colocamos este archivo index.php en el directorio de archivos.

(¿Por qué la carpeta se llama archivos? Porque te daré dos archivos de plantilla más adelante, solo sigue lo que dije)

Por supuesto, si puedes escribir Dockerfile y docker-compose.yml tú mismo, puedes hacerlo como quieras.

Le pedí a ChatGPT que lo escribiera y es factible, pero aquí estoy hablando principalmente de rutinas básicas, así que le daré una plantilla. Siga lo que dije y podrá implementar preguntas simples de competencia web.

Además de los archivos, también necesitamos otros dos archivos:

(2)Archivo Docker

(Puede utilizar este archivo directamente sin modificaciones)

El contenido es el siguiente:

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) ventana acoplable-compose.yml

(Este archivo necesita cambiar el puerto al puerto donde se implementa su propia pregunta)

El contenido es el siguiente:

version: "2"

services:

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

Explicación del contenido del segundo archivo:

0.0.0.0:8001:80 # La pregunta se implementa en el puerto 8001. Los jugadores pueden acceder al entorno de preguntas accediendo al puerto 8001.

80 es el puerto donde se encuentra ngnix. Depende de su entorno. Generalmente es 80. Por supuesto, he encontrado otros problemas al implementar preguntas de competencia de Pwn antes. Necesito modificar el archivo de configuración. Para más detalles, usted Puedes consultar mi blog anterior:

"Implementación de preguntas web en CTFd basadas en CTFraining"  y

"Implemente la pregunta pwn basada en xinetd (100% exitosa y puede encontrar la dirección del campo de tiro)"

FLAG=Myon{s0_eaSyest_wEb_fl2} # De hecho, descubrí más tarde que parece no tener ningún impacto, porque usted mismo coloca la bandera correcta en el archivo, a menos que la pregunta esté relacionada con variables de entorno que puedan afectarla, así que para estar en Para estar seguro, puede cambiar el valor FLAG aquí al valor de bandera de su propia pregunta, solo para garantizar aún más la coherencia.

Todo lo demás permanece sin cambios.

Coloque los archivos anteriores: archivos, Dockerfile, docker-compose.yml en una nueva carpeta

Para facilitar la memoria, la operación y el mantenimiento, me gusta nombrar la pregunta después del nombre, por ejemplo, se llama f12 (ver el código fuente de la pregunta)

De esta forma ya tenemos todos los archivos para nuestro concurso web listos, metemos la carpeta f12 en el terminal.

Primero creé una carpeta testctf aquí para almacenar las preguntas de la competencia CTF.

Comando para crear una nueva carpeta

mkdir 文件夹名

Al transferir archivos, prefiero usar xftp, extraer o pegar y copiar directamente.

2. Implementación del entorno Docker

Ingrese al directorio f12 y use el comando para extraer la imagen

docker-compose up -d

Después de que la extracción sea exitosa, use el comando para ver el contenedor

docker ps

Accede al puerto donde se encuentra la pregunta, aquí es 8001

Utilice F12 para encontrar la bandera en el código fuente de la página web

3. Despliegue inicial de preguntas sobre competencia.

Entonces, cómo colocar las preguntas de la competencia, agregarlas al frente de nuestro campo de tiro, configurar la bandera y la puntuación, etc., se analizó en detalle en mi blog "Implementación de preguntas web en CTFd basadas en CTFTraining", así que No entraré en detalles aquí.

http://t.csdnimg.cn/TRiOo

El enlace debería caducar, puedes buscar directamente el nombre de mi blog para encontrarlo, o en la columna de "Construcción del sitio web"

Además, también tengo el código fuente de algunos otros tipos de preguntas web aquí. Es muy fácil crear estas preguntas, como minijuegos, paso de parámetros básicos, deserialización de PHP, ejecución de comandos, carga de archivos, omisión de PHP y fuga de información. Bienvenidos a todos. Venid a mí para conversar.

Para la inyección SQL, es necesario combinarlo con la base de datos y ChatGPT también puede escribir el código fuente de algunas preguntas.

4. Operación y mantenimiento de preguntas de competencia de terminales

Si encontramos problemas al implementar el entorno de la ventana acoplable, como inaccesibilidad o parte de la información del archivo no se ha modificado, pero se ha extraído el entorno de imagen del tema, primero debemos eliminar el contenedor y luego volver a extraerlo:

Ver el nombre del contenedor de preguntas

docker ps

Elimine el contenedor problemático usando el comando

docker rm -f 容器名

Ya no se puede acceder a la página de preguntas en este momento.

Pero aquí viene el punto: ¿ podemos seguir usando docker-compose up -d para extraer directamente?

Esta operación no funcionará. Después de extraerlo, obtendrá el mismo contenedor que antes de eliminarlo, aunque haya modificado el contenido del archivo.

Para esta pregunta, todavía puedes leer mi blog anterior "Implementar la pregunta pwn basada en xinetd (100% exitoso y no puedo encontrar la dirección del campo de tiro)".

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

Debido a que Docker crea un contenedor, puede entenderlo como un entorno independiente y las rutas de los archivos que contiene son diferentes. ¿Por qué nos atrevemos a implementar vulnerabilidades directamente en nuestros propios servidores? Es porque la seguridad de Docker sigue siendo muy sólida. Por supuesto, puede haber contenedores de Docker que se escapen al local, pero en general, las cosas construidas con Docker siguen siendo muy seguras, incluso Si algo se rompe, no afectará las cosas locales en su servidor. Es un entorno separado.

Para reemplazar verdaderamente el entorno de preguntas, existen dos operaciones correctas:

Método 1: cambie el nombre de la carpeta de preguntas (por ejemplo, cambie F12 a F12) y use el comando mv

Por supuesto, debe asegurarse de que el nombre que cambie sea el nombre de la imagen que no se ha extraído, es decir, un nombre nuevo.

mv f12 F12

En este momento, ingresamos F12 para extraer la imagen, también usando

docker-compose up -d

Método 2: eliminar todas las redes no utilizadas. Las redes no utilizadas son redes a las que ningún contenedor hace referencia.

docker network prune

Debido a que eliminamos el contenedor original de esta red, pero su red aún existe, pero el contenedor no hace referencia a ella, por lo que primero debe borrarse y luego la extracción de imágenes se puede usar para extraer el contenido de su archivo modificado.

Se recomienda utilizar el método 2, pero también puede utilizar el método de cambio de nombre y esperar a que las redes no utilizadas se acumulen durante un período de tiempo antes de borrarlas.

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

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

El artículo termina aquí. Espero que obtengas algo al leerlo. Espero tu atención y apoyo◉ ‿ ◉

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

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

Supongo que te gusta

Origin blog.csdn.net/Myon5/article/details/134540207
Recomendado
Clasificación