Po drátě 6: Řešení úlohy č. 91

Na uvedené adrese vás přivítala jen hláška, že "Pokud vidíte tuto stránku, heslo jste už minuli...". Někteří si možná identickou hlášku pamatují z jedné z vedlejších úloh loňského ročníku.

Heslo jsme minuli, pravděpodobně nám ho už tedy server poslal. Zkusíme tedy prozkoumat celou komunikaci mezi serverem a naším http klientem. Http část komunikace však nic zajímavého neskrývá, musíme o vrstvu níž. Heslo bylo totiž schované v hlavičce jednoho z TCP packetů poslaných serverem, konkrétně hned v tom prvním, v SYN/ACK.

Pokud to zní moc složitě, tak vězte, že ve skutečnosti stačilo zachytit si komunikaci se serverem například pomocí Wiresharku, a pak si jen velmi pozorně prohlédnout celý výstup.

Zajímavosti

Vložení hesla do SYN/ACK paketu bylo zajištěno následujícím pravidlem pro iptables:

iptables -t mangle -A OUTPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN,ACK --sport 888 -j NFQUEUE

a malým démonkem.

Démonek ze začátku hry obsahoval bug (při alokaci paměti pro nový paket jsme zapomněli přičítat dvojku pro hlavičku přidávané TCP optiony), takže si koruptil paměť a občas spadl. Chyba byla naštěstí záhy odhalena a opravena.

Úlohu vymysleli Jirka Benc a Martin Mareš, implementoval ji Jirka, se správnou teorií o tom, kde je zakopaný bug, přišel Martin.