JOY - VulnHub

“JOY” es una máquina vulnerable disponible en VulnHub que presenta una vulnerabilidad de fuga de información en el servidor FTP. Esta vulnerabilidad nos permite utilizar el protocolo TFTP para acceder al contenido de archivos, lo que, a su vez, nos brinda la oportunidad de identificar las versiones del software involucrado. Es importante destacar que la versión ProFTPD 1.3.5 se encuentra vulnerable a una técnica de subida de archivos que aprovecharemos para cargar una webshell. Posteriormente, la escalación de privilegios se basa en la exposición de una contraseña y una configuración incorrecta de los scripts de bash.

Enumeración

Empezamos con un reconocimiento de puertos y servicios a través de la herramienta nmap. En el cual logramos detectar varios servicios.

# Nmap 7.93 scan initiated Mon Oct 16 16:30:15 2023 as: nmap -sCV -p21,22,25,80,110,139,143,445,465,587,993,995 -oN scanvuln.nmap 192.168.56.9
Nmap scan report for 192.168.56.9
Host is up (0.00028s latency).

PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         ProFTPD 1.2.10
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| drwxrwxr-x   2 ftp      ftp          4096 Jan  6  2019 download
|_drwxrwxr-x   2 ftp      ftp          4096 Jan 10  2019 upload
22/tcp  open  ssh         Dropbear sshd 0.34 (protocol 2.0)
25/tcp  open  smtp        Postfix smtpd
| ssl-cert: Subject: commonName=JOY
| Subject Alternative Name: DNS:JOY
| Not valid before: 2018-12-23T14:29:24
|_Not valid after:  2028-12-20T14:29:24
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: JOY.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8
80/tcp  open  http        Apache httpd 2.4.25
| http-ls: Volume /
| SIZE  TIME              FILENAME
| -     2016-07-19 20:03  ossec/
|_
|_http-title: Index of /
|_http-server-header: Apache/2.4.25 (Debian)
110/tcp open  pop3        Dovecot pop3d
|_pop3-capabilities: PIPELINING UIDL RESP-CODES STLS CAPA AUTH-RESP-CODE SASL TOP
|_ssl-date: TLS randomness does not represent time
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp open  imap        Dovecot imapd
|_imap-capabilities: IDLE ENABLE more LOGINDISABLEDA0001 LOGIN-REFERRALS STARTTLS listed SASL-IR capabilities ID IMAP4rev1 post-login OK LITERAL+ Pre-login have
|_ssl-date: TLS randomness does not represent time
445/tcp open  netbios-ssn Samba smbd 4.5.12-Debian (workgroup: WORKGROUP)
465/tcp open  smtp        Postfix smtpd
|_smtp-commands: JOY.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=JOY
| Subject Alternative Name: DNS:JOY
| Not valid before: 2018-12-23T14:29:24
|_Not valid after:  2028-12-20T14:29:24
587/tcp open  smtp        Postfix smtpd
|_smtp-commands: JOY.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=JOY
| Subject Alternative Name: DNS:JOY
| Not valid before: 2018-12-23T14:29:24
|_Not valid after:  2028-12-20T14:29:24
993/tcp open  ssl/imaps?
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=JOY/organizationName=Good Tech Pte. Ltd/stateOrProvinceName=Singapore/countryName=SG
| Not valid before: 2019-01-27T17:23:23
|_Not valid after:  2032-10-05T17:23:23
995/tcp open  ssl/pop3s?
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=JOY/organizationName=Good Tech Pte. Ltd/stateOrProvinceName=Singapore/countryName=SG
| Not valid before: 2019-01-27T17:23:23
|_Not valid after:  2032-10-05T17:23:23
MAC Address: 08:00:27:82:1D:79 (Oracle VirtualBox virtual NIC)
Service Info: Hosts: The,  JOY.localdomain, 127.0.1.1, JOY; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_nbstat: NetBIOS name: JOY, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2023-10-16T16:30:26
|_  start_date: N/A
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.5.12-Debian)
|   Computer name: joy
|   NetBIOS computer name: JOY\x00
|   Domain name: \x00
|   FQDN: joy
|_  System time: 2023-10-17T00:30:26+08:00
|_clock-skew: mean: -5h40m01s, deviation: 4h37m07s, median: -3h00m02s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Oct 16 16:30:58 2023 -- 1 IP address (1 host up) scanned in 43.26 seconds

¿Por dónde empezar?

General mente cuando hay una gran cantidad de puertos, comienzo primero por los servicios que no tienen un servidor web. Acá primero comienzo por(ftp,smbmap) y luego por los servidores web.

FTP

En este servicio, hemos descubierto información que resultará útil más adelante.

Dentro del archivo “directory”, observamos una salida que parece ser el resultado de un comando “ls -la”

➜  ftp cat directory    
Patrick's Directory

total 108
drwxr-xr-x 18 patrick patrick 4096 Oct 17 00:30 .
drwxr-xr-x  4 root    root    4096 Jan  6  2019 ..
-rw-r--r--  1 patrick patrick    0 Oct 17 00:30 1gNbzYGjQJGBGRUOGnWVIXNgLVanG5l7.txt
-rw-------  1 patrick patrick  185 Jan 28  2019 .bash_history
-rw-r--r--  1 patrick patrick  220 Dec 23  2018 .bash_logout
-rw-r--r--  1 patrick patrick 3526 Dec 23  2018 .bashrc
drwx------  7 patrick patrick 4096 Jan 10  2019 .cache
drwx------ 10 patrick patrick 4096 Dec 26  2018 .config
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Desktop
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Documents
drwxr-xr-x  3 patrick patrick 4096 Jan  6  2019 Downloads
drwx------  3 patrick patrick 4096 Dec 26  2018 .gnupg
-rwxrwxrwx  1 patrick patrick    0 Jan  9  2019 haha
-rw-------  1 patrick patrick 8532 Jan 28  2019 .ICEauthority
drwxr-xr-x  3 patrick patrick 4096 Dec 26  2018 .local
drwx------  5 patrick patrick 4096 Dec 28  2018 .mozilla
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Music
drwxr-xr-x  2 patrick patrick 4096 Jan  8  2019 .nano
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Pictures
-rw-r--r--  1 patrick patrick  675 Dec 23  2018 .profile
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Public
-rw-r--r--  1 patrick patrick   24 Oct 17 00:30 rTZ5tbESiyVd2iILaE44R1rGwvNIhqxwg1mZliv0uqJGeRopXMtFrvdWXu7nYZEz.txt
d---------  2 root    root    4096 Jan  9  2019 script
drwx------  2 patrick patrick 4096 Dec 26  2018 .ssh
-rw-r--r--  1 patrick patrick    0 Jan  6  2019 Sun
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Templates
-rw-r--r--  1 patrick patrick    0 Jan  6  2019 .txt
-rw-r--r--  1 patrick patrick  407 Jan 27  2019 version_control
drwxr-xr-x  2 patrick patrick 4096 Dec 26  2018 Videos

You should know where the directory can be accessed.

Information of this Machine!

Linux JOY 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux

SMB(SAMBA)

En este servicio, no tenemos acceso a ninguna carpeta compartida, lo que significa que nuestras opciones para realizar acciones adicionales están limitadas.

HTTP(Servidor Web)

En este servicio, solo disponemos de un directorio que no contiene información valiosa.

Escaneo UDP

Dado que no hemos logrado progresar a través de los servicios y puertos identificados en el protocolo TCP, consideremos ahora la posibilidad de realizar un análisis a través del protocolo UDP.

# Nmap 7.93 scan initiated Wed Oct 18 08:16:28 2023 as: nmap -sU --top-port 600 --open -v -n -Pn -T5 -oN udp-scan.nmap 192.168.56.9
Warning: 192.168.56.9 giving up on port because retransmission cap hit (2).
Nmap scan report for 192.168.56.9
Host is up (0.0033s latency).
Not shown: 582 open|filtered udp ports (no-response), 15 closed udp ports (port-unreach)
PORT    STATE SERVICE
123/udp open  ntp
137/udp open  netbios-ns
161/udp open  snmp
MAC Address: 08:00:27:82:1D:79 (Oracle VirtualBox virtual NIC)

Read data files from: /usr/bin/../share/nmap
# Nmap done at Wed Oct 18 08:16:38 2023 -- 1 IP address (1 host up) scanned in 9.84 seconds

Hemos encontrado algo de interés en el puerto SNMP, por lo tanto, procedemos a investigarlo. La información relevante se ha guardado en el archivo “snmp.txt”.

snmpbulkwalk -c public -v2c 192.168.56.9 > snmp.txt

Hemos logrado identificar una pista sumamente interesante que arroja luz sobre el contenido del archivo “directory”.

Hemos realizado una verificación para determinar si el puerto está abierto.

Starting Nmap 7.93 ( https://nmap.org ) at 2023-10-18 08:24 -03
Nmap scan report for 192.168.56.9
Host is up (0.00029s latency).

PORT      STATE         SERVICE
36969/udp open|filtered unknown
MAC Address: 08:00:27:82:1D:79 (Oracle VirtualBox virtual NIC)

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

¿Qué es el servició TFTP?

Hacktricks nos dice que : TFTP utiliza el puerto UDP 69 y no requiere autenticación - los clientes leen y escriben en los servidores utilizando el formato de datagrama descrito en RFC 1350. Debido a las deficiencias del protocolo (es decir, la falta de autenticación y la falta de seguridad en el transporte), es poco común encontrar servidores en Internet público. Sin embargo, en grandes redes internas, TFTP se utiliza para servir archivos de configuración e imágenes ROM a teléfonos VoIP y otros dispositivos. Pero en este caso vimmos que camban el puerto a 36969. Ahora procedemos a conectarnos.

Ahora, vamos a considerar cómo podemos aprovechar esta información. Previamente, nos proporcionaron la lista de archivos en el directorio /home/patrick, por lo tanto, podemos utilizar tftp para listar su contenido de la siguiente manera.

ftp> ?
Commands may be abbreviated.  Commands are:

connect 	connect to remote tftp
mode    	set file transfer mode
put     	send file
get     	receive file
quit    	exit tftp
verbose 	toggle verbose mode
trace   	toggle packet tracing
status  	show current status
binary  	set mode to octet
ascii   	set mode to netascii
rexmt   	set per-packet retransmission timeout
timeout 	set total retransmission timeout
?       	print help information
tftp> get .bashrc
Received 3639 bytes in 0.0 seconds

Hemos descargado el archivo “.bashrc” que aparece en la salida del archivo “directory”.

Una vez confirmado que tenemos la capacidad de descargar archivos, procedemos a obtener un archivo llamado “version_control”.

Hemos realizado una búsqueda minuciosa de las versiones y hemos identificado que el servicio ProFTPd es vulnerable a una subida de archivos. Aprovecharemos esta vulnerabilidad para cargar una webshell. La ubicación de los archivos web está detallada en el archivo “version_control”.

Si analizamos lo que realiza el exploit para llevar a cabo esta tarea de manera manual, el proceso se desglosa de la siguiente manera:

Si analizamos el tráfico con Wireshark, observaremos la siguiente información:

Al parecer, el proceso no inicia una sesión, sino que únicamente ejecuta comandos.

Logramos visualizar el archivo subido.

Escalación de privilegios

Al acceder a la máquina comprometida, hemos encontrado el directorio “ossec” y un archivo que proporciona credenciales.

Inicio de sessión

www-data@JOY:/var/www/tryingharderisjoy/ossec$ cat patricksecretsofjoy 
credentials for JOY:
patrick:apollo098765
root:howtheheckdoiknowwhattherootpasswordis

how would these hack3rs ever find such a page?

Hemos observado que tenemos la capacidad de ejecutar el script “test” como usuario root.

patrick@JOY:/root$ sudo -l
Matching Defaults entries for patrick on JOY:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User patrick may run the following commands on JOY:
    (ALL) NOPASSWD: /home/patrick/script/test

El script parece requerir que elijamos un archivo y luego le otorguemos permisos, lo que plantea una seria preocupación en términos de seguridad, ya que esto podría abrir numerosas vulnerabilidades que podrían utilizarse para escalar privilegios.

En consecuencia, hemos llevado a cabo la asignación del permiso Set-UID (SUID) al ejecutable “/bin/bash”, lo que ha posibilitado la obtención de acceso con privilegios de root.