Sauvetage d'un serveur
Un petit déterrage pour ce premier post de 2015. Il s'agit là simplement d'un article que j'avais rédigé dans un wiki, et qui est resté depuis le seul article du dit wiki. Plutôt donc de le laisser moisir, je le ressors ici, où il aura un peu plus sa place... :)
#Récupération d'un serveur perdu
Au cours de manipulation visants à augmenter la sécurité du serveur, j'ai malheureusement un peu trop joué avec les droits, ce qui fait qu'en essayant de se connecter via ssh, celui-ci, après avoir afficher les quelques lignes de bienvenue et au moment de lancer le shell:
/bin/zsh: permission denied
connection to pike.tf closed
Plutôt problématique, n'est-ce pas?
Comme tout problème a une solution, il fallait donc la trouver. Fort heureusement, on pouvait toujours envoyer des fichiers par FTP dans le dossier root d'apache, donc on pouvait uploader un script PHP qui nous sauverait la vie.
J'ai testé quelques script codés moi même, mais finalement, j'ai plutôt utilisé un reverse shell, bien plus pratique pour tester différentes commandes. Le script est dispo ici : http://pentestmonkey.net/tools/web-shells/php-reverse-shell. Tout y est très bien expliqué et l'on obtient rapidement un pseudo shell sur notre machine locale.
Un autre problème se posait alors à moi: il fallait que j'execute une commande
avec les droits root pour chmoder les fichiers de zsh. Pour cela, deux options:
su
et sudo
. Mais en faisant su
, la commande nous répond
su: must be run from a terminal
Pour sudo
, le problème est différent. La commande fonctionnait tout à fait,
sauf que le script qui l'execute est lancé par www-data, l'user d'apache, et
celui-ci n'est pas dans le sudoers, donc il ne peut rien faire.
J'ai donc trouvé une nouvelle astuce sur cette page : http://evertpot.com/189/,
qui donne deux lignes Ă rentrer dans notre pseudo shell pour executer un "vrai"
shell via python. Bien sûr, il faut que Python soit installé sur le serveur, ce
qui était notre cas. La première ligne créer un script placé dans /tmp
, et la
deuxième l'execute, nous donnant un shell dans lequel on peut ensuite executer
su
sans aucun problème.
nc
avec les options qui vont bien sur votre
machine pour qu'elle soit prête à écouter sur le port, par exemple
avec le port 1234:nc -v -n -l -p 1234
su
echo "import pty;
pty.spawn('/bin/bash')" > /tmp/asdf.py
python /tmp/asdf.py
Voilà , vous pouvez désormais récupérer votre serveur!
Merci à Dustri pour les nombreuses indications fournies pendant la récupération! :)