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 01:00 | Pozvánky

O víkendu probíhá v Košicích pravidelné setkání příznivců otevřených technologií OSS Víkend. Na programu je řada zajímavých přednášek a workshopů.

Ladislav Hagara | Komentářů: 1
dnes 00:11 | Nová verze

Byla vydána nová verze 1.3 otevřeného, licenčními poplatky nezatíženého, univerzálního ztrátového formátu komprese zvuku Opus (Wikipedie) a jeho referenční implementace libopus. Vylepšena byla například detekce, zda se jedná o řeč nebo o hudbu. Přidána byla podpora prostorového zvuku (immersive audio) dle plánovaného RFC 8486. Podrobnosti a zvukové ukázky na demo stránce.

Ladislav Hagara | Komentářů: 0
včera 22:33 | Nová verze

Bylo vydáno Ubuntu 18.10 s kódovým názvem Cosmic Cuttlefish (Kosmická sépie). Ke stažení jsou Ubuntu Desktop a Server, Ubuntu Cloud Images, Ubuntu Netboot, Kubuntu, Lubuntu a Lubuntu Alternate, Ubuntu Budgie, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 18:33 | Nová verze

Byl vydán PostgreSQL ve verzi 11.0. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 1
včera 17:33 | IT novinky

Nadace Raspberry Pi představila na svém blogu Raspberry Pi TV HAT, tj. rozšíření jednodeskového počítače Raspberry Pi umožňující příjem televizního vysílání DVB-T a DVB-T2. Cena rozšíření je 21,50 $.

Ladislav Hagara | Komentářů: 1
včera 17:07 | Nová verze

Vychází OpenBSD 6.4. Z řady novinek namátkou: podpora dalších architektur (arm64 např. dostal z Linuxu vypůjčený ovladač radeondrm), hypervizor vmm podporuje i qcow2 disky a šablony, jádro dokáže automaticky přepínat mezi dostupnými bezdrátovými sítěmi, sítě pracují o něco efektivněji, z bezpečnosti „přísaha byla doplněna odhalením“ (pledge(2) lze vhodně doplnit pomocí unveil(2)), SMT je ve výchozím stavu vypnutý, ale lze jej zapnout. Syntaxe nastaveni OpenSMTPD se změnila. S vydáním vychází také nová verze LibreSSL - 2.8.2.

Daniel Čižinský | Komentářů: 4
17.10. 23:15 | IT novinky

Firma Raptor Computing Systems, která stojí také za pracovní stanicí Talos II, představila levnější desku Blackbird s podporou jednoho 4-/8jádrového CPU POWER9 Sforza a formátem microATX; bližší specifikace jsou ve wiki výrobce.

Fluttershy, yay! | Komentářů: 16
17.10. 22:11 | Zajímavý projekt

Byla vydána verze 1.0 svobodné federalizované platformy pro sledování a sdílení videí, alternativy YouTube s podporou P2P, PeerTube (Wikipedie). Za vývojem PeerTube stojí nezisková organizace Framasoft snažící se mimo jiné nahradit svými svobodnými Frama službami služby společnosti Google (De-google-ify Internet).

Ladislav Hagara | Komentářů: 0
17.10. 19:44 | Zajímavý projekt

Společnost System76 prodávající počítače s Pop!_OS nebo Ubuntu plánuje prodej vlastního open source počítače s názvem Thelio. Informací je poskrovnu. Na Twitteru byla představena open source rozšířující deska (daughterboard), která by měla převzít funkce proprietárního softwaru na základní desce (motherboard).

Ladislav Hagara | Komentářů: 2
17.10. 00:22 | Nová verze

Google Chrome 70 byl prohlášen za stabilní (YouTube). Nejnovější stabilní verze 70.0.3538.67 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře (YouTube). Opraveno bylo 23 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 7
Přispíváte osobně k vývoji svobodného softwaru?
 (40%)
 (43%)
 (23%)
 (22%)
 (11%)
 (37%)
Celkem 242 hlasů
 Komentářů: 12, poslední 17.10. 21:18
Rozcestník

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

3.9.2009 23:21 | Přečteno: 2832× | 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: 21 | 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: 21 | 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.