cookie的欺骗是用户在登录的时候极为容易被他人获取权限,植入浏览器中,从而访问到后台。
先简要认识一下cookie,cookie机制是在浏览网页的时候,服务器将你的登录信息,浏览信息等发送给客户端并保存一定的时间。当你下一次访问这个网站的时候,就能读取上一次你的记录。
例如自动登录等。很多的网站都是由cookie来辨认登录者的信息。它可以起到登录验证的作用,从而存在了漏洞,可以绕过验证直接登录到后台。
先在自己瞎搞的网页上测试一下。网站的部分源码如下:
//是否已经登陆
public static function isLogin(){
if(!Cookie::has('name')){
return false;
}
return true;
}
//用户登录
public function login(){
if(Common::isLogin()){
$this->redirect('index/index/index');
}
if(request()->isPost()) {
$data = input('post.', '', 'trim');
$result=User::userLogin($data);
if($result['code']==1){
$this->redirect('index/index/index');
}
else{
$this->error($result['msg']);
}
}
return view();
}
这里的代码将cookie里面的name作为用户登录的信息,所以我们只要伪造了这个信息就可以绕过登录页面,直接登录。也就是cookie欺骗。
这里先用ie浏览器进入网页的登录页面进行登录
登录成功后我们用iecookieview插件来寻找到刚才登录的cookie
这时候换火狐浏览器进入主界面,由于不同的浏览器cookie的信息肯定是不相同的,所以这时火狐浏览器的信息是没有登录
这里使用cookie manager插件添加一条cookie,内容与刚才ie浏览器截获的一致,这里并没有获得密码等什么信息
添加进去之后刷新刚才的网页可以看见登录信息已经显示ie浏览器的登录信息了,这里cookie欺骗已经成功。如果获取到的是管理员账号就可以进行更进一步的提权操作了。
总的来说登录验证的强与否决定了cookie伪造的难易,后面可以在代码中改进验证方法来避免一些简单的cookie伪造。例如在上面的代码中对于isLogin函数做一些适当的修改。
public static function isLogin(){
if(!Cookie::has('name')||!Cookie::has('code')||!Cookie::has('key')){
return false;
}
if(Cookie::has('key')==md5(Cookie::has('code'))){
return true;
}
return false;
}
这样会比刚才好一些,但是也不是最安全的,有待后续学习。