Portál AbcLinuxu, 2. května 2025 15:40

Nástroje: Začni sledovat (4) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
kouby avatar 2.9.2009 22:38 kouby | skóre: 27 | blog: init | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

V php se moc nevyznám, ale kdyby uživatel poslal soubor s názvem ".." tak dostane zápisové právo do nadřazeného adresáře?

That's thirty minutes away. I'll be there in ten.
Aleš Janda avatar 3.9.2009 23:28 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
PHP se v tomto ohledu nechová nijak zvláštně a zápis do souboru „..“ skončí chybou, neboť už existuje takový adresář :-)
2.9.2009 22:44 blackvladimir | skóre: 4
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
PHP není moje parketa ale neskousne phpkové fopen i backslash? Aspoň u Windows portu by mě to moc nepřekvapilo.
vlastikroot avatar 2.9.2009 22:48 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Pise ze jina lomitka neberem v uvahu. Nevidim tam zadnou chybu (krome nepouziti basename() pro ziskani jmena), stydim se.
We will destroys the Christian's legion ... and the cross, will be inverted
Salamek avatar 2.9.2009 22:54 Salamek | skóre: 22 | blog: salamovo
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
Pro detekci formátu souboru bych ještě použil mime_content_type
Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
Přemek Vyhnal avatar 2.9.2009 23:01 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

nechci to zkoušet, ale nešlo by $_GET['nazev_souboru'] dát třeba "osklivyskript.php?neco=jpg"?

NO RAPTORS!
Přemek Vyhnal avatar 3.9.2009 00:02 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

ne, samozřejmě že nešlo ;)

NO RAPTORS!
2.9.2009 23:33 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
Ten skript pustí i takovou věc, jako je už existující soubor. V takovém případě nemá cenu se zabývat dalšími případnými problémy, tohle je nepřípustné samo o sobě.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
Aleš Janda avatar 2.9.2009 23:52 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
To je pravda, to by byla chyba, ale mám na mysli spíše nějakou chybu, při které by se dal napadnout sám server. Příspěvek jsem upravil.
AraxoN avatar 2.9.2009 23:34 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

Ja tam vidím len to, že môže prepísať iné súbory, ktoré tam už sú, ale to asi nebude tá chyba, lebo to by bolo príliš jednoduché. :-)

2.9.2009 23:53 dark
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

Zkusím vylučovací metodu:

1) Pokud to zde je napsané, asi na tom něco bude, tedy kód není čistý

2) V podmínce je, že jsou v daném adresáři i skripty (což je na pováženou, ale budiž), takže spuštění skriptu v tom adresáři je podmínka nebezpečnosti

3) V php nedělám, ale kód nepustí soubor s příponou .php a lomítkem. Nejedná se tedy o bezpečnosti typu přepsání souboru mimo tento adresář (takže riziko se bude odehrávat nejspíš v daném adresáři)

4) Kód neošetřuje .htaccess, je riziko spojené s tímto?

Aleš Janda avatar 3.9.2009 00:04 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

Ke čtvrtému bodu:
Wow, soubor .htaccess by to opravdu vzalo a pomocí něj by se např. daly definovat jako PHP skripty i soubory s jinou příponou, které by aplikace pustila. Takže ano, gratuluji, na jednu chybu jste přišel :-)

Nicméně tuto chybu jsem neměl na mysli, hledejte dál ;-)

Jardík avatar 3.9.2009 02:32 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
.htaccess může být zakázán na serveru ...
Věřím v jednoho Boha.
Josef Kufner avatar 3.9.2009 09:53 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Ale prakticky nikdy není. Navíc než ".htaccess" by to chtělo zakázat ".ht*" (kvůli .htpasswd) a nejspíš i všecko začínající tečkou.

ps: je to celkem lehké, ale pěkně schované ;-)
Hello world ! Segmentation fault (core dumped)
Salamek avatar 3.9.2009 14:04 Salamek | skóre: 22 | blog: salamovo
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
je to celkem pěkný bug :-)
Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
xkucf03 avatar 3.9.2009 22:49 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

Soubor s hesly by měl být někde úplně mimo (třeba v /etc).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Josef Kufner avatar 3.9.2009 23:05 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Ehm... asi tak stejně jako by měla být v /etc konfigurace webserveru...
Hello world ! Segmentation fault (core dumped)
xkucf03 avatar 3.9.2009 23:17 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

Neberu to jako webserver, ale jako webovou aplikaci – tu si můžeš klidně nainstalovat jako baliček systému a je celkem normální, aby měla svůj adresář v /etc, jako všechny ostatní aplikace.

Pokud je to na webhostingu nebo je potřeba tu aplikaci provozovat ve víc instancích, je spráné, abys měl strukturu třeba:

/var/www/virtual/nějakáDoména/htdocs/ ← tohle zprístupní apache přes HTTP
/var/www/virtual/nějakáDoména/etc/ ← tady budou soubory s hesly
/var/www/virtual/nějakáDoména/dalšíAdresář/ ← třeba zálohy nebo nějaké dočasné soubory

Každopádně bych dal soubor s hesly mimo adresář, který je zpřístupněný přes HTTP a nespolíhal bych se jen na ochranu pomocí .htaccess nebo dokonce ochranu pomocí aplikace.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Josef Kufner avatar 4.9.2009 00:27 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Pokud děláš nějakou aplikaci o alespoň pár tisících řádcích, tak možná. Ale pokud je to něco malého, nebo jen pár adresářů s omezeným přístupem, tak se prostě udělá .htaccess, vedle se plácne .htpasswd a těch pár lidí pro které to je, jsou spokojení. K vidění to je celkem často právě vedle nějakých aplikací, kde je prostě potřeba si něco položit vedle, mít to zabezpečené, ale přitom se s tím moc nepatlat.
Hello world ! Segmentation fault (core dumped)
AraxoN avatar 3.9.2009 01:14 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

Tak to asi mám... alebo som objavil ešte nejakú inú chybu. :-D

Ak $_GET['nazev_souboru'] obsahuje na konci znak \0 (nulový bajt), tak substr() vráti "php\0" a nie ".php", lebo dĺžku reťazca PHP nevedie podľa znaku \0. Naproti tomu fopen() predá parameter volaniu API OS, ktorý je v C-čku, znak \0 pre neho znamená koniec reťazca a všetko počnúc týmto znakom už neberie do úvahy.

3.9.2009 01:47 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Ak je \0 v názve tak to nezoberie a odmietne súbor otvoriť

Windows orezáva z konca súborov medzery, takže tam by stačilo dať na koniec tie, ale to platí len pre NTFS, ktoré na väčšine serverov nie je (navyše tam kde beží PHP)

Btw. afaik sa pomocou GET nedajú uploadovať súbory...
mkoubik avatar 3.9.2009 04:10 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Já tam taky vidim upload null byte, vysvetli mi nekdo proč fuj.php\0.txt neprojde? Nebo od kdy to php zahazuje?
Josef Kufner avatar 3.9.2009 09:54 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Nejde o php, ale o unix pod tím, ten jak známo omezuje znaky v názvech souborů na cokoliv krom '/' a '\0' – to první odděluje adresáře, to druhé zakončuje stringy v C.
Hello world ! Segmentation fault (core dumped)
3.9.2009 08:41 xurpha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Btw. afaik sa pomocou GET nedajú uploadovať súbory...

Ha, on je zásadní rozdíl mezi HTTP metodou GET a PHP proměnnou GET. Ta druhá „funguje“ i u ostatních metod, prostě jsou do ní zpracovány parametry z URL...

3.9.2009 11:51 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
To je mi jasné, ale v blogu sa spomínal form na upload, tak predpokladám že ten názov súboru sa zadáva do toho istého formu, a nie že sa píše ručne do url...
3.9.2009 13:00 xurpha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

A není to vzhledem k problému úplně fuck?

3.9.2009 15:00 eoj
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Jednak nevis o cem mluvis a druhak je to prece uplne jedno.
3.9.2009 15:20 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Tak by si mi aj mohol vysvetliť prečo by som nemal vedieť o čom hovorím, a prečo posielaš presne taký istý komentár aký je hneď nad tvojím...
4.9.2009 00:38 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
<form action="skript.php?foo=bar" method="post">
~ w w w w (oo)   [oo] w w w w ~
4.9.2009 01:06 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
A ako chceš do toho foo dostať string zadaný do textboxu na tej istej stránke? Cez nejaký javascript možno, ale také riešenie by nikto aspoň trochu normálny nikdy nepoužil...
4.9.2009 04:09 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
A z čeho že vyplývá ta podmínka, že to musí pocházet ze stejné stránky?
~ w w w w (oo)   [oo] w w w w ~
rADOn avatar 3.9.2009 14:36 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
php 5.2.0 v etchi neodmitne. hezkej bug.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
3.9.2009 15:18 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Njn, tak je to závislé na systéme na ktorom to beží...
xkucf03 avatar 3.9.2009 23:07 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše POST i GET v jednom

POST i GET se dají míchat dohromady:

<?php
echo ($_REQUEST["foo"] . "<br/>");
echo ($_REQUEST["bar"] . "<br/>");
?>

<form action="hack.php?foo=nazdar" method="post">
<input type="text" name="bar" value="bazar"/>
<button>poslat</button>
</form>

(neřešte validitu HTML, je to jen malý příklad)

Takže GETem můžeš poslat třeba název souboru a POSTem samotný soubor (ale je otázka, proč by to tak chtěl někdo dělat, když může POSTem poslat všechno).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
xkucf03 avatar 3.9.2009 23:28 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše \0

Tohle funguje:

<?php
$jmeno = "hack.php\0";
$fp = FOpen($jmeno, "rw");
$obsah = fread($fp, filesize($jmeno));
fclose($fp);
echo(nl2br(htmlspecialchars($obsah)));
?>

Výpíše soubor „hack.php“. Ale ta \0 je přímo v PHP kódu, když se ji tam snažíš procpat přes GET, tak se asi někde ztratí.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Aleš Janda avatar 3.9.2009 23:32 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: \0
Ale ta \0 je přímo v PHP kódu, když se ji tam snažíš procpat přes GET, tak se asi někde ztratí.

Podle mě se nikde neztratí, pokud přímo do URL dám ?promenna=neco%00neco, tak tam ten nulový bajt opravdu je…
xkucf03 avatar 3.9.2009 23:34 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: \0

Tak proč to harovi nefunguje?

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
3.9.2009 23:36 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: \0
Nefungovalo to na windows, tam sa fopen()núť súbor s null znakom v názve nepodarí. Neviem ale prečo to jednoducho nepovažuje za koniec stringu...
4.9.2009 00:01 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: \0
Hm, tak to teda nie je tým, a windows ten null znak normálne oreže, ale %00 mi server parsuje na '\0', čiže na "\\0", preto to nebralo...
Josef Kufner avatar 4.9.2009 00:30 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: \0
To máš jen zapnuté magic quotes.
Hello world ! Segmentation fault (core dumped)
xkucf03 avatar 4.9.2009 11:55 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše …přitom taková blbost.

FOpen považuje a SubStr nepovažuje – taková blbost, ale kolik to dokáže nadělat škody, co?

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Aleš Janda avatar 3.9.2009 23:29 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Ano, to je správná odpověď. Gratuluji :-)
hikikomori82 avatar 3.9.2009 01:27 hikikomori82 | skóre: 18 | blog: foobar | Košice
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
Ja ked ukladam subory do r/w adresara, tak jedine tak ze meno suboru je serial z nejakej tabulky kde su doplnujuce udaje o tom subore (povodny nazov suboru, velkost, typ, kto ho ulozil, kedy, kde sa pouziva,...), takze taketo veci ani nemusim riesit, ale ako inspiracia OK.
Slobodný font na technické kreslenie
3.9.2009 08:38 xurpha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

IMHO je zásadní chyba, že se testují jen některé části jména. Správný přístup je pomocí regulárních výrazů přesně definovat, jak jméno souboru má vypadat...

Josef Kufner avatar 3.9.2009 09:55 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Jakmile se v tom regulárním výrazu objeví něco jako '[^/]*', tak je to ekvivalentní tomuto zápisu.
Hello world ! Segmentation fault (core dumped)
3.9.2009 13:01 xurpha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

Jiste, p*čoviny se dají dělat i s pomocí regexp... klidně se tam dá rovnou dát „^.*$“, že ano...

Josef Kufner avatar 3.9.2009 21:26 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
A jak bys teda ten regexp napsal?
Hello world ! Segmentation fault (core dumped)
Aleš Janda avatar 3.9.2009 23:34 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Třeba takto:
^[a-z0-9]+\.[a-z0-9]+$
Ale test na příponu bych musel udělat stejně zvlášť.
stativ avatar 3.9.2009 09:50 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
Střílím od boku, ale nemůže být problém v uvozovkách? Nevidím tam žádné escapování.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
Josef Kufner avatar 3.9.2009 09:56 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Uvozovky jsou v pohodě, ale v závislosti na konfiguraci serveru se v názvu můžou objevit nějaká ta lomítka navíc, což však z pohledu bezpečnosti nijak nevadí.
Hello world ! Segmentation fault (core dumped)
kouby avatar 3.9.2009 10:00 kouby | skóre: 27 | blog: init | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

Máte pravdu, to mě prvně nenapadlo. To je další vážná chyba. :-)

That's thirty minutes away. I'll be there in ten.
Jardík avatar 3.9.2009 12:53 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Proč by v názvu souboru nemohly být uvozovky ... to nevadí, dokud se z toho netvoří dotaz do databáze.
Věřím v jednoho Boha.
3.9.2009 10:45 JS
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

Neumim PHP ani programovat weby, ale neni to v tom, ze se testuji jen lowercase ".php"? Tzn. pokud nekdo vytvori soubor ".PHP", tak ten pak mozna pujde pustit, protoze z URL se bude brat case-insensitive?

3.9.2009 11:16 kapo | skóre: 16 | blog: runtime
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Hned na zacatku je tam StrToLower(), takze se to prevadi pred testem.
Why make things difficult, when it is possible to make them cryptic... - Aksel Peter Jorgensen
rADOn avatar 3.9.2009 11:52 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
A co .php3, .phtml a mozna dalsi historicke relikty? Co kdyz jsou v apaci nastavene i jine cgi nebo handlery?
"2^24 comments ought to be enough for anyone" -- CmdrTaco
3.9.2009 13:06 xurpha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

Kua, chlape, ty nečteš zadání? Viz:

Neuvažujte jiné ošetřované přípony než „.php“ a jiný oddělovač adresářů než lomítko.
rADOn avatar 3.9.2009 13:58 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Čtu, ale nechápu.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
3.9.2009 11:59 prOm3TheuS | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
Možná bych si nejdřív ověřil, zda-li se opravdu jedná o uploadnutý soubor - viz is_uploaded_file() a pak ho pomocí move_uploaded_file() uložil na správné místo.
Jestli si to dobře pamatuju, tak se s tím daj ošetřit i takové stavy, jako omezení velikosti vkládaného souboru apod.
Your distro, your rules!
3.9.2009 13:04 xurpha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Možná bych si nejdřív ověřil, zda-li se opravdu jedná o uploadnutý soubor - viz is_uploaded_file() a pak ho pomocí move_uploaded_file() uložil na správné místo.

Ano, například z něj udělat xyz/adresar/zakerny_skript.php, že? Doporučoval bych přečíst a pochopit nejdříve zadání a pak blbě kecat :-)

3.9.2009 14:45 prOm3TheuS | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Od toho je pak samozřejmě nějaká taková rutina, jako byla napsána v blogu ne? Dle mého názoru je to rozhodně čistší, než ten soubor tam rvát přes $fp = FOpen('soubory/'.$_GET['nazev_souboru'], 'w');
3.9.2009 15:03 eoj
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Ovsem reseny problem si zkratka vubec nepochopil.
3.9.2009 14:21 sam
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin

jenom mne napadlo, jestli by se nedalo nahradit '.php' necim jako je '%20'  u mezery ...

pokud bych to zkousel, asi tohle je nejjednodussi (a mozna i nejelegantnejsi) zpusob

:)

3.9.2009 14:58 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
V tom kódu se někde dělá unescaping URL? Já tam nikde nic takového nevidím. Takže když bude v názvu souboru "%20", dostanete "%20" i v názvu souboru.
3.9.2009 16:06 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Což je dost nepochopitelná "vlastnost" prakticky všech webových udělátorů, s nimiž jsem se setkal. Osobně by mě zajímala situace, ve které mě jako aplikačního programátora zajímá něco jiného, než řetězce bez HTTP escapů.
When your hammer is C++, everything begins to look like a thumb.
3.9.2009 16:14 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Jenže on ten řetězec z proměnné $_GET už je odescapovaný, takže odescapovat ho znovu by byla chyba (a dobrý způsob, jak do programu zavléct nějakou bezpečnostní díru).
3.9.2009 14:50 eoj
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
%00
3.9.2009 16:03 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
A není ta chyba v tom, že nahrávané soubory jsou ve $_FILES a jméno nahrávaného souboru $_FILES["name"] ? Takže $_GET nic neošetří?
Grunt avatar 3.9.2009 17:32 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Já jsem z toho též jelen. Vždyť soubory se snad GETem ani poslat nedají a kdyby už ano, tak v nich rozhodně nebude název. Jak to může vůbec fungovat? Zkoušel to už někdo?:
POST /blog/EditDiscussion HTTP/1.1
Host: www.abclinuxu.cz
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en; rv:1.9.1.2) Gecko/20080528 Fedora/2.26.3-3.fc11 Epiphany/2.22 Firefox/3.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: cs
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.abclinuxu.cz/blog/EditDiscussion?action=add&threadId=0&dizId=142779&rid=276521
Cookie: __utma=184452854&ehllip;
Content-Type: multipart/form-data; boundary=---------------------------4290172515652242791849073854
Content-Length: 26069

-----------------------------4290172515652242791849073854

Content-Disposition: form-data; name="title"

Re: Kdy.. housing, tak NE v Casablance

-----------------------------4290172515652242791849073854

Content-Disposition: form-data; name="text"



vggdt

-----------------------------4290172515652242791849073854

Content-Disposition: form-data; name="attachment"; filename="chata_cela_bok_small.png"

Content-Type: image/png



.PNG

.
...
IHDR...q...U.....~C......sRGB....... .IDATx.....k.}..y........}......E..(Q....&yS%.../2.T.f..]N.35.T<.=....b'.mI.,..(.....E.K.}.}o4.;...<...x......A.
...p.|....<..N[
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
3.9.2009 18:01 ...............23 | skóre: 15 | blog: Various Stuff blog
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
O to v tom blogposte nejde, ono je v tom forme akože ďalší textbox na zadanie názvu súboru na ktorý sa to po nahraní akože premenuje (čo by teda bolo v praxi debilné riešenie, ale ide o to ukázať ten bug)
rADOn avatar 3.9.2009 18:09 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
To je jen zmatene zadani. IMO autor ma na mysli pouze fotevreni souboru zadaneho jmena v zadanem adresari, kde jmeno souboru muze byt "nebezpecne". Kdyz nic jineho, tak je to velice poucne v tom, ze zadani je ve vsech ohledech ukazkou jak se takove veci delat nemaji :-)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Josef Kufner avatar 3.9.2009 21:31 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Ano, místo "$_GET['nazev_souboru']" by tam v reálném programu mělo být něco jiného. Nejspíš by tam bylo $_POST, protože při uploadech souborů se $_GET nepoužívá. Ale tato bezpečnostní díra se může vyskytnout i ve formuláři na přejmenování souboru na serveru, který byl uploadnut již dříve nebo pro stažení souboru od někud jinud. Tak jako tak, na vlastní díře to nic nemění a nijak na tom nezáleží. Prostě to je vstup od uživatele, který je nutné ohlídat.
Hello world ! Segmentation fault (core dumped)
Jardík avatar 3.9.2009 23:09 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
Odpovědět | Sbalit | Link | Blokovat | Admin
Už je třetího večer, tak povídej ...
Věřím v jednoho Boha.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.