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
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.