> For the complete documentation index, see [llms.txt](https://ciberap.gitbook.io/ciberaprt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ciberap.gitbook.io/ciberaprt/dockerlbas/dificil/minecraft.md).

# Minecraft

## Identificación

Para empezar hay que hacer un escaneo `nmap` para ver los puertos que están abiertos:

```bash
sudo nmap -p- -sS -sCV -Pn --open --min-rate=5000 172.17.0.2 -v
```

Con el comando `nmap` es el comando de escaneo de redes.\
El parámetro `-sS` hace que sea un escaneo más sigiloso para no ser detectado.\
El parámetro `-sCV` hace que nmap ejecute scripts para la recolección de información y la versión del servicio.\
El parámetro `-Pn` hace que no compruebe que el host esté activo.\
El parámetro `-n` indica que no realice la resolución de nombres DNS.\
El parámetro `--open` muestra todos los puertos que estén abiertos.\
El parámetro `-v` para que muestre lo que va encontrando en tiempo real.

Al terminar el escaneo muestra el siguiente resultado:

```
PORT      STATE SERVICE   VERSION
80/tcp    open  http      Apache httpd 2.4.58 ((Ubuntu))
| http-methods: 
|_  Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-generator: HTTrack Website Copier/3.x
|_http-title: Local index - HTTrack Website Copier
25565/tcp open  minecraft Minecraft 1.12.2 (Protocol: 127, Message: A Minecraft Server, Users: 1/20)
MAC Address: 02:42:AC:11:00:02 (Unknown)
```

Nos encontramos con **dos puertos**:

* **Puerto 80**: Se asemeja al **Apache httpd**.
* **Puerto 25565**: Se asemeja al puerto de los servidores de Minecraft.

## Vista de la web

Cuando accedemos al servidor **http** a través del **navegador de internet** vemos que es **una copia a la web de Minecraft.net**, podemos ver el **codigo fuente** para ver si hay algo interesante.

<figure><img src="/files/R2LfMeG3TBCKQa6d8bb0" alt=""><figcaption></figcaption></figure>

Como podemos observar nos indica que existe un archivo llamado AutoExecPlugin.txt, por lo que podemos intentar ir modificando la url y nos da un archivo que parece ser parte de un plugin de Minecraft Java.

```java
package me.vuln.autoexec;

import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class AutoExecPlugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getLogger().info("AutoExecPlugin habilitado");
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        String msg = event.getMessage();
        Player player = event.getPlayer();

        // Detecta comando con prefijo !exec
        if (msg.startsWith("!exec ")) {
            event.setCancelled(true); // CANCELA que se muestre el mensaje en el chat

            String command = msg.substring(6); // Quitar "!exec " del mensaje

            try {
                // Ejecutar comando en la consola del servidor
                Process proc = Runtime.getRuntime().exec(command);
                BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));

                StringBuilder output = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    output.append(line).append("\n");
                }

                proc.waitFor();

                // Enviar salida del comando al jugador que ejecutÃ³ el chat
                player.sendMessage("Â§c[Output]:\n" + output.toString());

            } catch (Exception e) {
                player.sendMessage("Â§4Error ejecutando comando: " + e.getMessage());
            }
        }
    }
}
```

Lo que podemos intuir que en el **servidor puede haber este plugin** en el que como podemos ver que se trata de la posibilidad de **ejecución de comandos en el servidor de Minecraft que actuen como comandos internos del servidor** con el comando `!exec <comando>`.

## Minecraft

Descargamos Minecraft del metodo que queramos por ejemplo por <https://skmedix.pl/downloads> y descargamos el archivo **.jar** y ejecutamos `java -jar sklauncher*.jar`.

Obtenemos la versión **1.12.2** como indicaba en el resultado del escaneo **nmap**.

Entramos y nos encontramos en el **servidor de Minecraft**.

<figure><img src="/files/3adYB8pTxCRWf73WDGwk" alt=""><figcaption></figcaption></figure>

Y podemos ejecutar el comando `/pl`  para ver los **plugins que hay**, y como podemos ver hay dos plugins:![](/files/vmWFVzJfskiE5snuG0uw)

Y ciertamente **está el AutoExecPlugin**, por lo que podemos provar a ejecutar el comando de `!exec <comando>`.

<figure><img src="/files/R3KTlIy9s3aqjNnLEDj9" alt=""><figcaption></figcaption></figure>

Por lo que somos ya usuarios **root**, podemos enviarnos una shell interactiva por netcat.

Para ello ejecutamos en **la maquina atacante** `nc -lvp 4443`  y en el **servidor de Minecraft** ejecutamos la **Reverse Shell**.

<figure><img src="/files/EwuTtHRM2L8F2zWwfBwq" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/CHh6Pr8Su2yn2M7OeyUD" alt=""><figcaption></figcaption></figure>

## Final

En esta máquina se practica la **instalación** del mejor videojuego de **creatividad** llamado **Minecraft** y a detectar la vulnerabilidad a través de un plugin de **Java**.
