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 00:22 | Nová verze

Byla vydána verze 1.0 svobodné multiplatformní závodní hry SuperTuxKart (STK). Přehled novinek v příspěvku na blogu. Zdůraznit lze především víceuživatelský mód umožňující hrát hru po síti. Videoprezentace nejnovější verze na YouTube.

Ladislav Hagara | Komentářů: 1
včera 15:55 | Komunita

Ke zhlédnutí jsou videozáznamy grafických rozhraní telefonů, zatím jenom vývojových desek, Librem 5 a PinePhone. Librem 5 za 649 dolarů by měl být aktuálně k dispozici ve třetím čtvrtletí 2019. Při spuštění kampaně se mluvilo o lednu 2019. PinePhone za 150 dolarů by měl být odesílán ve čtvrtém čtvrtletí 2019.

Ladislav Hagara | Komentářů: 0
19.4. 20:22 | Nová verze

Po dvou měsících vývoje od vydání verze 6.0.0 byla oficiálně vydána nová verze 6.1.0 správce digitálních fotografií a nově i videí digiKam (digiKam Software Collection, Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení. Vývojáři zdůrazňují nové API pro rozšíření DPlugins nahrazující KIPI. Ke stažení je také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

Ladislav Hagara | Komentářů: 0
19.4. 19:55 | Nová verze

Byla vydána verze 1.16.0, tj. první stabilní verze nové řady 1.16, multiplatformního multimediálního frameworku GStreamer (Wikipedie). Z novinek lze zdůraznit vylepšení podpory WebRTC nebo AV1. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
19.4. 11:55 | Nová verze

Po více než 3 letech od vydání verze 1.3.0 byla vydána nová stabilní verze 1.4 multimediálního přehrávače MPlayer (Wikipedie). Nejnovější verze přináší kompatibilitu s verzí 4.1 a také s aktuální vývojovou verzí multiplatformní multimediální knihovny FFmpeg (Wikipedie).

Ladislav Hagara | Komentářů: 14
18.4. 23:55 | Komunita

Mozilla oznámila, že projekt Things byl přejmenován na WebThings. Nové jméno by mělo zdůraznit, že se nejedná pouze o projekt IoT (Internet věcí), ale o WoT (Web věcí). Současně byla vydána WebThings Gateway (GitHub) ve verzi 0.8 pro Raspberry Pi.

Ladislav Hagara | Komentářů: 0
18.4. 21:11 | Nová verze

Byl vydán balík KDE Aplikace ve verzi 19.04. Shrnuje práce za poslední čtyři měsíce: opravy chyb, mj. ve správci souborů Dolphin, prohlížeči dokumentů (nejen PDF) Okular nebo prohlížeči obrázků Gwenview – tyto dostaly např. lepší podporu dotykových obrazovek. Významného přepracování se dočkal editor videa Kdenlive.

Fluttershy, yay! | Komentářů: 3
18.4. 16:22 | Nová verze

Byla vydána verze 19.04 linuxové distribuce Ubuntu a oficiálních odnoží Ubuntu Budgie, Kubuntu, Lubuntu, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Kódový název Ubuntu 19.04 je Disco Dingo. Přehled novinek a odkazy ke stažení v poznámkách k vydání. Ubuntu 19.04 bude podporováno 9 měsíců, tj. do ledna 2020.

Ladislav Hagara | Komentářů: 10
18.4. 09:55 | Nová verze

Byla vydána verze 8.0 sady aplikací pro SSH komunikaci OpenSSH. Řešena je bezpečnostní chyba CVE-2019-6111 v scp. Přidána byla experimentální podpora výměny klíčů, která je odolná vůči kvantovým počítačům (Streamlined NTRU Prime 4591^761 a X25519). Výchozí délka nově generovaných RSA klíčů je 3072 bitů.

Ladislav Hagara | Komentářů: 0
17.4. 22:44 | Komunita

Zend Framework, open source objektově orientovaný webový aplikační framework implementovaný v PHP, byl předán neziskovému technologickému konsorciu Linux Foundation. Framework se pod novým názvem Laminas v průběhu několika měsíců stane oficiálním projektem konsorcia.

Ladislav Hagara | Komentářů: 4
Používáte headset pro virtuální realitu?
 (1%)
 (3%)
 (1%)
 (20%)
 (0%)
 (74%)
Celkem 215 hlasů
 Komentářů: 12, poslední 18.4. 01:19
Rozcestník

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

3.9.2009 23:21 | Přečteno: 2869× | 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: 68
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: 68
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: 68
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: 68
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 | Prostějov
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.