Méthode de contournement de la vulnérabilité de téléchargement de fichiers

Table des matières

1. Principe de téléchargement de fichiers

2. Méthode de détection de téléchargement de fichiers

3. Contournement de la détection du backend

3.1 Contournement de détection de type

3.2 Contournement de la détection d'en-tête de fichier

3.3 Contournement de la détection du contenu des fichiers

3.4 Contournement de la détection de la liste noire

3.4.1 Il n'y a pas de bypass de filtrage pour le suffixe .htaccess

3.5 Contournement de la détection de la liste blanche

3.5.1 Troncature

3.5.2 Contenir les vulnérabilités

3.6 Contournement de la vulnérabilité d'analyse

3.6.1 Vulnérabilités d'analyse Apache

3.6.2 Vulnérabilités d'analyse IIS

3.6.3 Vulnérabilités d'analyse Nginx

3.7 Contournement de course conditionnel

Contournement de détection 3.7waf

avant-propos

C'est ma propre combinaison avec le champ de tir. J'ai essentiellement résumé toutes les situations que j'ai rencontrées lors du téléchargement de fichiers. J'ai également résumé diverses méthodes de contournement. J'espère pouvoir vous aider. J'ai vraiment mis tout mon cœur à le résumer. Cela m'a pris un après-midi .temps.

1. Principe de téléchargement de fichiers

Certains sites Web proposent des services de téléchargement. Par exemple, le paramètre de l'avatar consiste à télécharger des images, à télécharger des documents, à télécharger des fichiers compressés, etc. En règle générale, les sites Web espèrent télécharger le format d'image ou le format texte. Si la méthode de détection n'est pas complète, l'attaquant téléchargera directement le code de script malveillant et exécutera le code de script, ou pourra coopérer avec d'autres vulnérabilités pour télécharger des fichiers de code, ce qui entraînera le serveur a été démonté. Parlons de la détection et du contournement des téléchargements de fichiers.

2. Méthode de détection de téléchargement de fichiers

La détection de téléchargement de fichiers est divisée en détection frontale et détection principale. Le contournement de la détection frontale est très facile à contourner. La détection frontale signifie qu'il y a un code de détection sur la page Web. Il y aura une détection avant que vous ne cliquiez pour télécharger. Nous avons seulement besoin de changer le fichier cheval de Troie en un nom d'image normal, puis capturez le paquet et modifiez-le. Nous devons préciser qu'il s'agit du contournement de la détection du backend

3. Contournement de la détection du backend

Il existe de nombreuses méthodes de détection du backend, notamment la détection du type de fichier, la détection du contenu du fichier, la détection de la liste blanche et la détection de la liste noire. Examinons-les une par une.

3.1 Contournement de détection de type

Il y a un champ appelé type de contenu dans le paquet de requête, qui enverra l'enregistrement du type de fichier au serveur, et le serveur jugera si le téléchargement est une image ou un document basé sur celle-ci. Ici, nous examinons le deuxième niveau de upload_labs dans le champ de tir. Nous avons d'abord téléchargé notre fichier de code, il vous indiquera que le type de fichier est incorrect, téléchargez-le à nouveau. À ce stade, nous pouvons voir Content-Type : application/octet-stream dans le package de requête, ce qui indique que ce que vous avez téléchargé est un fichier de script.

 

 Si nous définissons le champ comme Content-Type : image/jpeg, nous pouvons voir que le téléchargement est réussi. Cliquez avec le bouton droit sur l'image pour copier l'adresse de l'image pour voir que le code est exécuté avec succès. La modification de la valeur du champ en capturant des paquets peut contourner facilement la détection de type.

3.2 Contournement de la détection d'en-tête de fichier

Le serveur fera simplement correspondre l'en-tête du fichier pour voir si vous téléchargez le fichier requis. Nous pouvons le contourner en ajoutant un en-tête de fichier légal avant le fichier téléchargé, comme le treizième niveau de upload_labs

3.3 Contournement de la détection du contenu des fichiers

Le serveur n'effectue plus une simple détection de correspondance d'en-tête de fichier pour les fichiers téléchargés, mais détecte si le fichier est une image en appelant des fonctions telles que getimagesize/imagecreatefromgif/imagecreatefrompng.

3.4 Contournement de la détection de la liste noire

La détection de liste noire signifie que j'ai une liste, tant que le suffixe est dans cette liste, il ne peut pas être téléchargé. Si la liste des listes noires n'est pas très complète ou si le filtrage n'est pas strict, cela conduira à un contournement. Par exemple, nous pouvons ignorer les points, les espaces, les majuscules ou d'autres suffixes. Parfois, le code n'effectue qu'un seul filtrage, et il n'y a pas de filtrages multiples. Il peut être contourné par des noms qui se chevauchent. Le dixième niveau de upload_labs consiste à contourner les noms de suffixe qui se chevauchent

 

 ( Le troisième niveau de upload_labs 1.php1 et d'autres suffixes sont contournés, le cinquième niveau de upload_labs est contourné par cas, le sixième niveau de upload_labs est contourné par des espaces, le septième niveau de upload_labs est contourné (similaire), le huitième niveau de upload_labs est dans le nom du suffixe de fichier Add :: $$DATA à contourner mais doit être Windows doit être php., upload_labs neuvième niveau a.php. , vous pouvez l'essayer vous-même)

3.4.1 Il n'y a pas de bypass de filtrage pour le suffixe .htaccess

Parlez de ce suffixe séparément dans la détection de la liste noire. Vous pouvez voir que le suffixe .htaccess n'est pas un suffixe de fichier de script dangereux. Vous devez faire attention à ce à quoi vous devez faire attention lorsque vous utilisez cette méthode. Il est destiné à apache et le module mod_rewrite est activé. Autoriser tout remplacer. La raison en est que nous utilisons généralement le module de réécriture d'Apache pour réécrire l'URL, et les règles de réécriture seront écrites dans le fichier .htaccess. Lorsque AllowOverride est défini sur None, les fichiers .htaccess sont complètement ignorés. Lorsque cette directive est définie sur All, toutes les directives ayant la portée de ".htaccess" sont autorisées à apparaître dans le fichier .htaccess. Si vous êtes intéressé, vous pouvez le Baidu vous-même. Voir le quatrième niveau de upload_labs pour des cas spécifiques

La première étape consiste à télécharger le fichier .htaccess. Le contenu du fichier est

AddType application/x-httpd-php .png 

La deuxième étape consiste à télécharger le fichier 1.png, le contenu du fichier est

<?php
Phpinfo()
?>

 La troisième étape consiste à accéder à l'adresse de l'image et le code php est analysé.

 En plus des méthodes ci-dessus, il existe d'autres méthodes,

1. Si le fichier .htaccess est téléchargé et que le contenu du fichier est

AddHandler php5-script php

Le nom du fichier de cheval de Troie téléchargé est 1.php.png. Accédez à l'adresse de l'image et le code à l'intérieur sera analysé avec succès

2. Si le fichier .htaccess est téléchargé et que le contenu du fichier est

<FilesMatch “ajest”>
SetHandler application/x-httpd-php
<FilesMatch>

Le nom du fichier de cheval de Troie téléchargé est ajest.png. Accédez à l'adresse de l'image et le code à l'intérieur sera analysé avec succès

3.5 Contournement de la détection de la liste blanche

3.5.1 Troncature

La détection de la liste blanche est plus difficile que la détection de la liste noire, car elle vous permet de télécharger des suffixes de noms de fichiers, et vous ne pouvez pas télécharger s'ils ne correspondent pas. Pour le moment, nous avons besoin d'autres méthodes pour contourner. Contourner en tronquant avec 00.

Lorsque nous téléchargeons une image dans upload_labs niveau 11, le nom de l'image sera renommé et le chemin de téléchargement du fichier peut être vu dans le package de requête. Il peut être tronqué par 00 afin que lorsque l'image est téléchargée, elle soit conservée en fonction du nom de fichier que nous avons défini

 ​​​​​​

3.5.2 Contenir les vulnérabilités

Nous téléchargeons le fichier de script et espérons qu'il pourra éventuellement être analysé, mais comme le téléchargement de fichier adopte la vérification de la liste blanche, nous ne pouvons télécharger que le format d'image, bien que nous puissions télécharger une image de cheval de Troie, mais le code ne sera pas exécuté et ne fera que être traité comme une image , à ce moment, s'il y a un code contenant une vulnérabilité, il sera analysé

Je crée un nouveau fichier int.php dans le répertoire de mon site Web local, le contenu est le suivant :

<?php
$path=$_GET['file'];
include $path;

?>#int.php

Créez ensuite un nouveau fichier 1.php avec le contenu suivant : Afin de simuler le téléchargement du fichier, remplacez 1.php par 1.png, ce qui équivaut à télécharger une image Cheval de Troie

<?php phpinfo();?>

Rendez-vous à l'adresse suivante :

http://127.0.0.1/haha/int.php?file=1.png

3.6 Contournement de la vulnérabilité d'analyse

Vulnérabilités d'analyse telles que les fuites d'analyse apache, les vulnérabilités d'analyse IIs, les vulnérabilités d'analyse nginx

3.6.1 Vulnérabilités d'analyse Apache

La vulnérabilité d'analyse d'apache est causée par le personnel d'exploitation et de maintenance qui a ajouté un gestionnaire pour permettre à Apache d'analyser PHP lors de la configuration du serveur. .

La correspondance normale est que le dernier suffixe d'un fichier est php/php1..., et le fichier est transmis au processeur PHP (php_module) pour traitement. Après traitement, le résultat est renvoyé à Apache, puis Apache l'envoie à le navigateur.

Toute correspondance d'emplacement est, par exemple : 22.php.png.mp3. Ce fichier sera considéré comme un fichier MP3 dans la plupart des systèmes d'exploitation. Mais ce n'est peut-être pas le cas dans Apache. Il reconnaîtra de droite à gauche. S'il rencontre un suffixe qu'il ne reconnaît pas, il dira qu'il ne sait pas quelque chose et continuera à reconnaître le suffixe suivant. Lorsqu'il rencontre php, il exécutera les étapes ci-dessus. Si vous rencontrez un suffixe reconnu, vous ne le reconnaîtrez pas plus tard. Ainsi, les quatre niveaux de téléchargement peuvent également utiliser 1.php.xx.yy.zz pour passer

3.6.2 Vulnérabilités d'analyse IIS

Vulnérabilité d'analyse IIS5.x/6.0

Il existe deux vulnérabilités d'analyse dans cette version, à savoir l'analyse de répertoire et l'analyse de fichier. La plupart d'entre elles sont Windows Server 2003, le site Web est relativement ancien et la déclaration de développement est généralement asp ; cette vulnérabilité d'analyse ne peut analyser que les fichiers asp, pas les fichiers aspx

1. Analyse du répertoire

Si le nom du répertoire se termine par la chaîne " .asp , .asa , .cer , .cdx ", tous les fichiers de ce répertoire seront analysés selon asp. Par exemple : " test.asp/1.jpg " analysera le code asp.

2. Analyse du dossier

Tant que le nom du fichier contient " .asp; , .asa; , .cer; , .cdx; il sera d'abord analysé selon asp. Par exemple : " 1.asp;.jpg "

Vulnérabilité d'analyse IIS7.0/IIS7.5

Pour tout nom de fichier, tant que la chaîne "/any file name.php" est ajoutée après l'URL, elle sera analysée à la manière de php. Par exemple,
j'ai téléchargé une image cheval de Troie 22.png et j'ai directement accédé au url comme www.haha.com/upload/22.png L'image peut être visualisée mais le code ne peut pas être analysé. Pour le moment, nous n'avons qu'à ajouter www.haha.com/upload/22.png/33.php après l'url pour exécuter le code.

3.6.3 Vulnérabilités d'analyse Nginx

nginx version 0.8.41~1.4.3, 1.5 <= 1.5.7 numéro CVE-2013-4547. Le principe de cette vulnérabilité est que les caractères illégaux , les espaces et les caractères de coupure (\0) causeront de la confusion dans la machine à états finis lorsque Nginx analyse les URI. Le mal est de permettre aux attaquants de contourner la restriction de nom de suffixe via un espace non codé

Téléchargez un fichier nommé "test.jpg" Le dernier caractère est un espace, le contenu du fichier est

 <?php phpinfo() ?>

C'est pourquoi nous signalerons une erreur lorsque nous accéderons à ce fichier, car le navigateur encode automatiquement les espaces en %20, et le fichier "test.jpg%20" n'existe pas sur le serveur. Ajoutez AAphp après le nom du fichier en capturant le paquet, changez l'espace après jpg en 20 (code ASCII du symbole d'espace) en hexadécimal, changez le premier A en 00 (caractère de coupure \0) et changez le second A en 2e ( le code ASCII de "."), ceci a pour but d'empêcher le navigateur d'encoder les espaces et les caractères de coupure. Après le changement, le nom du fichier que nous envoyons est "test.jpg \0.php" afin que Nginx pense que l'extension du fichier est php et l'analyse.

3.7 Contournement de course conditionnel

Rendu secondaire, par exemple, un site Web vous oblige à télécharger une image, et après le téléchargement, il effectuera des opérations secondaires sur l'image, telles que le recadrage de la taille, etc. Ensuite, il peut y avoir une faille logique dans cela, qui peut utiliser la concurrence conditionnelle pour télécharger des fichiers de cheval de Troie

Le dix-septième niveau de upload_labs est lorsque le fichier a été téléchargé sur le serveur, il est vérifié avant que le serveur n'effectue la deuxième opération, afin que nous puissions continuer à envoyer des paquets, accéder en permanence à l'adresse avant la deuxième opération de l'image et utiliser concurrence conditionnelle, car en cours d'ouverture Le fichier ne peut plus être renommé ou supprimé. L'opération spécifique est la suivante

La première étape consiste à créer un fichier 2.php. Le contenu du fichier est le suivant. Lorsque le code est exécuté, un fichier shell.php sera créé dans le répertoire. Le contenu du fichier est <?php @eval ($_POST["test"]) ?> . De cette façon, nous pouvons clairement voir si le code du fichier 2.php est exécuté avec succès après un certain temps.

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>

La deuxième étape consiste à télécharger 2.php pour capturer son package de requête et à le placer dans le module intrus pour télécharger 2.php en continu. Définissez le nombre après le champ user_agent, afin qu'il n'ait aucun effet sur le contenu du paquet de requête et qu'il puisse également envoyer des paquets à plusieurs reprises

 La troisième étape consiste à définir les charges utiles, suivez simplement les paramètres ci-dessous.

 La quatrième étape   consiste à cliquer pour lancer l'attaque, et vous pouvez voir que l'attaque a commencé

 Commencez à rafraîchir la page d'adresse 2.phpde en continu. Mon site Web est construit localement. Après une actualisation pendant un certain temps, vous pouvez voir que shell.php est généré avec succès, puis vous pouvez utiliser Ant Sword pour vous connecter.

Contournement de détection 3.7waf

Content_Disposition : peut généralement être modifié

Nom : valeur du formulaire, non modifiable

Nom de fichier : nom de fichier, peut être modifié

Type de contenu : modifiez le cas échéant.

1. Débordement de données : utilise beaucoup de données inutiles, ce qui peut contourner le chien de sécurité

Par exemple, vous pouvez écrire beaucoup de données inutiles devant le nom de fichier,

2. Variation de symbole , vous pouvez basculer entre guillemets simples et doubles, les guillemets simples et doubles ne sont pas appariés, les points-virgules, etc.

3. Troncation des données - anti-correspondance (; %00 newline/)

4. Disposition de contenu multiple

Dans l'environnement IIS, s'il y a plusieurs Content-Dispositions lors du téléchargement d'un fichier, IIS prendra la valeur dans le premier Content-Disposition comme paramètre de réception, et si waf ne prend que le dernier, il sera contourné, Win2k8 + IIS7 .0 + PHP

5. Entrez au nom du fichier

6. Supprimez le champ Content-Type dans l'entité
La première consiste à supprimer toute la ligne de contenu. La deuxième façon est de supprimer ontent-Type: image/jpeg et de ne laisser que c, ajoutez simplement . Le troisième supprime les espaces dans le champ Contenu-Disposition

7. Pour plusieurs champs de nom de fichier , waf ne peut vérifier le champ de nom de fichier qu'une seule fois.

8. Changer de poste pour obtenir  Certaines règles WAF sont : si le paquet de données est de type POST, vérifiez le contenu du paquet de données.
Dans ce cas, vous pouvez télécharger un paquet de données de type POST, capturer le paquet et remplacer POST par GET.

Je suppose que tu aimes

Origine blog.csdn.net/dreamthe/article/details/121603278
conseillé
Classement