[GWCTF 2019]mypassword
[GWCTF 2019]mypassword
考点
CSP
利用逻辑错误绕过正则黑名单
wp
注册登录两个功能,F12看到有个login.js,意思是把用户信息写到cookie里面
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.php,在list.php可以看到反馈内容,应该是个xss打cookie。
提交<svg onload=alert(1)> 返回的内容是< =alert(1)> 是有过滤的。
feedback.php有注释,可以看到过滤的内容,str_ireplace 为不区分大小写进行替换
在访问/content.php?id=1的时候发现返回头中有CSP,这个CSP策略的意思是只能执行本页面的js语句。
看那个过滤,实际上有个逻辑错误,例如我想使用getElement这个关键字,那就在getElement中插入黑名单中getElement之后的关键字,document或cookie,提交getdocumentElement就可以得到getElement了。因为这里循环是按照顺序循环的,只有目标关键字在黑名单之前就可以绕过了。
然后就可以构造payload了,首先需要执行login.js才能把账号密码写入cookie,执行login.js还需要username和password的input,都用cookie套一下,在feedback.php发送,在list.php查看,在vps接收即可,或者在(https://beeceptor.com/)在http://requestbin.cn/接收
小结
xss的payload要根据加载的js写
https://beeceptor.com/就试试http://requestbin.cn/
最后更新于