File Inclusion â Impossible
Tijd om dit lek voor eens en altijd dicht te metselen.
1. Predict (Voorspel)â
De ontwikkelaar stapt af van het filteren van slechte invoer (Blacklisting) en kiest voor Whitelisting:
$file = $_GET['page'];
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" ) {
echo "ERROR: File not found!";
exit;
}
Vraag: Kun je hier nog op een of andere manier voorbij?
Antwoord
Nee. Het script vergelijkt de invoer letterlijk met drie exacte bestandsnamen. Alles wat ook maar ÊÊn teken afwijkt â zelfs include.php%00 of file:///file1.php â valt genadeloos in de if-controle en levert de foutmelding op. Geen enkele omzeiltechniek kan een strakke, letterlijke string-vergelijking verslaan.
2. Run & Investigateâ
Start het lab en probeer alle eerder geleerde aanvallen.
Probeer ../../etc/passwd, ....//etc/passwd en file:///etc/passwd. Observeer dat alle varianten worden afgewezen.
3. â Wat moest je zien?â
- Elke aanvalspayload levert de melding "ERROR: File not found." op.
- Alleen de exacte bestandsnamen
include.php,file1.phpenfile2.phpwerken. - Geen enkel omzeil-kunstje (geneste paden, protocols, null-bytes) slaagt.
Lukt het je toch om bestanden op te vragen? Controleer of het security level correct op impossible staat.
LFI is dodelijk: Local File Inclusion laat hackers gevoelige bestanden, back-ups of configuraties (met databasewachtwoorden) uitlezen van de harde schijf.
Filters omzeilen (Filter Evasion): Ontwikkelaars vergeten dat filters zichzelf kunnen omzeilen als invoer genest is (zoals ....//).
Whitelisting is koning: Sta uitsluitend toe wat je verwacht â filter geen verboden tekens, maar specificeer exact de toegestane waarden.