# Escaneo
En primer lugar se realiza un reconocimiento de la máquina objetivo, determinando ası́ que se trata de una máquina Linux.
A continuación se realiza un primer escaneo con la herramienta _nmap_ para
conocer los puertos abiertos (figura [1](../assets/img/0day/0.png "Puertos abiertos")):
```
nmap -p- --open --min-rate 5000 -sS -n -Pn -oN allPorts
```
- -p-: escaneo de todos los puertos.
- –open: se muestran los puertos abiertos exclusivamente.
- –min-rate: tasa de envı́o de paquetes.
- -sS: Opción por defecto, escaneo rápido.
- -n: no se aplica resolución DNS.
- -Pn: se evita el descubrimiento de hosts.

Los puertos abiertos se corresponden al servicio _ssh_ y _http_. El siguiente paso
será conocer las versiones de cada uno de los servicios, obteniendo los resultados visibles en la figura [2](../assets/img/0day/0_1.png "Versiones de los servicios"):
```
nmap -p22,80 -sCV -oN versionPorts
```

Observando la figura [2](../assets/img/0day/0_1.png "Versiones de los servicios") se obtienen dos conclusiones. En primer lugar, el servicio _ssh_ utiliza una versión desactualizada del mismo, actualmente se encuentra
en la versión 9.4. Esta versión es vulnerable a una enumeración de usuarios. Por
otro lado, el servicio _http_ es un Apache httpd en su versión 2.4.7, por lo que
el siguiente paso será el reconocimiento de la página web que se encuentra empleando dicho servicio.
# Servicio HTTP
Cuando se accede al servicio web se muestra al usuario la siguiente pantalla (figura [3](../assets/img/0day/1.png "Página principal")):

A través de la herramienta whatweb o wappalyzer se obtienen las tecnologı́as
con las que se ha construı́do la página web (imagen [4](../assets/img/0day/2.png "Tecnologías")):

De esta ejecución no se consigue información de importancia para la resolución de la máquina, por lo que se realizará la búsqueda de directorios y archivos
activos.
# Reconocimiento
## Fuzzing
En esta sección se detallarán los hallazgos de directorios y archivos relevantes
que faciliten la resolución de la máquina. Se empleará la herramienta _ffuf_ y
diferentes diccionarios disponibles en [SecLists](https://github.com/danielmiessler/SecLists) para el descubrimiento de, en
primer lugar, directorios y, finalmente, de archivos.
En cuanto a directorios, se presentan en la figura [5](../assets/img/0day/5.png "Fuzzing") los resultados obtenidos:
```
ffuf -w -u
```

Los resultados presentan directorios que resultan de gran interés, principalmente el denominado como secret. Al comprobar dicho subdirectorio se nos
presenta un página con una imagen de una tortuga, siendo esta la siguiente (figura [6](../assets/img/0day/3.png "Secret")):

El siguiente directorio que se ha comprobado, es _backup_. Este subdirectorio
nos presenta una clave privada rsa, por lo que será de valor almacenarla por si
en un futuro es de utilidad (figura [7](../assets/img/0day/rsa.png "RSA")).

A continuación, se revisa el subdirectorio _cgi-bin_. Este subdirectorio almacena diferentes scripts de ejecución automatizada, por lo que, sobre este se
realizará fuzzing sobre archivos (figura [8](../assets/img/0day/8.png "Fuzzing cgi-bin")).
```
ffuf -w -u
```

En la figura [8](../assets/img/0day/8.png "Fuzzing cgi-bin") se observan diferentes archivos sobre los que destaca uno en
particular, _test.cgi_. Este archivo puede indicar que el sistema es vulnerable a
[shellshock](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjYmN2L3rmDAxUlUKQEHUYEDgkQFnoECBcQAQ&url=https%3A%2F%2Fowasp.org%2Fwww-pdf-archive%2FShellshock_-_Tudor_Enache.pdf&usg=AOvVaw0uJsnx_9Rjr7fUx9CUYcMG&opi=89978449), vulnerabilidad de bash que permite la ejecución de código remoto. Para comprobar si el sistema es vulnerable a ella, se emplea la herramienta
nmap y el script dedicado a dciha vulnerabilidad:
```
nmap -sV -p- --script http-shellshock --script-args uri=/cgi-bin/test.cgi,cmd=ls
```
La ejecución proporciona la salida presentada en la figura [9](../assets/img/0day/10.png "Shellshock") revela que el
sistema sı́ es vulnerable a este error. Por lo que el siguiente paso será la explotación.

# Explotación
Para realizar la explotación de la vulnerabilidad encontrada se utiliza la
herramienta _Burpsuite_, que nos permitirá modificar las peticiones realizadas al
servidor.
En primer lugar, para la explotación de dicho error se debe enviar a través
de una cabecera:
```
() { :;}
```
Como ya se ha visto que el sistema es vulnerable, el comando a inyectar será
una reverse shell que nos garantizará el acceso al sistema. Para esto, empleamos
la herramienta netcat para ponernos a la escucha en un puerto:
```
nc -nlvp 4444
```
El siguiente paso es interceptar con _Burpsuite_ la petición a _http:///cgi-
bin/test.cgi_ y enviarla al apartado _Repeater_. Una vez hecho esto, se reemplazará
en la cabecera el _User-Agent_ de la siguiente manera (figura [10](../assets/img/0day/12.png "Vulnerable")):

Una vez enviada la petición se obtiene acceso al sistema (figura [11](../assets/img/0day/13.png "Conexión")).

Una vez obtenido acceso al sistema, se realiza una navegación en este, descubriendo ası́ al usuario _ryan_ y a la _flag_ de usuario, como se puede ver en la figura [12](../assets/img/0day/15.png "User Flag").

Una vez obtenida la primera de las flags, se debe realizar la escalada de privilegios. Dicha escalada se verá en la siguiente sección.
# Escalada de privilegios
Lo primeiro que se ha intentado es un inicio de sesión a través del servicio
_ssh_, empleando el usuario _ryan_ y la clave obtenida en el subdirectorio _backup_,
pero sin obtener éxito.
Lo siguiente ha sido la comprobación de posibles ejecuciones de comandos
como administrador, empleando para esto el comando:
```
sudo -l
```
Esta opción tampoco ha tenido éxito ya que se requiere de la contraseña de
www-data. El siguiente paso dado ha sido comprobar la versión del sistema que
se esta empleando (figura [13](../assets/img/0day/16_1.png "Sistema utilizado")). Dicha versión esta obsoleta y una búsqueda de
la misma proporciona un exploit, como se puede ver en la figura [14](../assets/img/0day/16.png "Versión obsoleta").


Una vez obtenido el exploit, se crea un servidor web con python para poder
recuperar el archivo desde la máquina objetivo y su posterior compilación (figura
[15](../assets/img/0day/18.png "Compilación")), previa comprobación de existencia de gcc:
```
python -m http-server
```

Al ejecutar el programa se obtiene acceso como root (figura [16](../assets/img/0day/19.png "Ejecución")) y se consigue
la última flag (figura [17](../assets/img/0day/20.png "Root Flag")).

