V-zlom.ru » Статьи » Как провести атаку с помощью html тега "а"

Как провести атаку с помощью html тега "а"

Тег a — это не только ценный мех, но и инициализация window.opener. 

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

//Код №1 /*Автор кода просит прощения за все баги, связанные  с ним. Код написан под node.js */ var http = require('http');
http.createServer(function (rq, rs) { var cookie="Super :"+Math.random(-1)*30/13+": Mario"; //при каждом новом запросе, значение куки будет разным  rs.writeHead(200, {'Content-Type': 'text/html',
                     'Set-Cookie': cookie});
  if(!require('url').parse(rq.url).query){ // проверим на наличие входных данных  rs.end('<h2>ERROR!</h2><br>Example: http://127.0.0.1:8080/wo.bug?host=http://google.com/<br>Shutting down :)');
console.log('[DEBUG] URL: '+rq.url+' is not valid!'); // немножко дебага  console.log('Achtung!');
  process.kill(process.pid); //чтобы наверняка :)  }
  var host=require('url').parse(rq.url, true).query.host, //парсим  host=host.replace(/ /g,'%20'),//Решим проблему с обрезанием пробела  host=host.replace(/</g,'&'+'lt;'), //antiXSS  host=host.replace(/>/g,'&'+'gt;'), //antiXSS  host=host.replace(/javascript:/g,''); //antiXSS  console.log('URL: '+host); //Вывод ссылки в консоль  rs.end('<center><br><a href='+host+' target="_blank">click-click</a><br>Hey, '+cookie+'! </center>'); //"безопасный" вывод}).listen(8080);  //запустим сервер на 8080 порту  


В данном коде специально пропущена фильтрация протокола data. Через специально сформированную ссылку, и по средствам w.o, мы сможем выполнить XSS атаку. 
Для тестов я взял «большую тройку» браузеров: Opera/12.12, FireFox/18.00, Chrome/23.0.1271.97.

FireFox


Итак, передадим в атрибут href, тега a, значение «data:,1»:

После нажатия на гиперссылку видим, что w.o инициализирован:

А это значит, что, возможно, мы имеем возможность получить полный доступ к родительскому окну. 
Остается только убедиться в этом.
Используя w.o, мы успешно получили доступ к кукам родительского окна, но вот почему document.cookie=window.opener.document.cookie я не знаю, честно. Замечу, что данная особенность характерна только для FF.

Проверил на VM с XP SP3 и FF 17, такая же картина:

Остается только написать exploit, который будет использовать тег «а», протокол data и w.o, для кражи кук(да и вообще чего угодно).

  • Автор: admin
  • Комментарии: 0
  • Просмотры: 1258
0

Добавить комментарий

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!