# Puerto 5000: Docker

**Docker** es una plataforma de contenedorización que permite a los desarrolladores empaquetar aplicaciones y sus dependencias en contenedores ligeros y portátiles. Docker se utiliza ampliamente para desarrollar, desplegar y ejecutar aplicaciones en cualquier entorno. El puerto 5000 se utiliza comúnmente por el registro de Docker para alojar un registro privado donde se almacenan y distribuyen imágenes de Docker.

## <mark style="color:green;">Descripción de Docker y el Puerto 5000</mark>

* <mark style="color:green;">**Docker**</mark><mark style="color:green;">:</mark> Docker es una tecnología de contenedorización que permite a los desarrolladores crear, desplegar y ejecutar aplicaciones dentro de contenedores. Estos contenedores son independientes del sistema operativo y pueden ejecutarse en cualquier entorno que soporte Docker.
* <mark style="color:green;">**Registro de Docker**</mark><mark style="color:green;">:</mark> Un registro de Docker es un servicio donde se almacenan las imágenes de Docker. Docker Hub es el registro público más conocido, pero las organizaciones pueden configurar registros privados para alojar sus propias imágenes.
* <mark style="color:green;">**Puerto 5000**</mark><mark style="color:green;">:</mark> El puerto 5000 es el puerto predeterminado para el registro privado de Docker. Este puerto se utiliza para interactuar con el registro, incluyendo la subida y descarga de imágenes.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia del Puerto 5000 en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Exposición de Imágenes**</mark><mark style="color:green;">:</mark> Un registro de Docker mal configurado puede permitir el acceso no autorizado a imágenes almacenadas, exponiendo datos sensibles y configuraciones.
* <mark style="color:green;">**Vulnerabilidades en el Registro**</mark><mark style="color:green;">:</mark> Las vulnerabilidades en el software del registro de Docker pueden ser explotadas para obtener acceso no autorizado, ejecutar código remoto, o realizar ataques de denegación de servicio.
* <mark style="color:green;">**Enumeración de Imágenes**</mark><mark style="color:green;">:</mark> Los pentesters pueden enumerar las imágenes disponibles en el registro para identificar aplicaciones y servicios en uso dentro de la organización.

### <mark style="color:green;">Ejemplo de Escaneo de Docker con Nmap</mark>

Para identificar servidores Docker Registry activos y recopilar información adicional sobre el servicio en el puerto 5000, se puede utilizar Nmap con scripts NSE específicos.

**Comando Nmap**

```bash
nmap -p 5000 --script http-title,http-server-header,http-docker-registry-ls target-ip
```

**Explicación del Comando**

* `nmap`: Ejecuta el comando Nmap.
* `-p 5000`: Especifica que Nmap debe escanear el puerto 5000, el puerto predeterminado para el registro de Docker.
* `--script http-title,http-server-header,http-docker-registry-ls`: Utiliza scripts NSE para detectar configuraciones y vulnerabilidades en el servicio Docker Registry.
  * `http-title`: Recupera el título de la página HTTP.
  * `http-server-header`: Muestra la cabecera del servidor HTTP.
  * `http-docker-registry-ls`: Enumera las imágenes disponibles en el registro Docker.
* `target-ip`: Especifica la dirección IP del objetivo.

## <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 23:00 UTC
Nmap scan report for 192.168.1.250
Host is up (0.0021s latency).

PORT     STATE SERVICE
5000/tcp open  http
| http-title: Docker Registry
|_Requested resource was /
| http-server-header: 
|   Server: Docker-registry/2.7.1
|   Date: Sat, 18 May 2024 23:00:00 GMT
|_  Content-Type: text/html; charset=utf-8
| http-docker-registry-ls: 
|   Repositories:
|     - example-app
|     - test-service
|     - my-private-image
|     - nginx
|     - postgres
|_    - redis

Nmap done: 1 IP address (1 host up) scanned in 7.45 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**5000/tcp open http**</mark><mark style="color:green;">:</mark> El puerto 5000 está abierto y el servicio HTTP está activo.
* <mark style="color:green;">**http-title**</mark><mark style="color:green;">:</mark> Recupera el título de la página HTTP del registro Docker (`Docker Registry`).
* <mark style="color:green;">**http-server-header**</mark><mark style="color:green;">:</mark> Muestra la cabecera del servidor HTTP.
  * <mark style="color:green;">**Server**</mark><mark style="color:green;">: I</mark>ndica el tipo y versión del servidor (`Docker-registry/2.7.1`).
  * <mark style="color:green;">**Date**</mark><mark style="color:green;">:</mark> Fecha y hora de la respuesta.
  * <mark style="color:green;">**Content-Type**</mark><mark style="color:green;">:</mark> Tipo de contenido devuelto por el servidor (`text/html; charset=utf-8`).
* <mark style="color:green;">**http-docker-registry-ls**</mark><mark style="color:green;">:</mark> Enumera las imágenes disponibles en el registro Docker.
  * <mark style="color:green;">**Repositories**</mark><mark style="color:green;">:</mark> Lista de repositorios de imágenes disponibles en el registro (`example-app`, `test-service`, `my-private-image`, `nginx`, `postgres`, `redis`).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-5000-docker.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
