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.
(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 :-).)
Nejsi-li, stačí, když nebudeš skrblit a úlohu dostaneš také :-)
https://addons.mozilla.org/en-US/firefox/addon/966/ ;-)