Este post forma parte de la serie Tier 1 del Starting Point de HTB que iniciamos aquí.
Crocodile
El primer paso será iniciar la máquina (para lo que previamente tendremos que tener establecida nuestra conexión VPN)
Copiamos la IP del equipo remoto, en mi caso 10.129.58.242, y lanzamos un nmap.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ nmap -A 10.129.58.242 -oN nmap_output
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-09 20:32 CEST
Nmap scan report for 10.129.58.242
Host is up (0.049s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.10.xx.xx
| 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
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 ftp ftp 33 Jun 08 2021 allowed.userlist
|_-rw-r--r-- 1 ftp ftp 62 Apr 20 2021 allowed.userlist.passwd
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Smash - Bootstrap Business Template
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.70 seconds
Significado de las flags:
-A
: escaneo completo (aka agresivo) que ejecuta OS detection, version detection, script scanning y traceroute todo del tirón.-oN
: imprime la salida en un fichero de texto con el nombre nmap_output
OK. La salida nos cuenta que tenemos dos puertos abiertos con servicios escuchando:
- puerto 21/tcp (FTP) con un vsFTPd 3.0.3 detrás y lo más bonito:
1
2
3
4
5
6
[...]
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 ftp ftp 33 Jun 08 2021 allowed.userlist
|_-rw-r--r-- 1 ftp ftp 62 Apr 20 2021 allowed.userlist.passwd
[...]
- puerto 80/tcp (HTTP) con un Apache/2.4.41 (Ubuntu) detrás.
Aprovechamos el ftp-anon y salimos de pesca.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ ftp 10.129.58.242
Connected to 10.129.58.242.
220 (vsFTPd 3.0.3)
Name (10.129.58.242:ewan67): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||49464|)
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 33 Jun 08 2021 allowed.userlist
-rw-r--r-- 1 ftp ftp 62 Apr 20 2021 allowed.userlist.passwd
226 Directory send OK.
ftp> get allowed.userlist
local: allowed.userlist remote: allowed.userlist
229 Entering Extended Passive Mode (|||43256|)
150 Opening BINARY mode data connection for allowed.userlist (33 bytes).
100% |*************************************************************************************************************************| 33 0.42 KiB/s 00:00 ETA
226 Transfer complete.
33 bytes received in 00:00 (0.17 KiB/s)
ftp> get allowed.userlist.passwd
local: allowed.userlist.passwd remote: allowed.userlist.passwd
229 Entering Extended Passive Mode (|||41270|)
150 Opening BINARY mode data connection for allowed.userlist.passwd (62 bytes).
100% |*************************************************************************************************************************| 62 1.66 KiB/s 00:00 ETA
226 Transfer complete.
62 bytes received in 00:00 (0.25 KiB/s)
ftp>
Echamos un ojo a los ficheros que nos hemos descargado.
1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ cat allowed.userlist
aron
pwnmeow
egotisticalsw
admin
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ cat allowed.userlist.passwd
root
Supersecretpassword1
@BaASD&9032123sADS
rKXM59ESxesUFHAd
Una relación de credenciales que podemos expresar así:
1
2
3
4
aron:root
pwnmeow:Supersecretpassword1
egotisticalsw:@BaASD&9032123sADS
admin:rKXM59ESxesUFHAd
El FTP ha dado todo de sí. Abrimos un browser y apuntamos a la IP a ver qué nos cuenta el Apache del puerto 80.
Bonita web. Trasteamos un poco con ella para conocerla mejor. Lanzamos un whatweb para más info.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB]
└─$ whatweb -a 3 -v 10.129.58.242
WhatWeb report for http://10.129.58.242
Status : 200 OK
Title : Smash - Bootstrap Business Template
IP : 10.129.58.242
Country : RESERVED, ZZ
Summary : Apache[2.4.41], Bootstrap[3.3.7], Email[hello@ayroui.com,support@uideck.com], Frame, HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], JQuery[1.12.4], Modernizr[3.7.1.min], Script
Detected Plugins:
[ Apache ]
The Apache HTTP Server Project is an effort to develop and
maintain an open-source HTTP server for modern operating
systems including UNIX and Windows NT. The goal of this
project is to provide a secure, efficient and extensible
server that provides HTTP services in sync with the current
HTTP standards.
Version : 2.4.41 (from HTTP Server Header)
Google Dorks: (3)
Website : http://httpd.apache.org/
[ Bootstrap ]
Bootstrap is an open source toolkit for developing with
HTML, CSS, and JS.
Version : 3.3.7
Version : 3.3.7
Website : https://getbootstrap.com/
[...]
Significado de las flags:
-a
: Set the aggression level. Default: 1. Nosotros le pasamos un 3 (Aggressive).-v
: Verbose output includes plugin descriptions.
Bien. Interesante info (un par de cuentas de correo incluidas) pero poco donde tirar. Pasamos a enumerar directorios a ver qué aparece.
Lo primero, localizar en nuestra máquina una lista adecuada para utilizar de diccionario.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ locate directory-list
/usr/share/dirbuster/wordlists/directory-list-1.0.txt
/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt
/usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt
/usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-small.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt
/usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-small.txt
/usr/share/whatweb/plugins/simple-directory-listing.rb
Nos quedamos con esta:
1
/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
Para estas tareas suelo utilizar feroxbuster (personal y profesionalmente creo que esta herramienta es bestial), pero os dejo los comandos de gobuster y ffuf para los que quieran probar otras alternativas.
Atentos a las tags del box vamos a aprovechar el escaneo para pedirle a nuestras tools que busquen ficheros .php.
Lo prometido sobre gobuster y ffuf.
1
2
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ gobuster dir -u http://10.129.58.242 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -x .php
Significado de las flags:
dir
: Uses directory/file enumeration mode.-u
: The target URL.-w
: Path to the wordlist.-x
: File extension(s) to search for.
1
2
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ ffuf -u http://10.129.58.242/FUZZ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -c -t 100 -e .php -o ffuf_output -of md
Significado de las flags:
-u
: la URL que queremos escanear.-w
: la ubicación del diccionario.-c
: para colorear la salida.-t
: nro de hilos concurrentes (por defecto son 40).-e
: listado de extensiones que queremos rasrear, separadas por comas en caso de ser más de una.-o
: nombre del fichero donde almacenaremos la salida.-of
: formato del fichero de salida, md en nuestro caso.
Vamos con feroxbuster. En aras de la sencillez, el volcado que pego a continuación esta editado para resaltar la información más relevante.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ feroxbuster -u http://10.129.58.242/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -e -t 100 -x php -o feroxbuster_output
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.7.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://10.129.58.242/
🚀 Threads │ 100
📖 Wordlist │ /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.7.0
💉 Config File │ /etc/feroxbuster/ferox-config.toml
🔎 Extract Links │ true
💾 Output File │ feroxbuster_output
💲 Extensions │ [php]
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
🎉 New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
[...]
200 GET 999l 3031w 58565c http://10.129.58.242/index.html
[...]
200 GET 39l 115w 1577c http://10.129.58.242/login.php
302 GET 0l 0w 0c http://10.129.58.242/logout.php => login.php
200 GET 0l 0w 0c http://10.129.58.242/config.php
301 GET 9l 28w 316c http://10.129.58.242/dashboard => http://10.129.58.242/dashboard/
[...]
302 GET 0l 0w 0c http://10.129.58.242/dashboard/index.php => /login.php
[...]
[####################] - 2m 351170/351170 0s found:112 errors:27
[####################] - 2m 175300/175300 1018/s http://10.129.58.242/
[...]
[####################] - 2m 175300/175300 1080/s http://10.129.58.242/dashboard
[...]
Significado de las flags:
-u
: la URL que queremos escanear.-w
: la ubicación de nuestro fichero de wordlist.-e
: le pedimos que extraiga enlaces del cuerpo de la respuesta y realice nuevas peticiones en función de los resultados.-t
: nro de hilos concurrentes.-x
: la extensión de los ficheros que queremos buscar.-o
: nombre del fichero donde almacenaremos la salida.
Resumiendo:
1
2
3
4
200 GET 39l 115w 1577c http://10.129.58.242/login.php
302 GET 0l 0w 0c http://10.129.58.242/logout.php => login.php
301 GET 9l 28w 316c http://10.129.58.242/dashboard => http://10.129.58.242/dashboard/
302 GET 0l 0w 0c http://10.129.58.242/dashboard/index.php => /login.php
Una página login.php colgando del raiz y un directorio dashboard.
Cargamos la URL http://10.129.58.242/login.php en el navegador.
OK. Utilizamos la relación de credenciales que conseguimos a partir del los ficheros del FTP y probamos con cada una. (Spoiler: es la última)
Accedemos al Dashboard y nos muestra la flag.
Respuestas:
- Task 1: -sC
- Task 2: vsftpd 3.0.3
- Task 3: 230
- Task 4: get
- Task 5: admin
- Task 6: 2.4.41
- Task 7: Wappalyzer
- Task 8: -x
- Task 9: login.php