Maison  >  Article  >  Périphériques technologiques  >  Une brève discussion sur les méthodes de téléchargement de fichiers pour obtenir des autorisations

Une brève discussion sur les méthodes de téléchargement de fichiers pour obtenir des autorisations

王林
王林avant
2023-04-09 09:11:031096parcourir

Vue d'ensemble

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.

Cause et préjudice de la vulnérabilité

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 :

1. Vérification locale (vérification frontale)

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.

2. Vérification et contournement du backend

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 Nom du suffixe

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) :

  • Changez test en test.php%00aaa, 1.php en 1.jpg afin que la fonction de vérification puisse être transmise.

Une brève discussion sur les méthodes de téléchargement de fichiers pour obtenir des autorisations

  • Test.php%00aaa %00 effectue l'encodage d'URL, sélectionnez %00 et sélectionnez la commande [Convertselection], sélectionnez la commande [URL] et sélectionnez la commande [URL-decode] pour l'encodage.

Une brève discussion sur les méthodes de téléchargement de fichiers pour obtenir des autorisations

3. Vérification du type de fichier

3.1 Détection de l'en-tête de fichier : informations sur le contenu de l'en-tête de fichier (telles que gif89a)

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 :

  • Changer les informations d'en-tête permet une tromperie, comme dans le fichier d'en-tête du Cheval de Troie L'ajout de l'en-tête du fichier image peut contourner la détection.

GIF89a

?>

  • Créez une image de cheval

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.

3.2 Détection du type de contenu

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é.

4. Contenu et autres

4.1 Sécurité logique : concurrence conditionnelle (équivalent à l'occupation du système)

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.

4.2 Dénomination du répertoire

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/.

5 Autres vulnérabilités

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. .

6. Vulnérabilité d'analyse du middleware

6.1 Vulnérabilité d'analyse IIS 6.0+

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.

6.1.1 Exécuté sous forme de dossier

Nom de fichier normal : image/aa.jpg.

Contournement : image.asp/aa.jpg aa.jpg sera analysé comme asp.

6.1.2 Exécuter en tant que fichier

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.

7. Contournement du WAF

Pour contourner le WAF, il faut savoir quels paramètres peuvent être modifiés, tels que :

  • Content-Disposition : Généralement modifiable.
  • name : valeur du paramètre du formulaire, non modifiable.
  • filename : nom du fichier, peut être modifié.
  • Content-Type (le propre type du fichier) : fichier MIME, modifiez-le selon les besoins.
  • Le cœur du contournement waf est de modifier constamment le test après le nom du paramètre qui peut être modifié pour essayer de contourner.

Méthodes de contournement courantes :

7.1 Débordement de données (remplissage de données indésirables)

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.

7.2 Mutation de symboles ('";)

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.

7.3 Troncature des données (%00 ; nouvelle ligne)

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 :

  • x
  • p
  • h
  • p

Le paquet de données identifie en fait x.npnhnp.

7.4 Les données répétées

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.

8. Défense

  • Déployez des produits de sécurité tels que Pagoda et Waf.
  • Vérifiez strictement le contenu téléchargé plusieurs fois.
  • Effectuez une vérification de l'intégrité du contenu du fichier.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer