[Markdown (mostly)] This is the repo of my blog https://libskia.so/b/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.5KB

  1. Sauvetage d'un serveur
  2. ######################
  3. :date: 2015-01-30 01:35
  4. :tags: sauvetage
  5. :slug: sauvetage
  6. :category: server
  7. :lang: fr
  8. :summary: Comment récupérer l'accès après un accident...
  9. Un petit déterrage pour ce premier post de 2015. Il s'agit là simplement d'un
  10. article que j'avais rédigé dans un wiki, et qui est resté depuis le seul article
  11. du dit wiki. Plutôt donc de le laisser moisir, je le ressors ici, où il aura un
  12. peu plus sa place... :)
  13. Récupération d'un serveur perdu
  14. ===============================
  15. Le problème
  16. -----------
  17. Au cours de manipulation visants à augmenter la sécurité du serveur, j'ai
  18. malheureusement un peu trop joué avec les droits, ce qui fait qu'en essayant de
  19. se connecter via ssh, celui-ci, après avoir afficher les quelques lignes de
  20. bienvenue et au moment de lancer le shell:
  21. ::
  22. /bin/zsh: permission denied
  23. connection to pike.tf closed
  24. Plutôt problématique, n'est-ce pas?
  25. La solution
  26. -----------
  27. Comme tout problème a une solution, il fallait donc la trouver. Fort
  28. heureusement, on pouvait toujours envoyer des fichiers par FTP dans le dossier
  29. root d'apache, donc on pouvait uploader un script PHP qui nous sauverait la vie.
  30. J'ai testé quelques script codés moi même, mais finalement, j'ai plutôt utilisé
  31. un reverse shell, bien plus pratique pour tester différentes commandes.
  32. Le script est dispo ici :
  33. http://pentestmonkey.net/tools/web-shells/php-reverse-shell . Tout y est très
  34. bien expliqué et l'on obtient rapidement un pseudo shell sur notre machine
  35. locale.
  36. Un autre problème se posait alors à moi: il fallait que j'execute une commande
  37. avec les droits root pour chmoder les fichiers de zsh. Pour cela, deux options:
  38. 'su' et 'sudo'. Mais en faisant 'su', la commande nous répond
  39. ::
  40. su: must be run from a terminal
  41. Pour sudo, le problème est différent. La commande fonctionnait tout à fait, sauf
  42. que le script qui l'execute est lancé par www-data, l'user d'apache, et celui-ci
  43. n'est pas dans le sudoers, donc il ne peut rien faire.
  44. J'ai donc trouvé une nouvelle astuce sur cette page : http://evertpot.com/189/ ,
  45. qui donne deux lignes à rentrer dans notre pseudo shell pour executer un "vrai"
  46. shell via python. Bien sûr, il faut que Python soit installé sur le serveur, ce
  47. qui était notre cas.
  48. La première ligne créer un script placé dans /tmp, et la deuxième l'execute,
  49. nous donnant un shell dans lequel on peut ensuite executer 'su' sans aucun
  50. problème.
  51. En résumé
  52. ---------
  53. * Uploader la page de script du reverse-shell une fois modifiée, comme indiquée
  54. sur le site, en spécifiant l'adresse IP de la machine local sur laquelle vous
  55. obtiendrez le pseudo shell, ainsi qu'un port disponible sur lequel vous allez
  56. pouvoir faire écouter votre machine. Attention, si vous êtes derrière une box,
  57. penser à forwarder le port!
  58. * Lancer la commande 'nc' avec les options qui vont bien sur votre machine pour
  59. qu'elle soit prête à écouter sur le port, par exemple avec le port 1234:
  60. ::
  61. nc -v -n -l -p 1234
  62. * Lancer le script en accédant à son URL dans votre naviguateur, votre
  63. pseudo-shell est alors disponible là où vous aviez lancé netcat
  64. * Executer les deux commande Python pour avoir ensuite un vrai shell et pouvoir
  65. lancer 'su'
  66. ::
  67. echo "import pty;
  68. pty.spawn('/bin/bash')" > /tmp/asdf.py
  69. python /tmp/asdf.py
  70. Voilà, vous pouvez désormais récupérer votre serveur!
  71. Merci à Dustri_ pour les nombreuses indications fournies pendant la récupération! :)
  72. .. _Dustri : http://dustri.org