Unmaintained space

blacksmith
computers
drumming
bujutsu
gaming
metal
beer
diy
...


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

Le problème

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?

La solution

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.

En résumé

  • Uploader la page de script du reverse-shell une fois modifiĂ©e, comme indiquĂ©e sur le site, en spĂ©cifiant l'adresse IP de la machine local sur laquelle vous obtiendrez le pseudo shell, ainsi qu'un port disponible sur lequel vous allez pouvoir faire Ă©couter votre machine. Attention, si vous ĂŞtes derrière une box, penser Ă  forwarder le port!
  • Lancer la commande 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
    
  • Lancer le script en accĂ©dant Ă  son URL dans votre naviguateur, votre pseudo-shell est alors disponible lĂ  oĂą vous aviez lancĂ© netcat
  • Executer les deux commande Python pour avoir ensuite un vrai shell et pouvoir lancer 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! :)