kenobi - Try Hack Me

Kenobi maquina catalogada de dificultad “Easy”basada en samba, manipulación de la variable PATH, Suid y Smb vamos a resolverla, esta maquina es muy interesante ya que tenemos que combinar varias técnicas e ir combinandolas hasta llegar a la flag final.

1-Escaneo Nmap

Iniciamos la maquina y hacemos un escaneo con Nmap básico: nmap -sC -sV 10.10.36.172 - o EscaneoNmap

Utilizaremos los parametros -sC (Utilizar los scripts más comunes) -sV (Mostrar versiones) -o (Guardar archivo)

Nmap nos devuelve todo esto:

 nmap -sC -sV 10.10.36.172 -o EscaneoNmap
Starting Nmap 7.92 ( https://nmap.org ) at 2021-11-20 23:55 CET
Nmap scan report for 10.10.36.172 (10.10.36.172)
Host is up (0.041s latency).
Not shown: 993 closed tcp ports (conn-refused)
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-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry 
|_/admin.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      40217/tcp   mountd
|   100005  1,2,3      42324/udp6  mountd
|   100005  1,2,3      42429/udp   mountd
|   100005  1,2,3      55883/tcp6  mountd
|   100021  1,3,4      33199/tcp   nlockmgr
|   100021  1,3,4      35438/udp   nlockmgr
|   100021  1,3,4      38773/tcp6  nlockmgr
|   100021  1,3,4      39277/udp6  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: 2h00m01s, deviation: 3h27m51s, median: 0s
|_nbstat: NetBIOS name: KENOBI, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode: 
|   3.1.1: 
|_    Message signing enabled but not required
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-time: 
|   date: 2021-11-20T22:55:18
|_  start_date: N/A
| 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-11-20T16:55:18-06:00

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

Vemos que nos devuelve bastantes puertos abiertos. Algunos insteresantes son 21 (FTP) 22 (SSH) 445 (Samba)

En el servidor web nos indica que es una trampa, por lo cual no hay nada interesante por ningun lado.

2-Enumeración samba

Vamos a utilizar la herramienta “smb” que se encarga de enumerar samba. Es una herramienta diseñada por la comunidad Cybex (Enlace: https://cybexsec.es/smb.txt)

Lo que podríamos destacar de aquí es el nombre del host llamado: anonymous y su variable PATH C:\home\kenobi\share

Vamos a conectarnos con el usuario anonymous sin indicar la contraseña: smbclient //10.10.36.172/anonymous -N , y vamos a listar contenido.

Vemos que tenemos un archivo llamado “log.txt” , vamos a traernoslo a nuestro equipo con el comando “get” y vamos a echarle un ojo.

También podríamos descargar todo el contenido con: smbget -R smb://10.10.36.172/anonymous

Ahora sabemos la ruta de la clave id_rsa pero no sabemos el punto de montaje del servidor para traernos el archivo, para ello vamos a enumerar el puerto 111 para saber el punto de montaje, ¿Por que escanear rpcbind? Este es un servidor que junta todos los procesos RPC (Remote Procedure Call) en una única dirección. Funciona de la siguiente manera, cuando un proceso RPC se ejecuta le dice al servidor rpcbind el programa que que esta llevando acabo y el número del mismo, para nuestro caso el puerto 111 es el acceso a un sistema de archivos de red.

Utilizaremos: nmap -p 111 –script=nfs-ls,nfs-statfs,nfs-showmount 10.10.36.172

También podemos utilizar: showmount -e

3-Servidor FTP

Sabemos que la versión del servidor FTP es: ProFTPD 1.3.5 , utilizarmos “searchsploit” para buscar alguna vulnerabilidad

Vamos a descargar con el comando “searchsploit -m” los archivos que queramos

Echaremos un ojo al archivo .py y al .txt

Vemos que el archivo python es una ejecución de código .php para indicar el comando que queramos (Esto no sirviria de nada ya que como hemos visto antes en la página web no hay nada interesante), en el archivo .txt muestra algo interesante, Unos comandos para Copiar y Pegar (CPFR y CPTO) archivos dentro del propio servidor FTP. Con esta vulnerabilidad podriamos intentar copiar la clave id_rsa a un sitio donde tengamos acceso para poder descargarlos.

Vamos a ello, vamos a intentar conectarnos al servidor FTP mediante netcat con el comando: nc 10.10.36.172 21

Copiariamos el archivo id_rsa a un sitio donde si podramos tener acceso, aunque aún no lo hayamos logrado, en el directorio /var/tmp (/var sería el punto de montaje y /tmp tendriamos permisos de escritura de forma generica) y le ponemos el nombre “id_rsa” quedaría: /var/tmp/id_rsa

¿Entonces ahora como accederiamos a ese archivo? , vamos a crear un punto de montaje local para intentar acceder al mismo, utilizariamos los siguientes comandos:

sudo mkdir idrsakenobi —————————————————-> Creamos una carpeta donde queramos montar el directorio /var sudo mount 10.10.36.172:/var /home/rincon/thm/kenobi/idrsakenobi ———-> Montariamos el directio /var de la dirección IP de la maquina a nuestra carpeta personal

Lo cual esto nos permite tener acceso a todo el directorio /var en nuestra carpeta, vamos a listar el contenido haber si a funcionado correctamente.

Bien, ahora vamos a traernos la clave id_rsa a nuestro equipo.

Vamos a asignarle los permisos 600 para que esta clave se pueda utilizar y vamos a conectar con el usuario “kenobi” a la maquina ssh, vemos que tenemos acceso asi que vamos a listar el contenido y ver el archivo user.txt

4-Escalación de privilegios

Ahora vamos a escalar privilegios abusando de los permisos SUID, es una manera de ejecutar binarios que deberian estar restringidos solo por el usuario root.

Para abusar de estos permisos, para buscar que comandos podemos utilizar como SUID utilizariamos:

find / -perm -u=s -type f 2>/dev/null find / -type f -a ( -perm -u+s -o -perm -g+s ) -exec ls -l {} \; 2> /dev/null

Una vez ejecutado algunos de estos comandos, vamos a mirar si encontramos algo inusual, me refiero a algo que no este por defecto en un sistema linux, o algo que no deberiamos de poder ejecutar.

Encontramos el archivo /etc/passwd , que nos muestra los usuarios del equipo, además de otras muchas cosas. Aunque no logramos encontrar nada interesante.

Encontramos el archivo /usr/bin/menu , esto no es común en linux, asi que vamos a ejecutarlo y a saber que hace, vemos que es un menu simple que nos muestra varias opciones, vamos a ver como esta escrito. Podemos utilizar el comando “cat /usr/bin/menu” para ver el contenido o ejecutar el comando “strings /usr/bin/menu” que nos lo mostraría de una manera mas legible.

Vemos que el menu es bastante simple, solo ejecuta un comando “ifconfig o uname -r”. Lo interesante de esto es que este menu se ejecuta con permisos de superusuario , es decir si somos capaces de engañar al sistema y que en vez de llamar a ifconfig, llamamos a /bin/sh estariamos ejecutando una shell como root.

Lo bueno es que este programa no utiliza la ruta completa, por lo cual mediante el abuso de las variables de entorno PATH , podriamos ejecutar antes los comandos que indiquemos. Esto funciona por que cuando se llama a un binario solo por su nombre en vez de por su ruta completa, el sistema va a mirar en la variable $PATH para encontralo, si somos capaces de anteponernos antes de que encuentre la ruta original, seremos capaces de ejecutar lo que queramos.

Nos pondríamos en un directorio donde tengamos permisos de escritura (En nuestro caso /tmp) y definiarmos un binario malicioso , le dariamos permisos y definiriamos una nueva variable PATH

Una vez obtenida la shell como root solo nos quedaría encontrar las flags