Les vulnérabilités de téléchargement de fichiers se produisent dans les applications dotées de fonctions de téléchargement. Si l'application ne contrôle pas les fichiers téléchargés par les utilisateurs ou présente des défauts, les attaquants peuvent exploiter les défauts de la fonction de téléchargement de l'application pour télécharger des chevaux de Troie, des virus et d'autres fichiers nuisibles. au serveur et contrôler le serveur.
La principale raison de la vulnérabilité de téléchargement de fichiers est qu'il existe une fonction de téléchargement dans l'application, mais que les fichiers téléchargés n'ont pas passé une inspection de légalité stricte ou que la fonction d'inspection est défectueuse, ce qui autorise les fichiers de chevaux de Troie à télécharger sur le serveur. Les vulnérabilités de téléchargement de fichiers sont extrêmement dangereuses car du code malveillant peut être téléchargé directement sur le serveur, ce qui peut entraîner de graves conséquences telles que la falsification des pages Web du serveur, la suspension du site Web, le contrôle à distance du serveur et l'installation de portes dérobées.
Ci-dessous, nous discutons de plusieurs méthodes de vérification et de contournement pour le téléchargement de fichiers :
La vulnérabilité de contournement du téléchargement du filtre JS frontal est due au fait que l'application est vérifiée via le code JS sur le front-end. , et La vérification n'est pas effectuée sur le backend du programme, vous pouvez donc contourner le filtrage de téléchargement et télécharger des chevaux de Troie en modifiant le code JS frontal.
Alors, comment juger s'il s'agit d'une vérification frontale ? Personnellement, je pense que nous pouvons vérifier si nous pouvons obtenir le paquet de données lors du téléchargement et de la capture du paquet, si des données circulent, ou si nous pouvons vérifier si la page d'image téléchargée affichera l'adresse de l'image téléchargée, etc.
Bypass : Supprimez le code de filtrage, modifiez ou désactivez Javascript.
Vérifications courantes pour le téléchargement de fichiers : nom du suffixe (vérification directe), fichier, en-tête du fichier (vérification indirecte).
2.1.1 Liste noire (suffixe de format de script dont le téléchargement n'est explicitement pas autorisé)
La vulnérabilité de contournement du filtrage des noms de fichiers est principalement due au fait que le type de téléchargement de fichiers est déterminé via la liste noire, et là Il n'y a pas de filtrage complet, permettant aux attaquants de télécharger des fichiers en dehors des types sur liste noire.
Méthode de jugement sur liste noire : téléchargez des fichiers, le système indique que le téléchargement de fichiers au format xxx n'est pas autorisé.
Bypass : utilisez d'autres formats (php5, Phtml, php3) ou cas de fichier, et vous pouvez également ajouter des symboles d'interférence pour réaliser le contournement.
2.1.2 .htaccess (protocole pseudo-statique) - analyse de réécriture (disponible uniquement dans Apache et activant le module pseudo-statique)
Le téléchargement de fichiers .htaccess est une fonction qui utilise des fichiers .htaccess pour configurer le serveur Web pour implémenter jpg , png et d'autres suffixes sont utilisés comme processus d'analyse de fichiers PHP.
Les fichiers .htaccess (fichiers de configuration distribués) permettent d'apporter des modifications à la configuration par répertoire. Un fichier contenant une ou plusieurs directives de configuration est placé dans un répertoire de documents spécifique et les directives du fichier s'appliquent à ce répertoire. et tous ses sous-répertoires. .htaccess est un fichier de configuration du serveur Web. Vous pouvez utiliser le fichier .htaccess pour implémenter des configurations telles que la méthode d'analyse et la redirection des fichiers de définition dans le serveur Web.
Méthode de contournement : téléchargez d'abord le fichier 1.htaccess. 2. Téléchargez à nouveau l'image.
2.1.3 Contournement d'espace
Méthode de contournement : ajoutez un espace après le nom du suffixe du fichier dans le paquet de données pour réaliser le contournement.
2.1.4. Bypass
Méthode de contournement : similaire à la méthode de contournement d'espace, ajoutez un . après le nom du suffixe du fichier dans le paquet de données pour obtenir le contournement.
2.1.5::$data bypass
Il s'agit d'un protocole unique à Windows, si le nom de fichier + "::$DATA" est utilisé, les données après ::$DATA seront traitées comme. un flux de fichier en cours de traitement, le nom du suffixe ne sera pas détecté et le nom du fichier avant ::$DATA sera conservé. Son but n'est pas de vérifier le nom du suffixe.
2.1.6 Filtrage de boucle
Bypass : Le code remplace php dans la chaîne par rien.
Par exemple : a.pphphp deviendra ->a.
2.1.7 Liste blanche : efface le suffixe du format pouvant être téléchargé (plus sécurisé)
troncation %00, troncature 0x00 (basée sur le principe du adresse, tronquer les données derrière le fichier) 00 le contournement de la troncature ne peut contourner que la vérification frontale.
La principale raison de la troncature est la présence du caractère %00 Lorsque PHP
Méthode de contournement (troncation du chemin%00) :
Différents fichiers ont des formats d'en-tête de fichier spécifiques. Les développeurs détectent les types de fichiers en vérifiant l'en-tête des fichiers téléchargés, mais cette méthode de détection. peut également être contourné, à condition que l'en-tête de fichier correspondant soit ajouté à l'en-tête du fichier cheval de Troie, afin que la détection puisse être contournée sans affecter le fonctionnement normal du fichier cheval de Troie.
Les en-têtes de fichiers courants sont les suivants :
JPEG 0xFFD8FF
PNG0 x89504E470D0A1A0A
GIF 47 49 4638 39 61 (GIF89a)
Méthode de contournement :
GIF89a
?>
Insérez une phrase de cheval de Troie directement dans l'image et téléchargez-la. ——Utilisez le principe de l'inclusion de fichiers.
Utilisez la commande cmd pour combiner une image normale 1.jpg et un fichier a.txt contenant une phrase de cheval de Troie pour créer un nouveau fichier de cheval de Troie test.php.
Commande cmd : copiez 1.jpg/b+a.txt test.php.
Content-Type est utilisé pour définir le type de fichier réseau et l'encodage de la page Web, et est utilisé pour indiquer au destinataire du fichier sous quelle forme et encodage il lira le fichier. Différents fichiers correspondront à différents types de contenu. Par exemple, le type de contenu des fichiers jpg est image/jpeg et le type de contenu des fichiers php est application/octet-stream. Content-Type se trouve dans l'en-tête de demande du paquet de données. Les développeurs utiliseront le type Content-Type pour déterminer si le fichier est autorisé à être téléchargé.
Contournement : le type de type de contenu peut être falsifié en capturant le paquet, de sorte que le type de contenu du paquet de données puisse être modifié en capturant le paquet pour contourner le jugement du type de contenu.
MIME : vous pouvez deviner le nom du suffixe du fichier en jugeant le type et utiliser l'outil de capture de paquets pour modifier le type de contenu, par exemple en le remplaçant par l'un des quatre images/pjpeg, image/jpeg, image/. gif et image/png peuvent le contourner filtré.
Définition : Les conditions de concurrence font référence à plusieurs threads accédant au même code partagé, aux mêmes variables et aux mêmes fichiers en même temps sans opérations de verrouillage ou de synchronisation. . Etc., le résultat de l'opération dépend de l'ordre dans lequel les différents threads accèdent aux données. Téléchargez d'abord le fichier sur le serveur, et le serveur choisit d'enregistrer ou de supprimer l'image selon les règles. La vulnérabilité est que la légalité du fichier n'est pas vérifiée avant d'être enregistrée sur le serveur, bien que le fichier soit vérifié après l'enregistrement. la vulnérabilité de condition de concurrence critique, le fichier est transmis Téléchargez un cheval de Troie avec la fonction d'écriture de fichiers et accédez au cheval de Troie téléchargé avant de le supprimer pour écrire un nouveau cheval de Troie.
Contournement : après avoir téléchargé le fichier sur le serveur, nous continuerons à accéder au chemin du fichier. En raison de conditions concurrentes, l'objectif de téléchargement du Webshell sera atteint en envoyant des requêtes pour télécharger en continu un tel accès. générera un nouveau fichier de chevaux de Troie, puis enverra une autre demande pour accéder en permanence à ce fichier, ce qui générera un nouveau cheval de Troie si l'exploit de condition de concurrence réussit.
Contourner : en ajoutant le suffixe /., le serveur reconnaît le fichier comme un dossier pour atteindre l'objectif de téléchargement, comme -x.php/.
Vulnérabilité de la fonction de script. -cve
CVE-2017-12615
CVE-2015-5254
CVE-2019-2618
......
Il existe des tutoriels sur la façon d'exploiter ces vulnérabilités en ligne. .
Jugez rapidement la vulnérabilité d'analyse, /.php pour voir s'il y a du code tronqué, s'il y en a, il existe, sinon, il n'existe pas.
Nom de fichier normal : image/aa.jpg.
Contournement : image.asp/aa.jpg aa.jpg sera analysé comme asp.
Nom de fichier normal : image.jpg.
Bypass : image.asp;.jpg ou xxx.asp;xxx.jpg Ce fichier sera exécuté en asp.
asp peut être modifié en php. Si vous modifiez php, il peut être exécuté en php.
Pour contourner le WAF, il faut savoir quels paramètres peuvent être modifiés, tels que :
Méthodes de contournement courantes :
Utilisez la limite de détection WAF pour ajouter une grande quantité de données indésirables afin qu'elles ne puissent pas être mises en correspondance. Cela est similaire à une vulnérabilité de débordement. Généralement, une interférence. les données peuvent être ajoutées après les paramètres de téléchargement, n'oubliez pas d'ajouter ; entre les données inutiles et les paramètres, sinon le paquet de données signalera une erreur.
Utilisez les vulnérabilités de développement du programme pour remplacer, ajouter et supprimer des symboles dans les paramètres de téléchargement du paquet de données afin d'atteindre l'objectif de téléchargement. Tel que
Par exemple, x.jpg;.php, le point-virgule représente la fin d'une donnée.
Ajoutez un %00 (espace) après le nom du suffixe du fichier à tronquer, x.php%00.jpg.
Newline (similaire à n dans le programme) est similaire à la transmission de données en blocs, tels que :
Le paquet de données identifie en fait x.npnhnp.
sont équivalentes à la boucle récursive dans la fonction. Le principe d'écrire des paramètres plusieurs fois dans le paquet de données est très similaire aux données inutiles.
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!