WEB : LFI, RFI & Exploitation

Alex GARRIDO - @Zeecka_

WHOAMI

Alex GARRIDO - Zeecka

Définitions

Local File Inclusion (et Remote File Inclusion) :

Vulnérabilité permettant l’inclusion de fichier local (ou distant). La vulnérabilité peut conduire à l’exécution de code client (XSS) ou serveur (RCE), au DOS, ou encore au vol de données. La vulnérabilité existe sur différents services, et sur n’importe quel langage de programmation.

Exemple - LFI

LFI - Fichiers intéressants

  • /etc/passwd
  • /etc/shadow
  • /etc/hosts
  • ~/.bash_history
  • ~/.ssh/id_rsa
  • /proc/self/cmdline
  • Fichiers de logs
  • Fichiers de backup
  • ...

Voir PayloadAllTheThings ou le blog de Sushant747

Exemple - RFI

PHP : LFI ou RFI ?

Path Traversal

Technique de navigation utilisant les liens symboliques pour accéder à du contenu normalement inaccessible.

Exploitation normale

https://site.fr/?page=../../../etc/passwd

Path Traversal - Filtres

URL Encode

https://site.fr/?page=%2e%2e%2fetc%2fpasswd

Double Encode

https://site.fr/?page=%252e%252e%252fetc%252fpasswd

Path Traversal - Null Bytes

 

https://site.fr/?page=../../../etc/passwd%00

( < PHP 5.3.4 )

Path Traversal - Path Truncation

 

https://site.fr/?page=../../../etc/passwd/./././[4096 plus tard]/.

( < PHP 5.3 )

LFI - Wrapper : Filter

(pas de préfixe, PHP >= 5.0)

RFI - Wrapper

(pas de préfixe, PHP >= 5.3, dépendances...)

PHP

BASH

LFI - Wrapper : Archives

(pas de préfixe, PHP >= 5.3, dépendances... )

LFI - Wrapper : Archives - Bypass

LFI - Exploitation /tmp

  • PHP accepte l'upload de fichier sur n'importe quel page.
  • Le fichier est placé dans /tmp/ puis est supprimé à la fin de l'exécution du script
  • Le nom du fichier est sous la forme:            
    • php[a-zA-Z0-9]{6} (linux)
    • php[a-zA-Z0-9]{4}.tmp (windows)

LFI - Exploitation /tmp

selfinclusion.php :

URL :

LFI - Exploitation /tmp

LFI - Exploitation /tmp

"... supprimé à la fin de l'exécution du script"

+

Segmentation Fault (ou infinite loop)

=

Fichier non supprimé (ou tardivement)

Race Condition

LFI - Exploitation /tmp

  • Uploader un maximum de fois son webshell vers l'URL de self inclusion.
  • Bruteforcer la LFI sur php[a-zA-Z0-9]{6} pour tomber sur un des webshells uploadés :)

Time to script...

Phar : Désérialisation

Phar : Désérialisation

TL;DR: On peut instancier un objet / désérialiser un objet d'une classe déjà présente sur l'application, à condition d'avoir une LFI et un formulaire upload pour envoyer l'archive phar malveillante.

Dans le pire des cas, la vulnérabilité peut mener à une RCE ou du ROP PHP.

Phar : Désérialisation

Phar : Désérialisation

... pas d'Exécution :(

Phar : Désérialisation

Phar : Désérialisation

Phar : Désérialisation

Phar : Désérialisation

Phar : Désérialisation

Phar : Désérialisation

Ressources

Ressources

Ressources

Outils

Lien des slides

Web : LFI, RFI & Exploitation

By Zeecka

Web : LFI, RFI & Exploitation

  • 2,776