abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 18:11 | Zajímavý projekt

Firma vyvíjející distribuci CoreOS/Container Linux byla před dvěma lety převzata Red Hatem, v jehož portfoliu vznikla redundance: Fedora CoreOS cílí na podobná nasazení. Krátce poté vznikl fork nazvaný Flatcar Container Linux. Aktuálně je ukončení podpory CoreOS/Container Linuxu plánováno na 26. května a odstranění instalačních obrazů z distribučních kanálů na 1. září. Firma Kinvolk udržující Flatcar Linux oznamuje, že se věnuje usnadnění přechodu stávajících uživatelů CoreOS.

Fluttershy, yay! | Komentářů: 0
dnes 17:00 | Nová verze

Byla vydána verze 19.0 z Arch Linuxu vycházející linuxové distribuce Manjaro (Wikipedie). Její kódové jméno ne Kyria. Přehled novinek v oznámení v diskusním fóru. Manjaro je ke stažení v edicích XFCE, KDE Plasma a GNOME. K dispozici je také síťová instalace Architect. Vývoj Manjara lze podpořit také zakoupením počítače z předinstalovaným Manjarem.

Ladislav Hagara | Komentářů: 0
dnes 12:22 | Zajímavý projekt

Dne 19. února 2020 pan Kyle Finlay zahájil na Kickstarteru kampaň s názvem GamePad, jejímž cílem je získat prostředky na zprovoznění nové open source platformy pro digitální distribuci her, čistě pro OS Linux. Nová herní platforma je inspirována GOG.com a autoři slibují plnou podporu her bez ohledu na konkrétní distribuci, ale hlavně bez DRM. GamePad by měl být plně otevřený, včetně API, takže bude možné upravovat klienta, nebo si vytvořit

… více »
D.A.Tiger | Komentářů: 0
dnes 01:00 | Komunita

Luboš Kocman, Release Manager openSUSE Leap, oznámil, že verze 15.2 linuxové distribuce openSUSE Leap vstoupila do beta fáze. Připojit se lze k testování a hlásit chyby. Aktivní testeři mohou získat tričko. Finální vydání openSUSE Leap 15.2 je plánováno na 7. května 2020.

Ladislav Hagara | Komentářů: 20
včera 23:11 | Nová verze

Oficiálně byla vydána nová stabilní verze 2.10.18 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP. Přehled novinek i s náhledy a videi v oznámení o vydání a v souboru NEWS na GitLabu. Verze 2.10.16 nebyla kvůli vážné chybě oficiálně vydána.

Ladislav Hagara | Komentářů: 2
včera 22:55 | Nová verze

Balík Rakudo Star, tj. Rakudo včetně modulů a dokumentace, byl vydán ve verzi 2020.01. Rakudo je implementace programovacího jazyka Raku. Ten byl ještě nedávno znám pod názvem Perl 6.

Ladislav Hagara | Komentářů: 0
včera 20:00 | Komunita

Aaron Griffin, dosavadní vedoucí projektu Arch Linux, oficiálně oznámil výsledek volby nového vedoucího projektu Arch Linux. Novým vedoucím se stal Levente Polyak (anthraxx).

Ladislav Hagara | Komentářů: 0
včera 07:00 | Zajímavý článek

Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 90 (pdf), HackSpace 28 (pdf) a Wireframe 31 (pdf) a 32 (pdf).

Ladislav Hagara | Komentářů: 0
23.2. 15:22 | Nová verze

Byla vydána nová verze 0.3.0 multimediálního serveru zprostředkujícího aplikacím na Linuxu jednotný přístup k audiu a videu PipeWire (Wikipedie). Přehled novinek v souboru NEWS na GitHubu. Zdůraznit lze například vylepšenou kompatibilitu s JACK.

Ladislav Hagara | Komentářů: 0
23.2. 13:22 | Zajímavý článek

Michal Špaček informuje v článku Maximální délka platnosti HTTPS certifikátů bude zkrácena na 1 rok na svých stránkách: "Apple tento týden na setkání certifikačních autorit a prohlížečů oznámil, že od 1. září tohoto roku bude maximální platnost TLS certifikátů v Safari (a možná i v celém macOS a iOS) zkrácena na 1 rok, čímž v podstatě zabil certifikáty s delší platností".

Ladislav Hagara | Komentářů: 22
Vydržela vám novoroční předsevzetí?
 (9%)
 (5%)
 (3%)
 (83%)
Celkem 198 hlasů
 Komentářů: 0
Rozcestník

Řešení třetí programátorské hádanky aneb jak napadnout web

3.9.2009 23:21 | Přečteno: 2907× | poslední úprava: 11.12.2010 12:16

Třetí programátorská hádanka byla trochu složitější, tak jsem se rozhodl vše objasnit v extra článku. Vlastní hádanku naleznete zde.

Co udělá nulový znak při ukládání souboru

Když zadává útočník název souboru, může zadat např. toto:

skript.php%00

kde to %00 znamená nulový znak - znak s ASCII hodnotou nula. Co se v takovém případě stane?

PHP, stejně jako prakticky každý skriptovací jazyk, bere řetězec jako objekt. Tedy nějaké pole znaků a číslo udávající délku tohoto pole (řetězce). Nulový znak v takové reprezentaci nemá nějaké zvláštní postavení - pracuje se s ním stejně jako s jiným a většinou to ničemu nevadí. Z pohledu PHP tedy nebude název končit „.php“, ale „php\x00“.

Jiné je to při zápisu do souboru. Zápis do souboru je systémové volání a je nutno zavolat funkce jádra na otevření souboru. Všechna jádra současných rozumně používaných systémů jsou psané v Céčku (popř. C++) a očekávají „céčkovou“ reprezentaci řetězce. Tedy ukazatel někam do paměti, kde je posloupnost bajtů ukončených nulovým znakem. V praxi to probíhá tak, že prostě PHP alokuje někde paměť, tam překopíruje tu svoji reprezentaci řetězce, na konec hodí nulu a tenhle buffer předá jádru.

A tady je kámen úrazu. Pokud je nulový znak už v řetězci, PHP ho zkopíruje jako každý jiný znak, avšak jádro se při hledání konce názvu zastaví už na něm (namísto na tom koncovém). Takže se název zkrátí. Schválně si zkuste spustit kód

#!/usr/bin/php

<?php
 $nazev = "soubor.php\x00.txt";
 if (SubStr($nazev,-4) == '.txt')
     File_Put_Contents($nazev,'hack :-)');
?>

Co se stane? Ověří se, že soubor končí na „.txt“, ale na disku vznikne soubor „soubor.php“. Pěkné, že? :-) Takto se dají krásně obejít i kontroly, končí-li např. název na .jpg atd.

Jak tomu zabránit?

Předně, není dobré zapisovat soubory tam, odkud by byly spustitelné. Dále není dobré soubory ukládat pod jejich správným názvem, protože kromě bezpečnosti to nemusí být praktické, často je lepší jako jméno volit např. nějaký hash a metainformace, jako je název nebo typ, ukládat např. do databáze. A za další, vždy platí zlaté pravidlo: nezakazujte věci, které se udělat nesmí (blacklist), ale naopak jen povolte věci, o kterých víte, že jsou bezpečné (whitelist). V tomto případě by se asi jednalo o regulární výraz na jasně danou množinu znaků.

Poslední možností je prostě zkontrolovat název souboru na přítomnost nulového znaku. Popravdě, nikdy jsem neviděl, že by toto bylo někdy explicitně ošetřeno. Nicméně při správně nastaveném serveru by nemělo hrozit žádné riziko.

Gratulace a další chyby v kódu

Na tuto chybu jako první v komentářích upozornil AraxoN - gratuluji :-)

Další bezpečnostní chybou, kterou tento kód má, že povoluje zapsání souboru .htaccess. Pokud je jeho použití na serveru povoleno, lze pomocí něj definovat libovolné soubory jako PHP skripty, např. takto:

AddType application/x-httpd-php .txt

Tato chyba mě předtím nenapadla, díky za upozornění darkovi.

Pokud by server běžel na Windows, bylo by potřeba vyřešit ještě dvě chyby:

Anketa

Mimochodem, spousta z vás hlasovala v anketě, že příklad je lehký, i když se ještě v diskusi neobjevila žádná správná odpověď. Zvláštní :-) Zeptám se proto ještě jednou (a odpovídejte po pravdě ;-)):

Zranitelnost odstraněna (aktualizace 11. 12. 2010)

PHP od verze 5.3.4 by už nemělo připustit jakoukoli operaci se souborem majícím v názvu nulový znak. Tato zranitelnost je tedy již odstraněna.        

Hodnocení: 83 %

        špatnédobré        

Anketa

Přišli byste na tuto chybu sami?
 (10 %)
 (3 %)
 (79 %)
 (8 %)
Celkem 101 hlasů

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

Komentáře

Vložit další komentář

3.9.2009 23:30 trekker.dk | skóre: 71
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Další bezpečnostní chybou, kterou tento kód má, že povoluje zapsání souboru .htaccess. Pokud je jeho použití na serveru povoleno, lze pomocí něj definovat libovolné soubory jako PHP skripty, např. takto
AddType application/x-httpd-php .txt
I když je povoleno, nemusí být AddType v .htaccess účinné. Záleží na způsobu zpracování PHP serverem.
Quando omni flunkus moritati
Josef Kufner avatar 4.9.2009 00:34 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Mimochodem, spousta z vás hlasovala v anketě, že příklad je lehký, i když se ještě v diskusi neobjevila žádná správná odpověď. Zvláštní :-) Zeptám se proto ještě jednou (a odpovídejte po pravdě ;-)
To protože nechtěli kazit zábavu těm později čtoucím ;-)
Hello world ! Segmentation fault (core dumped)
4.9.2009 00:49 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Já v tom prakticky hned viděl ten zápis .htaccessu, to kouzlo s nulovým znakem je novinka.

Stejně si ale nedovedu představit, že by jenom trošku rozumně navržená webová aplikace tímhle vůbec mohla trpět.
~ w w w w (oo)   [oo] w w w w ~
xvasek avatar 4.9.2009 08:54 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

Přesně to mě napadlo taky - kontrolovat příponu v linuxu? (Jinak - abych nemachroval - bych na ten exploit samozřejmě nepřišel.)

Josef Kufner avatar 4.9.2009 19:19 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Příloha:
Tak schválně...
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 4.9.2009 19:20 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Ach jo :-(
Hello world ! Segmentation fault (core dumped)
4.9.2009 19:41 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Čekal jste, že Javovský server ten PHP skript zpracuje, nebo že se urazí a přestane odpovídat?
AraxoN avatar 4.9.2009 20:22 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

:-D hehe

A fine is a tax for doing wrong. A tax is a fine for doing well.
Josef Kufner avatar 4.9.2009 21:02 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Tak za pokus to stálo, ne ? :-D
Hello world ! Segmentation fault (core dumped)
Marek Bernát avatar 4.9.2009 23:10 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Abíčko nebeží na apachi, ale na nejakom javovskom servere? Btw, netuším, ako súvisí jazyk serveru s kódom súboru. Server len obslúži HTTP požiadavok, to kto ho spracuje, je úplne šumák (hoci by som sa veľmi čudoval, keby mal ábičkovský server nastavené obsluhovania PHP skriptov :-) )
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
AraxoN avatar 4.9.2009 23:41 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

Response Headers:

...
Server: Jetty(6.1.11)

200 OK

Takže nie, abíčko nebeží na Apachi.

A fine is a tax for doing wrong. A tax is a fine for doing well.
Marek Bernát avatar 5.9.2009 00:19 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Hm dík, to nebola otázka na to, či je to pravda -- to už dosť zjavne plynie z kolegovho príspevku --, ale _prečo_ nie Apache. Celkom by ma zaujímalo, či je to len tak, alebo z nejakého dôvodu (výkon, integrácia s javou, niečo iné...).
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
5.9.2009 09:55 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Abíčko používá Java Servlet technologii, takže je potřeba nějaký java servlet container. No a protože servlet container Jetty je zároveň webovým serverem a má HTTP část dostatečně kvalitní, je zbytečné mu předřazovat ještě nějaký jiný HTTP server, který by sloužil jenom jako proxy. No a rozchodit na Jetty PHP není úplně snadné, a protože by to bylo v případě Abíčka (i jiného serveru napsaného v Javě) zbytečné, proč by to někdo dělal?
Luboš Doležel (Doli) avatar 5.9.2009 11:03 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Rozchodit nad Jetty PHP v CGI režimu je naopak velmi snadné. FastCGI taky jde, ale je to o něco složitější.
Luboš Doležel (Doli) avatar 5.9.2009 17:14 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Pro případ, že by to někdo hledal. Nakonec to fastCGI ani není o nic složitější.
5.9.2009 21:41 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Kdybych já chtěl provozovat PHP na Javě, asi bych šel do něčeho trochu jiného :-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.
Luboš Doležel (Doli) avatar 5.9.2009 22:04 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Wow, to musím vyzkoušet.
Luboš Doležel (Doli) avatar 5.9.2009 23:00 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Tak je to fajn, ale characterEncoding=ISO_8859_1, co to dává do JDBC connection stringu, když se v PHP volá mysql_connect, to je konec.
6.9.2009 00:09 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Já to nikdy nezkoušel, jenom vím, že to existuje, ale když teď koukám na zdrojáky, vypadá to docela hackovatelně. A mělo by to umět použít konexi z JNDI, takže při použití v aplikáči (nebo i v tom Tomcatu, který konexe přes JNDI vystavit umí) by neměl být problém.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
6.9.2009 00:17 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Ale při pohledu na com.caucho.quercus.lib.db.Mysqli to vypadá, že tam s kódováním znaků skutečně něco šaší:
// Explicitly indicate that we want iso-8859-1 encoding so
// we would know what encoding to use to convert StringValues
// to Strings
// php/140b 
Tak nevím. Hádám, že je asi trápí jiné věci, než internacionalizace, ale hádám, že hacknout by to šlo (kdyby se upravila i ta část, která converts StringValues to Strings).
Ještě na tom nejsem tak špatně, abych četl Viewegha.
Luboš Doležel (Doli) avatar 6.9.2009 11:50 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Tváří se, jak jsou totálně unicode, a pak tam vhodí tohle. To teda fakt nechápu.
protected static final String ENCODING = "ISO8859_1";
Marek Bernát avatar 5.9.2009 11:58 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

O ten Apache mi šlo preto, že je obecne považovaný za veľmi výkonný server a dobre škáluje. Určite aj preňho existuje nejaký Java modul, veľmi by som sa čudoval, keby nie. Veď máme aj mod_lisp :-) Takže tipujem, že to Jetty je tam preto, že je to default voľba, nie preto, že by niekto testoval rozdiel vo výkone oproti Apachu?

To PHP som spomínal len z toho dôvodu, že jazyk servera a jazyk, ktorým sa spracúvajú skripty nijak nesúvisia. Pokojne môžete cez Jetty servovať len PHP. Praktickú otázku nasadenia PHP pre abíčko (čo je úplná blbosť) som samozrejme nemyslel :-)

physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
Limoto avatar 5.9.2009 12:34 Limoto | skóre: 32 | blog: Limotův blog
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

 

O ten Apache mi šlo preto, že je obecne považovaný za veľmi výkonný server a dobre škáluje.

To je vtip?

 

Marek Bernát avatar 5.9.2009 12:37 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Nie.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
default avatar 5.9.2009 16:21 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

Ale je! Sám jsem v dobách pokusů s Java EE napsal servlet pro servírování statického obsahu. A na správně nastaveném Glassfishi jsem dosahoval desetinásobně lepších výkonů. A to je celý HTTPD napsaný v C. :-D Pravda, Apachí web server byl trošku v nevýhodě, ale koho to dnes zajímá. :-D

5.9.2009 12:52 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Pro Apache žádný Java modul neexistuje, pouze může předávat požadavky dál servlet kontejneru. Buď přes binární protokol AJP13, který má problémy se zpětnou kompatibilitou a autoři Jetty jej nedoporučují, nebo jako klasický HTTP požadavek. Apache sám by mohl obsloužit těch pár statických souborů, které na Abíčku jsou, tj. styly a nějaké obrázky. Vše ostatní by stejně musel předávat Jetty. Z toho je snad jasné, že přidání jedné zbytečné mezivrstvy výkonu určitě neprospěje, spíš naopak.

Java na serveru se používá vždy, když je serverová aplikace napsaná v Javě (jinak to ani nejde), naopak se asi málokdy používá varianta, kdy by byl Javovský server, který by ale fungoval jenom jako obyčejný HTTP server. Já jsem to tak sice dlouho používal (a po zjištění, že Apache dnes neumí prakticky nic nového proti počátkům verze 2.0, kdy jsem jej používat přestal, se k tomu zase brzy vrátím), ale to jsem asi dost výjimka. Takže webserver napsaný v Javě v drtivé většině případů znamená také serverovou aplikaci napsanou v Javě, takže se to běžně zaměňuje.
Marek Bernát avatar 5.9.2009 16:04 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

Aha, ďakujem za objasnenie. Netušim som, že Apache nemá žiadny modul pre Javu. To všetci používajú Jetty? Alebo sú aj iné možnosti?

Asi máte pravdu, že pre jazyky, ktoré len nespracúvajú skripty, ale skutočne bežia ako celistvá aplikácia je výhodnejšie mať špecializovaný server priamo v jazyku (napríklad aj Seaside to tak má, ak sa nemýlim).

physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
Luboš Doležel (Doli) avatar 5.9.2009 16:07 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Jinou možností je třeba Apache Tomcat. Používat nejavovský HTTP server pro Java aplikaci je prostě hloupost.
5.9.2009 16:17 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Jetty, Tomcat, Resin a spousta dalších. Takový „modul pro Javu“ by stejně musel řešit meziprocesovou komunikaci (spouštět JVM pro každý požadavek by nebylo dobré, a JVM si jako knihovnu uvnitř Apache taky spustíte těžko) a samotný servlet kontejner je docela komplexní věc, která se stejně musí starat o protokol HTTP, spojení atd. Takže udělat z toho plnohodnotný server je v podstatě prkotina, a mít k tomu nějaký předřazený server je pak vlastně zbytečné.
4.9.2009 20:28 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Kvík?
~ w w w w (oo)   [oo] w w w w ~
4.9.2009 08:35 dementni.lojzik
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Nicméně při správně nastaveném serveru by nemělo hrozit žádné riziko. ... i když se ještě v diskusi neobjevila žádná správná odpověď
ne ze bych tady tem vecem rozumel, ale vybavuju si, ze kdysi jsem cetl v knizce Zranitelny kod (ci tak nejak se to jmenovalo) prave o teto chybe. Autor upozornuje na nebezpeci nuloveho znaku, ale jestli se dobre pamatuju, tak to bere spis jako chybu ve webovem serveru nez v programu (ve smyslu, ze je tohle je taky dobre osetrit, protoze ve web serveru to osetreno byt nemusi). Treba proto nikdo neodpovedel spravne, protoze tohle vetsina lidi nepovazovala primarne za chybu v programu (tohle byl treba muj pripad, ale ja ani nehlasoval v ankete)
4.9.2009 10:46 l4m4
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Chybu bych ošetřil, i kdyby mě nenapadla, protože používám konzervativní whitelisty. Nemá smysl hledat všechny možné chyby v kódu, který je na první pohled nedostatečně defensivní...
4.9.2009 10:52 Kvakor
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Já osobně to řeším tak, že nikdy neukládám soubory pod názvem, který dodá uživatel, ale vygeneruju si vlastní (např. přes funkci tempnam()). Název dodaný užibvatelem uložím někde bokem a to jen v tom případě, že se bude později potřebovat (třeba při downloadu) a to až po "odprasení" - odstranění všech znaků, které by mohly být problematické, povolená jsou jen malá písmeba, podtržítko, mínus a tečka. A pokud je to možné, ukládám soubory mimo adresáře přístupné webserveru, takže cokoliv, co je v nich, nemůže být ani spuštěno, ani staženo bez dovolení.
4.9.2009 11:54 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Podla mna ide o chybu v PHP - je jasne, ze sa toto stane VZDY, tak to ma mat osetrene a neakceptovat NULLove znaky v nazvoch suborov. Napriklad toto urobi Python:
>>> nazov = "test.txt\x00"
>>> file_obj = open(nazov, "w")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
4.9.2009 15:40 razor | skóre: 33
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

Též bych řekl, že by to high level jazyky měly nějak ošetřovat. On vůbec ten null znak je dost podivna věc, která má IMHO smysl jen v C.

Marek Bernát avatar 4.9.2009 23:18 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Keď už sme pritom, tak znaky nie sú čísla a high level jazyk by ich vôbec nemal takto implementovať. Okrem toho, že to prináša takéto chyby, tak je to zviazané s ASCII kódovaním, čo je ďalšia nepríjemná vec.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
vlastikroot avatar 5.9.2009 00:21 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Budiz bohuslavena utf8 :-D Ale souhlasim s tim, ze string by mel byt neco abstraktniho, bez jakehokoli vlivu toho jake znaky v nem jsou. Ta fopen by mela nebezpecne znaky ignorovat. Nejhorsi na tom je to, jak jsou ty obycejne nulou koncene stringy zazrane v systemu. Tyhle koule na noze se unix asi nezbavi ...
Sg1-game | We will destroys the Christian's legion ... and the cross, will be inverted | IP 80.188.182.6
4.9.2009 17:45 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Souhlas. Kdo to reportuje? :-)
~ w w w w (oo)   [oo] w w w w ~
6.9.2009 16:43 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Nema vyznam, pretoze PHP developeri toto povazuju za 'feature' :)
4.9.2009 21:26 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Tak to je pro mě novinka, u php bych tohle chování nečekal, u C by mě to možná napadlo. Ale pořád mi nejdou z hlavy dvě tečky - co když by tam někdo procpal něco jako ../neco.xyz?
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
Aleš Janda avatar 4.9.2009 21:28 Aleš Janda | skóre: 22 | blog: kýblův blog | Kralupy nad Vltavou
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Tam by neprošlo to lomítko ;-)
4.9.2009 22:10 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
Kdybych já si ten kód přečet pořádně... Z jakéhosi důvodu jsem myslel, že to testuje lomítko na začátk. A myslet znamená...
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
Aleš Janda avatar 11.12.2010 12:17 Aleš Janda | skóre: 22 | blog: kýblův blog | Kralupy nad Vltavou
Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
PHP od verze 5.3.4 by už nemělo připustit jakoukoli operaci se souborem majícím v názvu nulový znak. Tato zranitelnost je tedy již odstraněna.

Upozornění jsem do článku již doplnil.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.