☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
# Méthodologie générale de téléchargement de fichiers
1. Essayez de télécharger un fichier avec une **double extension** \(ex: _file.png.php_ ou _file.png.php5_\).
* Extensions PHP: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, ._phps_, ._pht_, _.phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc_
* Extensions ASP: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .asp, .cer, .shtml_
2. Essayez de mettre en majuscule une ou plusieurs lettres de l'extension. Par exemple: _.pHp, .pHP5, .PhAr ..._
3. Essayez de télécharger une **double (ou plus) extension** \(utile pour contourner les vérifications mal configurées qui testent si une extension spécifique est simplement présente\):
1. _file.png.php_
2. _file.png.txt.php_
4. Essayez de télécharger une **double extension inversée** \(utile pour exploiter les erreurs de configuration d'Apache où tout ce qui a une extension _.php_, mais **n'ayant pas nécessairement une extension .php** exécutera du code\):
* _ex: file.php.png_
5. Double extension avec un **caractère nul**:
1. _ex: file.php%00.png_
6. **Ajoutez quelques caractères spéciaux à la fin** de l'extension_: %00, %20, \(plusieurs points\)...._
1. _file.php%00_
2. _file.php%20_
3. _file.php...... --> Sous Windows, lorsque qu'un fichier est créé avec des points à la fin, ils seront supprimés \(vous pouvez donc contourner les filtres qui vérifient l'extension .php\)_
4. _file.php/_
5. _file.php.\_
7. Contournez les vérifications du type de contenu en définissant la **valeur** de l'en-tête **Content-Type** sur: _image/png_, _text/plain, application/octet-stream_
8. Contournez 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 introduisez le shell dans les **métadonnées**: `exiftool -Comment="*?”` dans son nom. \(Windows\)
6. Téléchargez 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.
Essayez également de **télécharger un exécutable** \(.exe\) ou un **.html** \(moins suspect\) qui **exécutera du code** lorsqu'il sera ouvert accidentellement par la victime.
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files" %}
Si vous essayez de télécharger des fichiers sur un serveur **PHP**, [jetez un coup d'œil à l'astuce du fichier **.htaccess** pour exécuter du code](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).
Si vous essayez de télécharger des fichiers sur un serveur **ASP**, [jetez un coup d'œil à l'astuce du fichier **.config** pour exécuter du code](../pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
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 sont uniquement utilisés pour **importer des fichiers**, donc, à un moment donné, quelqu'un aurait pu autoriser **cette extension à être exécutée**.
**Vérifiez de nombreuses vulnérabilités possibles de téléchargement de fichiers avec le plugin BurpSuit** [**https://github.com/modzero/mod0BurpUploadScanner**](https://github.com/modzero/mod0BurpUploadScanner) **ou utilisez une application console qui trouve quels fichiers peuvent être téléchargés et essaie différentes astuces pour exécuter du code :** [**https://github.com/almandin/fuxploider**](https://github.com/almandin/fuxploider)
## **Astuce de téléchargement de fichier/SSRF avec wget**
Dans certaines occasions, 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 se trouve 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"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
```
```bash
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
```
Notez que **une autre option** à laquelle vous pourriez penser pour contourner cette vérification est de faire en sorte que le serveur HTTP redirige 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**.
# De l'envoi de fichiers à d'autres vulnérabilités
* Définissez le **nom de fichier** sur `../../../tmp/lol.png` et essayez d'obtenir une **traversée de chemin**
* Définissez le **nom de fichier** sur `sleep(10)-- -.jpg` et vous pourriez réussir une **injection SQL**
* Définissez le **nom de fichier** sur `