Maison > Article > développement back-end > Attaques de vulnérabilité de téléchargement de fichiers de sécurité Web et méthodes de prévention
1. La relation entre la vulnérabilité de téléchargement de fichiers et WebShell
La vulnérabilité de téléchargement de fichiers signifie qu'un attaquant du réseau télécharge un fichier exécutable sur le serveur et l'exécute. Les fichiers téléchargés ici peuvent être des chevaux de Troie, des virus, des scripts malveillants ou WebShell, etc. Cette méthode d'attaque est la plus directe et la plus efficace. Le seuil technique pour exploiter certaines vulnérabilités de téléchargement de fichiers est très bas, ce qui facilite sa mise en œuvre par les attaquants.
La vulnérabilité de téléchargement de fichiers elle-même est une vulnérabilité très dangereuse, et WebShell étendra à l'infini l'utilisation de cette vulnérabilité. Une fois la plupart des vulnérabilités de téléchargement exploitées, l'attaquant quittera un WebShell pour faciliter son entrée ultérieure dans le système. Une fois qu'un attaquant place ou insère un WebShell sur le système affecté, il peut utiliser le WebShell pour faire ce qu'il veut dans le service plus facilement et plus secrètement.
Il convient de noter ici que l'exploitation des vulnérabilités de téléchargement utilise souvent WebShell, et l'implantation de WebShell va bien au-delà du simple téléchargement de fichiers.
1 Introduction à Webshell
WebShell est un environnement d'exécution de commandes qui existe sous forme de fichiers web tels que asp, php, jsp ou cgi. Il peut également l'être. appelé Une porte dérobée Web. Après qu'un attaquant envahit un site Web, il mélange généralement ces fichiers de porte dérobée ASP ou PHP avec des fichiers de page Web normaux dans le répertoire Web du serveur du site Web, puis utilise un navigateur pour accéder à ces portes dérobées et obtenir un environnement d'exécution de commandes pour contrôler le site Web. La finalité du serveur (peut télécharger, télécharger ou modifier des fichiers, faire fonctionner la base de données, exécuter des commandes arbitraires, etc.).
La porte dérobée WebShell est hautement dissimulée et peut facilement traverser les pare-feu. Lors de l'accès à WebShell, elle ne laissera pas de journaux système, mais ne laissera que certains enregistrements de soumission de données dans les journaux Web du site Web. Ce n'est pas facile pour les inexpérimentés. administrateurs. Des traces d’intrusion ont été trouvées. Les attaquants peuvent masquer WebShell dans des fichiers normaux et modifier l'heure du fichier pour améliorer la dissimulation. Ils peuvent également utiliser certaines fonctions pour coder ou fusionner WebShell afin d'éviter la détection. De plus, la soumission d'un malware plus puissant via un cheval de Troie d'une seule phrase peut plus facilement passer la détection par l'application elle-même. est le poney le plus courant et le plus original, et de nombreuses variantes ont émergé sur cette base, telles que etc.
2 Principe de vulnérabilité de téléchargement de fichiers
La plupart des sites Web et des systèmes d'application ont des fonctions de téléchargement. Certains codes d'implémentation de la fonction de téléchargement de fichiers ne limitent pas strictement les suffixes de fichiers téléchargés par les utilisateurs et. Le type de fichier permet à un attaquant de télécharger des fichiers PHP arbitraires dans un répertoire accessible sur le Web et de transmettre ces fichiers à l'interpréteur PHP, exécutant ainsi des scripts PHP arbitraires sur le serveur distant.
Lorsqu'une vulnérabilité de téléchargement de fichiers existe dans le système, un attaquant peut télécharger des virus, des chevaux de Troie, WebShell, d'autres scripts malveillants ou des images contenant des scripts sur le serveur. Ces fichiers faciliteront les attaques ultérieures de l'attaquant. En fonction de la vulnérabilité spécifique, les scripts téléchargés ici peuvent être des scripts PHP, ASP et JSP avec des suffixes normaux, ou des scripts de ce type avec des suffixes falsifiés.
Lorsque le fichier téléchargé est un virus ou un cheval de Troie, il est principalement utilisé pour inciter les utilisateurs ou les administrateurs à le télécharger et à l'exécuter ou à l'exécuter directement automatiquement ; 🎜>
Le fichier téléchargé estWebShell, les attaquants peuvent exécuter des commandes et contrôler le serveur via ces portes dérobées Web
télécharger des fichiers qui sontautres ; scripts malveillants, les attaquants Les scripts peuvent être exécutés directement pour mener des attaques
Lorsque le fichier téléchargé est uneimage malveillante, la image peut contient un script. Lors du chargement ou du clic sur ces images, le script s'exécutera silencieusement ; lorsque le fichier téléchargé
est un script malveillantdéguisé en suffixe normal , l'attaquant peut utiliser la vulnérabilité Local File Include pour exécuter le fichier . Par exemple, renommez le fichier bad.php en bad.doc et téléchargez-le sur le serveur, puis incluez-le et exécutez-le via les fonctions include, include_once, require, require_once et autres de PHP.
Il y a trois raisons principales pour lesquelles des fichiers malveillants sont téléchargés ici :Manque de vérification lors du téléchargement de fichiers. Aucune vérification du format de fichier n'est effectuée. Certaines applications ne sont vérifiées que côté client, mais aux yeux des attaquants professionnels, presque toutes les vérifications côté client équivalent à aucune vérification. Les attaquants peuvent facilement contourner les vérifications côté client via des outils de téléchargement de points d'arrêt tels que NC et Fiddler. Bien que certaines applications effectuent une vérification de liste noire côté serveur, elles peuvent ignorer la casse. Par exemple, changer .php en .Php peut contourner la vérification ; certaines applications effectuent une vérification de liste blanche côté serveur mais ignorent le caractère de troncature %00, si l'application est à l'origine. permet uniquement le téléchargement d'images jpg, alors le nom du fichier peut être construit comme xxx.php%00.jpg, où %00 est le caractère hexadécimal 0x00. jpg trompe la détection du type de fichier téléchargé par l'application. Mais pour le serveur, en raison de. la troncature du caractère %00, le fichier final téléchargé devient xxx.php.
Mauvaise gestion de la modification du nom de fichier après le téléchargement. Certaines applications disposent d'un filtrage complet des listes noires et blanches côté serveur, mais sont très prudentes lors de la modification du nom des fichiers téléchargés, permettant aux utilisateurs de modifier le suffixe du fichier. Si l'application ne peut télécharger que des fichiers .doc, l'attaquant peut d'abord remplacer le suffixe du fichier .php par .doc, puis redéfinir le suffixe en .php lors de la modification du nom du fichier après un téléchargement réussi.
Introduit lors de l'utilisation de plug-ins tiers. De nombreuses applications utilisent des plug-ins tiers dotés de fonctions de téléchargement de fichiers. Ces plug-ins peuvent présenter des failles dans la mise en œuvre de la fonction de téléchargement de fichiers. Les attaquants peuvent utiliser ces failles pour mener des attaques de téléchargement de fichiers. Par exemple, la célèbre plateforme de blogs WordPress regorge de plug-ins, et un grand nombre de vulnérabilités de téléchargement de fichiers sont découvertes chaque année dans ces plug-ins.
3 Exemples d'attaques de téléchargement de fichiers
Comme mentionné ci-dessus, il existe de nombreuses raisons pour les vulnérabilités de téléchargement de fichiers. Prenons la seconde comme exemple et sélectionnons le fichier LibrettoCMS. Téléchargez la vulnérabilité (le numéro de base de données d'exploitation de la vulnérabilité est 60560) pour expliquer en détail l'ensemble du processus d'exploitation de la vulnérabilité.
Libretto est un système de gestion de contenu développé en utilisant le langage PHP et le langage MySQL. LibrettoCMS version 2.2.2 permet aux utilisateurs non vérifiés de télécharger des fichiers et de modifier le suffixe des fichiers téléchargés. Bien que le système limite les utilisateurs à télécharger uniquement des fichiers aux formats doc et pdf, une erreur de traitement s'est produite lors de la modification du nom du fichier, ce qui a permis à l'utilisateur de modifier le suffixe du fichier. L'attaquant peut modifier le suffixe du fichier malveillant en doc ou pdf, puis modifier le suffixe en php une fois le téléchargement réussi pour l'exécuter.
l Téléchargez le WebShell avec le suffixe doc
Visitez la page de gestion de fichiers du système/plugins/pgrfilemanager/PGRFileManager.php, téléchargez un fichier doc normal et constatez qu'il peut être téléchargé avec succès. Pour écrire une porte dérobée WebShell en langage PHP, vous pouvez également télécharger un WebShell existant depuis Internet et changer le suffixe du fichier WebShell en doc. Ici, remplacez la porte dérobée myshell.php par myshell.doc.
Après avoir préparé WebShell, visitez la page de gestion des fichiers PGRFileManager.php pour télécharger myshell.doc sur le serveur. Comme le montre la figure 1, myshell avec le suffixe doc a été téléchargé avec succès. À l'heure actuelle, myshell accédant au format doc via le navigateur ne peut pas être exécuté normalement.
Figure 1 mybshell.doc téléchargé avec succès
l Changez le suffixe WebShell en php
Dans la gestion des fichiers Cliquez avec le bouton droit sur mybshell.doc sur la page et sélectionnez renommer pour accéder à la page de modification du nom de fichier, remplacez mybshell.doc par mybshell.php et cliquez sur le bouton Ok pour soumettre le résultat de la modification (comme indiqué dans la figure 2). À l'heure actuelle, le suffixe du fichier myshell a été modifié avec succès en php. En raison de l'implémentation du codage de l'application, la page de gestion des fichiers ne peut pas lire le fichier myshell.php, mais nous pouvons voir le fichier modifié dans le répertoire de téléchargement de fichiers du. serveur système (comme indiqué sur la figure) illustré en 3).
Figure 2 Modifier mybshell.doc en mybshell.php
Figure 3 Le suffixe myshell dans le serveur a été changé en php
l Exécuter Webshell
À l'heure actuelle, le WebShell dans le répertoire de téléchargement du serveur a le suffixe php et l'environnement du serveur peut être analysé normalement. Le fichier est accessible directement via le navigateur : http://192.168.20.174/vlun/Mylibretto/userfiles/myshell.php, entrez le mot de passe que nous avons défini dans WebShell pour vous connecter à la page WebShell (comme indiqué sur la figure 4). Sur la figure, nous pouvons voir que ce n'est que via ce fichier WebShell que l'attaquant peut effectuer la gestion de fichiers, la gestion de bases de données, exécuter des commandes système et exécuter du code PHP arbitraire sur le serveur. Avec ce WebShell, les attaquants peuvent placer d'autres fichiers WebShell dans des répertoires plus profonds ou ajouter du code de porte dérobée PHP directement aux fichiers php rarement utilisés déjà présents dans le système pour empêcher leur découverte par les administrateurs système.
Figure 4 Accès réussi à la porte dérobée WebShell
4 Défense contre la vulnérabilité lors du téléchargement de fichiers
Tout d'abord, le fichier téléchargé accessible par le conteneur Web Explication et exécution. Par conséquent, le répertoire dans lequel le fichier est téléchargé doit être le chemin couvert par le conteneur Web.
Deuxièmement, les utilisateurs peuvent accéder à ce fichier depuis le Web. Si le fichier est téléchargé, mais que l'utilisateur ne peut pas y accéder via le Web ou ne peut pas faire en sorte que le conteneur Web interprète le script, cela ne peut pas être qualifié de vulnérabilité.
Enfin, si le contenu des fichiers téléchargés par les utilisateurs est modifié par les contrôles de sécurité, le formatage, la compression d'images et d'autres fonctions, cela peut également conduire à des attaques infructueuses.
Plusieurs méthodes courantes pour éviter les vulnérabilités de téléchargement de fichiers.
1. Le répertoire de téléchargement des fichiers est défini sur non exécutable
Tant que le conteneur Web ne peut pas analyser les fichiers sous le répertoire, même si l'attaquant télécharge le fichier script, le serveur lui-même ne sera pas affecté, c'est donc crucial.
2. Déterminez le type de fichier
Lors de la détermination du type de fichier, vous pouvez utiliser le type MIME, la vérification des suffixes et d'autres méthodes en combinaison. Lors de la vérification du type de fichier, la méthode de la liste blanche est fortement recommandée. La méthode de la liste noire s'est avérée peu fiable à de nombreuses reprises. De plus, pour le traitement d'image, vous pouvez utiliser la fonction de compression ou la fonction de redimensionnement pour détruire le code HTML pouvant être contenu dans l'image lors du traitement de l'image.
3. Utilisez des nombres aléatoires pour réécrire le nom et le chemin du fichier
Si vous souhaitez exécuter du code lors du téléchargement d'un fichier, l'utilisateur doit pouvoir y accéder. le fichier. Dans certains environnements, les utilisateurs peuvent télécharger mais pas y accéder. Si des nombres aléatoires sont utilisés pour réécrire les noms et chemins de fichiers, le coût de l’attaque sera considérablement augmenté. Ensuite, les fichiers comme shell.php.rar.rar et crossdomain.xml ne pourront pas être attaqués en raison du changement de nom.
4. Définissez séparément le nom de domaine du serveur de fichiers
En raison de la politique de même origine du navigateur, une série d'attaques côté client sera inefficace , comme le téléchargement de crossdomain.xml, les problèmes de téléchargement tels que les exploits XSS contenant Javascript seront résolus.
l Défense pendant la phase de développement du système
Les développeurs de systèmes doivent avoir une forte conscience de la sécurité, en particulier lors du développement de systèmes utilisant le langage PHP. La sécurité du système doit être pleinement prise en compte lors de la phase de développement du système. Pour les vulnérabilités de téléchargement de fichiers, il est préférable de vérifier strictement les noms de fichiers et les chemins d’accès aux fichiers téléchargés par les utilisateurs côté client et côté serveur. Bien que les contrôles côté client puissent être contournés par des attaquants expérimentés à l’aide d’outils, ils peuvent également bloquer certains tests de base. Il est préférable d'utiliser la méthode de filtrage de la liste blanche pour l'inspection côté serveur, ce qui peut empêcher le contournement des majuscules et d'autres méthodes. Dans le même temps, le caractère de troncature %00 doit également être détecté. Le type de contenu de l'en-tête HTTP et. la taille du fichier téléchargé doit également être vérifiée.
l Défense pendant la phase d'exploitation du système
Une fois le système mis en ligne, le personnel d'exploitation et de maintenance doit avoir un fort sentiment de sécurité et utiliser activement plusieurs outils de détection de sécurité pour analyser le système, découvrir les vulnérabilités potentielles et les corriger en temps opportun. Vérifiez régulièrement les journaux système et les journaux du serveur Web pour trouver des traces d’intrusion. Faites régulièrement attention aux mises à jour des plug-ins tiers utilisés dans le système. Si une nouvelle version est publiée, il est recommandé de la mettre à jour à temps. Si un plug-in tiers est exposé et présente des failles de sécurité, il est recommandé de le mettre à jour. doit être réparé immédiatement. Pour les sites Web dont l'intégralité du site est construite à l'aide de code source ouvert ou de frameworks en ligne, une attention particulière doit être accordée à l'auto-examen des vulnérabilités et aux mises à jour des versions et correctifs du logiciel. La fonction de téléchargement n'est pas requise et peut être supprimée directement. En plus de la maintenance du système lui-même, le serveur doit être correctement configuré. Les autorisations d'exécution doivent être supprimées des répertoires généraux non requis et le répertoire de téléchargement peut être configuré en lecture seule.
l Défense des équipements de sécurité
L'essence des attaques par téléchargement de fichiers est de télécharger des fichiers ou des scripts malveillants sur le serveur. L'équipement de sécurité professionnel se défend contre de telles vulnérabilités principalement en détectant. le comportement de téléchargement et d’exploitation des vulnérabilités et le processus de téléchargement de fichiers malveillants. Les fichiers malveillants évoluent en permanence et des méthodes de dissimulation sont constamment introduites. Les administrateurs système ordinaires peuvent aider à se défendre en déployant des dispositifs de sécurité. Les produits de la série SecPath IPS actuellement commercialisés par H3C Communications Company sont accumulés depuis longtemps. Ils peuvent non seulement détecter l'exploitation d'un grand nombre de vulnérabilités de téléchargement de fichiers sur le réseau en fonction du comportement, mais également identifier les fichiers malveillants en fonction du contenu.
2. Conclusion
Pour les attaquants, les vulnérabilités de téléchargement de fichiers ont toujours été un moyen important d'obtenir le shell du serveur. Pour le personnel de maintenance du système, il n'est pas nécessaire de s'étendre sur les énormes dommages causés par les vulnérabilités de téléchargement de fichiers. Un apprentissage actif et une compréhension approfondie des connaissances pertinentes sur les vulnérabilités peuvent les aider à faire face à de telles attaques plus sereinement
. Tutoriel recommandé : Sécurité et vulnérabilités PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!