Autor Zpráva
Louka
Profil
Zdravíčko,

vím, že tohle téma se zde probíralo mnohokrát, ale mě by to zajímalo z druhé stránky.

Zajímalo by mě ne jak se bránit (to vím), ale jak jde prakticky použít injekce? Nějaký jednoduchý a všeříkající příklad a vysvětlení (praktické) :) ...? Teoreticky je mi to jasné - záludný řetězec na vstupu, vykonání vlastního skriptu, atd. atd...

Díky.
Joker
Profil
Louka:
jak jde prakticky použít injekce?
Příklady jsou často uváděné ve vláknech, kde v tom tazatel udělá chybu, například tady nebo tady
Louka
Profil
Joker:
Díky.

A PHP? Musí se využít jen špatně navrženého include() nebo to lze i jinak?
Příkad:

<?php 
include($_GET['page']) // jasné, stačí napsat adresu skriptu
include("/skripty/".$_GET['page']); // co tady? jak bych spustil svůj skript na jiném serveru?
?>


Jiné možnosti?
Taps
Profil
Louka:
můžeš si prostudovat třeba http://www.soom.cz/index.php?name=articles/show&aid=365
Louka
Profil
Díky, Tapsi :)
Louka
Profil
OK chápu to správně, že pokud web nepoužívá include() nebo podobné funkce, je spuštění cizího kódu v podstatě nemožné?
Joker
Profil
Louka:
pokud web nepoužívá include() nebo podobné funkce, je spuštění cizího kódu v podstatě nemožné?
Tak vždycky je možné udělat něco jako:
eval($_POST["kod"]);
…ale to málokdo je takový blázen, aby tohle dělal.

I když je teoreticky možné natahovat třeba PHP kód z databáze a potom ho provádět, tam by se něco podstrčit dalo.
Dál bych to neformuloval jako že použití include() je nějak nebezpečné, rizikové místo prostě vzniká tam, kde skript spouští nějaký jiný kód, přičemž podobu toho kódu může uživatel ovlivnit.
Louka
Profil
Joker:
Ano, díky za upřesnění. Prostě díra vzniká pouze tam, kde je možná variabilita vykonávaného kódu. To zní logicky.

A co jde provést, když mám formulář a nepracuji s DB (když s ní pracuji, je mi to jasné - když se neescapuje, může se nahradit příkaz něčím jiným a pá pá databáze)?

<form method="get" action="#">
<input type="text" name="x">
<input type="submit">
</form>

<?php echo $_GET['x']; ?>


Zde snad není možnost, jak něco udělat ne? Nebo kdybych tam poslal třeba:
"bla"; unlink("index.php");
, tak se vypíše bla a smaže se index.php (pakliže se nepoužívá)?
Joker
Profil
Louka:
Zde snad není možnost, jak něco udělat ne?
Asi ne, echo neprovede PHP kód.

V uvedeném případě spíš hrozí XSS (Cross-site scripting) a podobné útoky zaměřující se na stranu klienta, například kdybych do políčka pro text zadal:
<script src="example.com/zly_skript.js"></script>

Krátce řečeno, vždycky jde o to nevěřit vstupům od uživatele. U všeho co zadává uživatel (včetně třeba skrytých polí na formuláři) se má předpokládat, že v tom může být nekorektní hodnota (a nemusí jít hned o útok, například když se uživatel se jmenuje O'Reilly, nebo „Robert'); drop table students --“ :-) )
Louka
Profil
Joker:
S tím XSS jsem se už setkal (jako při zkoumání), jen mi nejde do hlavy co zmůže útočník pouze s JS? Nemůže zapisovat do souborů ani je mazat, přistupovat do databáze nebo volat externí PHP soubory ne?

Ten vtip jsem dneska už při hledání informací četl - nemá chybu :D.
Alphard
Profil
Louka:
Co může dělat "jen" s JS? Např. ukrást cookies a tím i účet admina.
Louka
Profil
Alphard:
Myslíš za situace kdy admin je přihlášený, že?

Tohle vlákno jsem založil proto, že o tom vím málo a chci se dozvědět novinky. Nemohu si o tom s vámi podiskutovat, takže omluvte mé někdy asi zcestné dotazy - jen si dělám jasno :).
zatomik
Profil
s tim echem se dá dělat spousta věcí. Jednoduše můžeš napsat jakýkoliv kód na stránku. jelikož máš možnost tam vložit JS, máš přístup k celému DOM a můžeš jednotlivé části stránky mazat/editovat/vytvářet. Neni například problém přepsat login formulář tak, aby vypadal stejně jako předtím, akorát odeslal přihlašovací údaje na tvůj server a při vhodném redirectu uživatel ani nic nepoznal. Takové útoky jsou myslím ještě horší, když admin ani uživatel nic neví.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: