web-dev-qa-db-fra.com

Est-il possible pour un pirate de télécharger un fichier php sans l'exécuter au préalable?

J'ai un site Web php où tout est dans le dossier public_html \, y compris un dossier includes avec config et classes. J'ai dit à mon développeur de l'éloigner du dossier public mais il a dit qu'il n'y avait aucun risque car les fichiers sont des fichiers php et même si quelqu'un tape dans le navigateur le

www.example.com/includex/config.php

tout ce qu'ils obtiendront est une page blanche.

Est-ce exact? N'y a-t-il aucun moyen que quelqu'un puisse télécharger un fichier php et voir ce qu'il contient, même si un pirate se connecte à mon serveur pour télécharger le fichier ou l'inclure dans un fichier php sur son serveur en utilisant XSS?

35
Petja Zaichikov

Pour lire PHP vous avez besoin d'une vulnérabilité de traversée de répertoire . file_get_contents() ou autre fonctions du système de fichiers exploitables =.

L'injection SQL sous mysql peut être utilisée pour lire le code source. Par exemple:

select load_file("/var/www/index.php")

Pour lutter contre cela, assurez-vous que file_privs sont désactivés pour le compte utilisateur MySQL utilisé par PHP. Si display_errors = on dans votre configuration php, un attaquant peut obtenir le chemin de votre racine web et utiliser l'injection sql ou la traversée de répertoire pour lire le code source.

L'utilisation de FTP signifie que le code source est transmis en texte brut. Utilisez SFTP , et assurez-vous d'avoir un mot de passe fort - ou mieux encore, configurez une clé RSA.

Faites attention aux fichiers de sauvegarde, parfois les éditeurs créeront index.php~ ou index.php.orig fichiers pouvant être découverts en utilisant navigation forcée .

22
rook

En plus des vulnérabilités côté serveur de toutes les variétés, les fuites de mots de passe FTP sont également une préoccupation importante. Il existe une classe d'infections côté client qui récupère vos mots de passe FTP enregistrés à partir de programmes tels que CuteFTP, FileZilla et DreamWeaver, envoyant les informations de connexion à un attaquant. C'est très courant. J'ai personnellement vu des centaines, voire des milliers de cas où cela s'est produit. Et généralement, la personne qui a divulgué les mots de passe sans le savoir est quelqu'un qui n'a plus besoin de les avoir de toute façon.

Et si vous vous demandez si un attaquant va réellement fouiller dans vos fichiers de configuration à la recherche de mots de passe, la réponse est sans ambiguïté " oui ". Généralement, c'est l'une des toutes premières choses qu'un attaquant fera, quelques minutes après avoir compromis une nouvelle machine.

13
tylerl

Il existe deux manières possibles pour un attaquant de lire ce fichier sous forme de texte, plutôt que de l'exécuter.

  1. Si votre serveur Web est mal configuré, le php risque de ne pas être exécuté. Vous devez évidemment avoir php installé et exécuté côté serveur, ainsi qu'un serveur Web en place qui le supporte. Si, pour une raison quelconque, quelque chose ne va pas avec votre installation php, il est théoriquement possible de télécharger le fichier php "brut". Cependant, cela est peu probable.

  2. S'il existe une vulnérabilité LFI (inclusion de fichier local) dans ce script (ou dans toute autre page dynamique du site), il est possible d'afficher un fichier situé sur le serveur Web. Voir la page Wikipedia sur les vulnérabilités d'inclusion de fichiers pour voir à quoi cela ressemblerait.

En passant, il convient de noter que pour utiliser PHP fichiers du tout, ils doivent être accessibles par un navigateur. Il n'y a aucun moyen de "cacher" la page, à moins qu'un autre script ne l'exécute ailleurs.

4
dshaw

Les mots de passe FTP qui ont fui sont tous très courants et constituent l'un des moyens les plus courants de supprimer les fichiers source, les logiciels malveillants installés sur les sites Web des développeurs sont très courants et se sont récemment développés.Ils ont commencé à être témoins d'attaques par hameçonnage contre eux dans le but de permettre aux pirates d'obtenir la propriété intellectuelle .

L'un des moyens les moins courants et d'après ce que je sais n'est connu que d'un certain nombre de personnes, mais si vous développez votre site Web sur le serveur Web Linux où le site Web est hébergé, vous risquez d'avoir un problème lors de certaines modifications. le logiciel stockera les sauvegardes des fichiers modifiés cachés de la vue des développeurs, par exemple.

Login.php ~

Ce fichier car il n'est pas exécuté par le serveur Web est accessible en entrant

Cela révélerait la source du fichier login.php de sauvegarde pour éviter que vous ne deviez développer votre code de site et le télécharger sur le serveur ou vous assurer qu'aucun fichier de sauvegarde n'est stocké dans un répertoire que le public a accès à.

Source: magazine 2600

Que se passe-t-il si un attaquant a pu accéder

databaseConnection.php ~

Alors votre ruisseau vraiment haut

3
Bratislava Bob

Comme d'autres ont répondu, cela ne devrait pas être possible. Cependant, vous ne pouvez pas dire qu'il n'y a absolument aucun moyen pour un attaquant de lire votre code source PHP.

Par exemple, il peut y avoir une vulnérabilité qui permet à un attaquant de visualiser les fichiers du serveur Web, y compris le code brut PHP code. Ou un attaquant peut être en mesure de découvrir votre mot de passe FTP, qui pourrait également être fait de plusieurs façons, y compris attaques man-in-the-middle et ingénierie sociale . Il existe de nombreuses possibilités. Ci-dessous, j'ai énuméré quelques vulnérabilités qui pourraient le permettre, mais en fin de compte, avoir juste PHP fichiers dans le dossier public_html ne devrait absolument pas être un risque pour lui-même.


Un fichier download.php qui prend un paramètre GET/POST avec le nom du fichier à télécharger, et ne filtre pas correctement les entrées utilisateur, pourrait permettre de télécharger le code brut d'un fichier sur le site, en accédant à une adresse comme celle-ci: http://www.example.com/files/download.php?file=../index.php . Voir ceci .

Autre exemple: s'il existe une vulnérabilité qui permet à un attaquant d'exécuter l'exécution de code sur votre serveur, tel que Inclusion de fichier local/distant , Vulnérabilités de téléchargement de fichiers , et d'autres, il pourrait également lui être possible d'exécuter du code lui permettant de lire votre PHP code source.

0
mds

Tant que les choses sont correctement configurées sur le serveur, PHP doivent être enregistrés en tant que scripts et le serveur Web doit les faire interpréter par PHP sur demande et uniquement). afficher les résultats de cette interprétation.

Cela dit, un certain nombre de problèmes peuvent entraîner l'exposition de fichiers. Certains de ces problèmes peuvent également exposer des données, qu'elles se trouvent ou non dans un dossier public. Il est toujours important de vous assurer que votre serveur est correctement configuré pour n'autoriser que les demandes dont vous avez besoin. Cela réduit la surface disponible pour attaquer et aide à éviter les éventuels problèmes liés aux bogues qui pourraient entraîner une violation.

Est-ce une bonne idée d'avoir un fichier de configuration dans un dossier public? Tant que le serveur est configuré pour ne pas distribuer le fichier sans le traiter, il n'est probablement pas beaucoup moins sécurisé que n'importe quel autre endroit du système. Il y a peu de chances qu'un bogue du serveur Web soit utilisé pour empêcher l'exécution par le moteur de script, mais les attaques les plus probables sont des attaques qui proviendraient d'une autre direction comme SQL, FTP ou une injection de code dans un dossier privé. serait également exposé.

Cela dit, le revers de la question est pourquoi ne pas le placer ailleurs. L'option la plus sûre serait de mettre quelque part que seul l'utilisateur sur lequel s'exécute l'instance PHP du site Web) peut accéder et refuser l'accès au fichier à partir de tout autre mécanisme (tel que l'utilisateur FTP ou tout autre utilisateur utilisé publiquement.) Ceci est cependant assez difficile à configurer et à gérer, donc une décision doit être prise si la sécurité supplémentaire est nécessaire ou non.

C'est un tirage au sort sur ce qui est le mieux. Il faut beaucoup de travail supplémentaire pour gérer tous les chemins, autorisations et utilisateurs pour maintenir ce niveau de sécurité. D'un autre côté, tant que le serveur est maintenu patché et correctement configuré, vous ne devriez être vulnérable qu'aux exploits zero day qui attaquent à un niveau très bas et peuvent être à l'abri de presque toutes les attaques courantes, même avec le fichier de configuration dans le dossier public.

0
AJ Henderson