Inject es una máquina Linux de dificultad fácil que presenta un sitio web con una funcionalidad de carga de archivos vulnerable a la inclusión de archivos locales (LFI). Al explotar la vulnerabilidad LFI, se pueden enumerar los archivos del sistema, lo que revela que la aplicación web usa una versión específica del módulo Spring-Cloud-Function-Web susceptible a CVE-2022-22963. La explotación de esta vulnerabilidad otorga un punto de apoyo inicial como usuario frank. El movimiento lateral se logra mediante una enumeración adicional de archivos, que revela una contraseña de texto sin formato para phil. Luego, se puede explotar un cronjob que se ejecuta en la máquina para ejecutar un playbook Ansible malicioso, obteniendo finalmente un shell inverso como usuario root.
Reconocimiento
Iniciamos con el reconocimiento de las puertos abiertos y servicios que se tiene
❯ nmap -p- --open --min-rate 5000 -Pn -n -vvv 10.10.11.204 -oG allportsScan
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack
8080/tcp open http-proxy syn-ack
-p-: Escanea todos los puertos (del 1 al 65535).
--open: Muestra solo los puertos que están abiertos.
--min-rate 5000: Establece una tasa mínima de envío de paquetes de 5000 paquetes por segundo, acelerando el escaneo.
-Pn: Omite la fase de descubrimiento de host, asumiendo que el host está activo (útil si los pings están bloqueados).
-n: No realiza resolución de nombres DNS, utilizando solo direcciones IP.
-vvv: Proporciona una salida muy detallada y verbosa.
10.10.11.204: La dirección IP del objetivo.
-oG allportsScan: Guarda los resultados del escaneo en un archivo en formato "grepable" llamado allportsScan.
Luego de tener los puertos abiertos procedemos a enumerar los servicios de estos
❯ nmap -p22,8080 -sC -sV -vvv -Pn -oN servicesScan 10.10.11.204
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 ca:f1:0c:51:5a:59:62:77:f0:a8:0c:5c:7c:8d:da:f8 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKZNtFBY2xMX8oDH/EtIMngGHpVX5fyuJLp9ig7NIC9XooaPtK60FoxOLcRr4iccW/9L2GWpp6kT777UzcKtYoijOCtctNClc6tG1hvohEAyXeNunG7GN+Lftc8eb4C6DooZY7oSeO++PgK5oRi3/tg+FSFSi6UZCsjci1NRj/0ywqzl/ytMzq5YoGfzRzIN3HYdFF8RHoW8qs8vcPsEMsbdsy1aGRbslKA2l1qmejyU9cukyGkFjYZsyVj1hEPn9V/uVafdgzNOvopQlg/yozTzN+LZ2rJO7/CCK3cjchnnPZZfeck85k5sw1G5uVGq38qcusfIfCnZlsn2FZzP2BXo5VEoO2IIRudCgJWTzb8urJ6JAWc1h0r6cUlxGdOvSSQQO6Yz1MhN9omUD9r4A5ag4cbI09c1KOnjzIM8hAWlwUDOKlaohgPtSbnZoGuyyHV/oyZu+/1w4HJWJy6urA43u1PFTonOyMkzJZihWNnkHhqrjeVsHTywFPUmTODb8=
| 256 d5:1c:81:c9:7b:07:6b:1c:c1:b4:29:25:4b:52:21:9f (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIUJSpBOORoHb6HHQkePUztvh85c2F5k5zMDp+hjFhD8VRC2uKJni1FLYkxVPc/yY3Km7Sg1GzTyoGUxvy+EIsg=
| 256 db:1d:8c:eb:94:72:b0:d3:ed:44:b9:6c:93:a7:f9:1d (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICZzUvDL0INOklR7AH+iFw+uX+nkJtcw7V+1AsMO9P7p
8080/tcp open nagios-nsca syn-ack Nagios NSCA
|_http-title: Home
| http-methods:
|_ Supported Methods: GET HEAD OPTIONS
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
-p22,8080: Escanea específicamente los puertos 22 (SSH) y 8080 (HTTP alternativo).
-sC: Utiliza scripts NSE (Nmap Scripting Engine) por defecto para realizar detección de versiones, detección de servicios y algunas comprobaciones comunes de seguridad.
-sV: Intenta detectar versiones de los servicios que están ejecutándose en los puertos abiertos.
-vvv: Proporciona una salida muy detallada y verbosa.
-Pn: Omite la fase de descubrimiento de host, asumiendo que el host está activo (útil si los pings están bloqueados).
-oN servicesScan: Guarda los resultados del escaneo en un archivo llamado servicesScan en formato normal.
Sitio web
En el sitio web encontramos el siguiente contenido
Tenemos un apartado para subir archivos
Al cargar una imagen podemos subir un archivo de tipo img y luego poder visualizar dicha imagen
Explotación
LFI
Enumerando podemos encontrar que se tiene una vulnerabilidad de lfi y podemos leer el /etc/passwd
Además, podemos observar que se tiene directory listing.
En el directorio /home/frank encontramos los siguientes archivos:
Buscando un poco mas en la web encontramos una vulnerabilidad relacionada con springframework
Usamos el exploit y podemos obtener una shell como el usuario frank
Anteriormente encontramos unas credenciales en pom.xml que nos sirve para hacer movimiento lateral al usuario phil
phil : DocPhillovestoInject123
Shell - phil
Enumerando los procesos podemos encontrar que se ejecuta /usr/bin/python3 /usr/local/bin/ansible-parallel /opt/automation/tasks/playbook_1.yml cada cierto tiempo
Además, nosotros pertenecemos al grupo de staff
Shell - root
Revisamos el archivo playbook_1.yml y tenemos lo siguiente:
/opt/automation/tasks/playbook_1.yml
- hosts: localhost
tasks:
- name: Checking webapp service
ansible.builtin.systemd:
name: webapp
enabled: yes
state: started
Para informarnos de como funciona y crear una tarea maliciosa.
Luego podemos agregar nuestra tarea maliciosa que ejecutara un script en bash shell.sh