[Archives] Exécuter un script bash « as root » via php

[Archives] Exécuter un script bash « as root » via php

Cet article va vous permettre de découvrir comment exécuter des scripts bash demandant une élévation des privilèges par l’intermédiaire de PHP.

De quoi avons-nous besoin ?

Bien que cela me parait évident, il faut pour ce tutoriel avoir le paquet « sudo » installé : apt install sudo (Il n’est pas présent de base sur toutes les distributions).

Nous allons utiliser la commande visudo pour pouvoir éditer le fichier sudoers. Ce dernier fournit un coffre-fort pour éditer le fichier /etc/sudoers. Le fichier sudoers détermine exactement « qui » peut exécuter des commandes. Il contrôle également les commandes qu’un utilisateur peut exécuter. Plus particulièrement pour notre objectif, il identifie si vous avez besoin d’un mot de passe pour des commandes particulières ou non.

Comment ajuster le fichier sudoers avec visudo ?

Les exemples suivants supposent que votre utilisateur Apache est www-data (par défaut).

La mauvaise façon (rapide, mais pas du tout recommandé pour un serveur en production)

Exécuter la ligne de commande suivante :

sudo visudo -f /etc/sudoers.d/myOverrides

Ajoutez la ligne suivante :

www-data ALL = (ALL) NOPASSWD: ALL

Encore une fois, évitez cette méthode à tout prix dans un environnement de production ! C’est une mauvaise idée, car cela crée une faille de sécurité, qui pourrait être utilisée par un attaquant pour réaliser une tentative d’élévation de privilèges. Le cas échéant il pourrait exécuter n’importe quel fichier/ligne de commande sur votre serveur en tant que root. Imaginez les dégâts …

La meilleure façon

Créez un script shell qui exécute les commandes au nom de l’utilisateur www-data.

Le but de ce petit script va être d’afficher le statut de mysql.

nano /path/to/myscript/statusMysql.sh

!/bin/bash 
# Avoir le service MySQL sur votre serveur avant d’effectuer cette action
systemctl status mysql

Ajoutez la ligne suivante pour empêcher www-data de se voir demander un mot de passe lorsque vous essayez d’exécuter un script shell spécifique. 

sudo visudo -f /etc/sudoers.d/myOverrides
www-data ALL = (ALL) NOPASSWD: /path/to/myscript/statusMysql.sh

Cette manière de procédé est bien plus sécuritaire, en effet comme le montre l’instruction ci-dessus, l’utilisateur www-data est autorisé a exécuter seulement le script : statusMysql.sh, et pas n’importe quelle commande ou script comme dans l’exemple précédent. (a chaque nouveau script, il faudra modifier le fichier /etc/sudoers.d/myOverrides, et ajouter le chemin absolut vers le nouveau script.)

Exemple de mon script PHP /var/www/html/test.php exécutant le script statusMysql.sh :

<? php
echo shell_exec ("sudo /path/to/my/script/statusMysql.sh");
?>

Avant de se rendre sur la page http://ip/test.php, nous devons executer la commande suivante :

chown www-data:www-data /var/www/html/test.php 

Cet commande ci-dessus est très importante, sans celle-ci, votre script retournera une page blanche, car le script n’aura pas été exécuté.

Note : statusMysql.sh, devra être propriétaire de root ou de www-data, pour pouvoir être exécuté, et disposer de droits d’exécutions (cf commande chmod).

chown www-data:www-data /path/to/my/script/statusMysql.sh

Je pars du principe que mon script php sera localisé à la racine de mon serveur WEB. http://votre-ip/test.php

Cet exemple est simpliste, mais imaginez la possibilité que cela vous donne, pour exécuter d’autres scripts shell / commandes par l’intermédiaire d’une interface WEB…

À bientôt 🙂

Brlndtech

Geoffrey Sauvageot-Berland

Ingénieur Diplômé par l’Etat en Informatique et Cybersécurité. Généraliste ; à l'origine, administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. - Fondateur du blog : "Le guide du secops".

Related Posts

Reconstruction d’OS non chiffrés : Analyse post-exploitation

Reconstruction d’OS non chiffrés : Analyse post-exploitation

Exfiltrer des données depuis une session meterpreter (Post Exploitation)

Exfiltrer des données depuis une session meterpreter (Post Exploitation)

Reverse/Bind shell – Quésaco

Reverse/Bind shell – Quésaco

Configurer le service RDP facilement pour Ubuntu 22.04

Configurer le service RDP facilement pour Ubuntu 22.04