2013-10-05 4 views
0

На странице this page предлагается код для инъекций. Однако я не понимаю, как это сделать. Ответ онлайн говорит о том, что это \74a onclick=alert(1)\76W в текстовое поле (под названием) с надписью «Вход» и нажатие W является решением.JS-инъекция с шаблоном и регулярным выражением

страница действительно говорит, что выиграть, однако я считаю, что это неправильно

Я ran it on jsfiddle и нашел, что это было правильно бежал и не был введен. Что говорит страница? Есть ли на самом деле инъекция или ошибка страницы?

HTML:

<div id="c">text</div> 

JS:

//from challenge page 
function escape(s) { 
    function htmlEscape(s) { 
    return s.replace(/./g, function(x) { 
     return { '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;', "'": '&#39;' }[x] || x;  
    }); 
    } 

    function expandTemplate(template, args) { 
    return template.replace(
     /{(\w+)}/g, 
     function(_, n) { 
      return htmlEscape(args[n]); 
     }); 
    } 

    return expandTemplate(
    "            \n\ 
     <h2>Hello, <span id=name></span>!</h2>   \n\ 
     <script>          \n\ 
     var v = document.getElementById('name'); \n\ 
     v.innerHTML = '<a href=#>{name}</a>';  \n\ 
     <\/script>          \n\ 
    ", 
    { name : s } 
); 
} 

//the solution 
$('#c').html(escape('\74a onclick=alert(1)\76W')); 

ответ

1

Вам нужно бежать обратный слэш, так что \74 и \76 достичь функции побега без изменений. В противном случае они преобразуются в < и > слишком рано.

$('#c').html(escape('\\74a onclick=alert(1)\\76W')); 

Демо: http://jsfiddle.net/Lj7v4/1/

Смежные вопросы