Обходы eval() в Javascript.

Discussion in 'PHP' started by |qbz|, 18 Jul 2011.

  1. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Собственно вопрос, кто какие обходы знает? Не важно как, главное интересно посмотреть на способы запуска кода из текста. Для примера возьмем тест-код alert(1).
     
  2. C-r-A-c-K

    C-r-A-c-K New Member

    Joined:
    28 May 2011
    Messages:
    18
    Likes Received:
    2
    Reputations:
    1
    this["\x65\x76\x61\x6C"](alert('1'));
     
    1 person likes this.
  3. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Немного не так:
    this["\x65\x76\x61\x6C"]('alert(1);');
    можно спросить, откуда знаете об этом способе?
    жду еще варианты...
     
    #3 |qbz|, 18 Jul 2011
    Last edited: 18 Jul 2011
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Это же обычная документированная возможность JS, в нем все объекты являются одновременно ассоциативными массивами, по сути тот же eval и вызывается, просто слова "eval" в скрипте нет.
     
    1 person likes this.
  5. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Это само собой, меня не беспокоит то, что это фактически тоже самое - вот недавно писал как раз статью о крипте и обфускации JS, там этот способ как раз и описал... Меня интересуют вообще любые способы, в которых не используется явно слово eval.
     
  6. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Ну, через document.write для веб-страниц способ очевиден, есть еще такие:


    Нечто типа document.write:
    PHP:
    <html>
    <
    body>
    <
    script>
    var 
    code document.createElement("script");
    code.setAttribute('type''text/javascript');
    code.text "alert(1);";
    document.body.appendChild(code);
    </script>
    </body>
    </html>
    Эти интереснее:
    PHP:
    var code "alert(1);document.location.href='http://ya.ru/'";
    setTimeout(code1);
    PHP:
    var code "alert(1);document.location.href='http://ya.ru/'";
    new Function(
    code)(); 
     
    2 people like this.
  7. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Вот что надумал:
    c = 'alert(1);'; a = 'constructor'; [][a][a](c)();
     
    2 people like this.
  8. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Code:
    \u0061\u006c\u0065\u0072\u0074(1)
    Загляни сюда:
    http://sla.ckers.org/forum/list.php?24
     
    2 people like this.
  9. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Интересно, не знал. Спасибо.
     
  10. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    javascript:\u0064\u006F\u0063\u0075\u006D\u0065\u006E\u0074\u002E\u0077\u0072\u0069\u0074\u0065\u0028\u0027\u006C\u006F\u006C\u0027\u0029\u003B

    Не работает, возможно надо оставлять точки и символы в сыром виде.

    Да, вот так работает:
    \u0064\u006F\u0063\u0075\u006D\u0065\u006E\u0074.\u0077\u0072\u0069\u0074\u0065('\u006C\u006F\u006C');
     
  11. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Это только для идентификаторов. Необходимый и достаточный eval(name):
    Code:
    \u0065\u0076\u0061\u006c(\u006e\u0061\u006d\u0065)
    Я просто оставлю это здесь.
    http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
     
  12. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Прочитал ща все на одном дыхании, спасибо. :D
     
  13. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Похожее, но все-таки немного отличающееся от предыдущих способов:
    PHP:
    <script>
    window.onerror = new Function("alert(1);");
    throw 
    1;
    </script>
    Можно еще из флеш-ролика дергать JS-функции на веб-странице)
     
  14. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    да, тоже не плохо.