Po drátě 5: Řešení úlohy č. 9

Cílem této úlohy bylo seznámit hráče (i autory) s RFC 2616 a dobře se přitom pobavit. Nevíme, nakolik se to podařilo, ale vydejme se teď na procházku HTTP bludiště s průvodcem.

Podíváme-li se na stránku ze zadání úlohy http://www.podrate.cz/podrate5/labyrinth/, mnoho se nedozvíme. Webserver vyhlásí 305 a vyzve k použití proxy. Naštěstí nám v hlavičce Location: http://www.podrate.cz:8888/ sděluje, kde máme proxy hledat. Pokud ovšem prohlížeč necháme, aby proxy použil, dostaneme se jen k chybě 407, kterou nám server sděluje svou touhu přečíst si od nás nějaké jméno a heslo. Hlavička ani tentokrát není skoupá, najdeme tam radu X-Hint: Password is under.the.carpet. Když heslo použijeme s libovolným přihlašovacím jménem, popojdeme zase o kus dále.

Odpověď 300 Multiple Choices, nabízející GIF, XML nebo PNG, nás teprve vyslala do pořádného bludiště, kterou cestou se teď vydat? Zkusme nejprve hledat GIF. 307 Temporary Redirect se nás pokusí zdržet jen lehce, za jeho Location ale narazíme víc: 410 Gone nevěští nic dobrého, stránka navíc říká, že obrázek byl odstraněn z patentových důvodů. Podepsaný Po drátě Legal Team nám ale nabízí alespoň dolar jako útěchu, a to přímo v hlavičce: X-Coin: $1.

Nezbývá tedy, než se vrátit a vydat se jinudy. Když nebyl GIF, zkusme aspoň jiný obrázek, co ten PNG soubor? Další 307 nás nezaskočí, pohled do http://www.podrate.cz/img/1/minotauros.png ale přinese to samé v bleděmodrém, navíc s komentářem, že obrázek byl zrovna přesunut. Kam? Inu, do http://www.podrate.cz/img/2/minotauros.png... a takhle můžete pokračovat velmi, velmi dlouho (konkrétně až do maximální délky adresy, když ji překonáte, dostanete příslušnou, lehce melancholickou chybovou hlášku). Kdo obdivuje Bruce Schneiera a nebo aspoň sleduje aktuální reklamy s Chuckem Norrisem, ten se jistě nezalekne a napočítá rovnou do nekonečna: http://www.podrate.cz/img/nekonecno/minotauros.png (funguje i infinity). Dozví se sice, že PNG nebylo nalezeno ani v nekonečné vzdálenosti, ale webserver mu slíbí alespoň vizitku. Nebohá vizitka je sice na útěku před hladovým Minotaurem (302 Found), ale místo ní dostaneme tentokrát poměrně užitešnou informaci Location: mailto:soutez@podrate.cz?subject=99:object, která nám otevírá cestu k vedlejší úloze. Ovšem co s tou hlavní?

Když se vydáme po XML cestě, dozvíme se 402 Payment Required a jsme vyzváni k vložení mince. Tady nám sice RFC moc nepomůže, ale když si vzpomeneme na bolestné od právníků (to se pamatuje celkem dobře – nebo už jste někdy dostali od právníků nějaké peníze?), můžeme oeditovat hlavičky (nejpozději tady se většina hráčů nejspíš rozloučí se svým oblíbeným prohlížečem) a vhodit X-Coin: $1. Odpovědí je nám nejen 301, ale taky označení za Skota, které nás vyzývá k tomu, abychom si uvědomili, že štědrost je ctnost. V tomto případě náležitě odměněná. Pokud trochu přihodíme (X-Coin: $2 bohatě stačí), dostane se nám nejen poděkování, ale i odkazu na výše zmíněnou vizitku. K získání vizitky tedy nepotřebujeme být Chuck Norris, stačí jen nebýt lakomec.

Ať už jsme platili, kolik jsme chtěli, nyní se musíme vypořádat s vyplněním formuláře na http://www.podrate.cz/forms/get-password.cgi?type=correct&task=9. To sice zase nepůjde bez autorizace, heslo knock.knock se nám ale nabízí podobně jako u proxy. Pokud data formuláře nepošleme jako POST, dostane se nám odpovědi 405 Method Not Allowed. Při tom se můžeme setkat s chybou 411 Length Required, u které si server stěžuje, že mu přestala fungovat křišťálová koule. I když data pošleme správně, nedozvíme se víc než 403 Forbidden, v tomto případě navíc s komentářem, že tohle smí dělat jenom root. Přenastavíme-li uživatelské jméno na roota, potěší nás 303 See Other, nabízející lákavou URL http://www.podrate.cz/podrate5/labyrinth/yes-here-is-your-password.

Soubor, který jsme dostali, ale obsahuje pouze 42 a newline, což jako heslo moc nevypadá. Pohled na podezřelý Content-Type: application/x-pigzip a oblíbený komiks orgů Po drátě X-See-Also: http://www.hackles.org/cgi-bin/archives.pl?request=310 situaci vysvětluje - heslo je zkomprimováno algoritmem, ke kterému ještě neexistuje (a jak známe Prestona, ani hned tak existovat nebude) algoritmus dekomprimační. Musíme tedy serveru říct, že nechceme pigzip, třeba takhle: Accept: */*;q=0.5, application/x-pigzip;q=0.0. To ale ještě pořád není konec, server teď pro změnu remcá, že neposkytuje nekonečné soubory. Nevadí, stačí si všimnout, že se server už před nedávnem začal přiznávat k Accept-Ranges: bytes a říct si jenom o kousek.

Heslo je hafistek. Například takto jej lze z webserveru vyrazit pomocí curlu:

curl -r 0-100 -H'Accept: */*;q=0.5, application/x-pigzip;q=0.0' \
-u root:knock.knock -H 'X-Coin: $1' -U anicka:under.the.carpet \
-x www.podrate.cz:8888 -v http://www.podrate.cz/podrate5/labyrinth/yes-here-is-your-password

Zajímavosti

Zdrojáky démonka (jde o upravené thttpd) si můžete stáhnout.

Takto vypadal graf zatížení server (pozor, má logaritmickou stupnici):

Můžete si všimnout nejen četnosti různých status kódů (399 značí "jakákoliv jiná 3xx" apod.), ale také výtečníka, který nám poslal 140 tisíc requestů za necelé dvě hodiny (pak jej inkrementování do nekonečna po jedné přestalo bavit), který se stal další příčinou toho, že příště na úkor úloh budeme muset věnovat úsilí výrobě antibruteforcovacích pravidel (náš Legal team je k tomu ve skutečnosti zcela nepoužitelný, jelikož se vyzná jen v licencích).

Autory úlohy jsou Anička a Martin. Tato úloha byla inspirována chováním openSUSE Buildservice ve spolupráci s Novell iChain. Děkujeme Jefovi Poskanzerovi a dalším autorům thttpd.

Re: Po drátě 5: Řešení úlohy č. 9 thefox (8. 12. 2010 - 23:49) Sbalit(2)
Krucišpagát, čo som ja Chuck Norris?!? Do nekonečna má nárok napočítať len on - ja sa potom môžem čudovať, prečo som úlohu ani len nenašiel.

(A ešte by ma zaujímalo, ako sa podarilo nálezcom od Chucka to heslo dostať :-) ).

(Tušil som, že vedľajšia úloha bude skrytá v tejto, bludisko som dosť podrobne skúmal, ale nekonečno ma naozaj nenapadlo :-).)
Re: Po drátě 5: Řešení úlohy č. 9 Martin Mares (org) (8. 12. 2010 - 23:50) Sbalit(1)
> Krucišpagát, čo som ja Chuck Norris?!?

Nejsi-li, stačí, když nebudeš skrblit a úlohu dostaneš také :-)

Re: Po drátě 5: Řešení úlohy č. 9 Jenda (10. 12. 2010 - 2:04) Sbalit(1)
> můžeme oeditovat hlavičky (nejpozději tady se většina hráčů nejspíš rozloučí se svým oblíbeným prohlížečem) a vhodit X-Coin: $1

https://addons.mozilla.org/en-US/firefox/addon/966/ ;-)