zoukankan      html  css  js  c++  java
  • 会话固定攻击

    会话固定攻击

    Session fixation attack(会话固定攻击)是利用服务器的session不变机制,借他人之手获得认证和授权,然后冒充他人。

    session固定漏洞最为核心的其实应该是程序使用session作为认证方式,但又放开了session_id的设置,并且设置session_id在session_starts()执行之后,session_id以key/value的形式指定了后端使用哪个session。

    1.Attacker先打开一个网站http://www.baidu.com,然后服务器会回复他一个session id。比如SID=abcdefg。Attacker把这个id记下了。
    2.Attacker给UserA发送一个电子邮件,他假装是什么推销什么,诱导UserA点击链接http://unsafe/?SID=abcdefg,SID后面是Attacker自己的session id。
    3.UserA被吸引了,点击了http://unsafe/?SID=abcdefg,像往常一样,输入了自己的帐号和口令从而登录到银行网站。
    4.因为服务器的session id不改变,现在Attacker点击http://unsafe/?SID=abcdefg后,他就拥有了Alice的身份。可以为所欲为了。

    e.g.

    yxcms session固定攻击

    1. 用chrome新注册用户作为攻击用户,取得 PHPSESSID = qhi5f1rj7tu07dfkq53ngfqim2

    2. 模拟受害者使用firefox登陆管理后台,此时正常管理员 PHPSESSID= ib9pf18oh90ngm13q9m3utjp26, 后台地址为 http://192.168.27.136/yxcms/index.php?r=admin/index/index

    3. 攻击者诱使受害者访问恶意链接: http://192.168.27.136/yxcms/index.php?r=admin/index/index&sessionid=qhi5f1rj7tu07dfkq53ngfqim2

    4. 攻击者使用chrome访问后台链接:http://192.168.27.136/yxcms/index.php?r=admin/index/index , 账号变为管理员

    分析

    漏洞代码在:yxcms/protected/include/lib/common.function.php 中:

    640 function session($name='',$value = '') {
    641     if(empty($name)){
    642         return $_SESSION;
    643     }
    644     $sessionId = request('request.sessionid');
    645     if(!empty($sessionId)){
    646         session_id($sessionId);
    647     }
    648     if(!isset($_SESSION)){
    649         session_starts();
    650     }
    651     if($value === ''){
    652         $session = $_SESSION[$name];
    653     }else if($value==null){
    654         unset($_SESSION[$name]);
    655     }else{
    656         $session = $_SESSION[$name] = $value;
    657     }
    658     return $session;
    659 }
    

    644行可以看到,如果session_id存在,则使用session_id方法将其设置为当前会话的id。 并且session_id可以通过requests方法得到。这就有问题了。

    跟进request方法:

    660 function request($str, $default = null, $function = null) {
    661     $str = trim($str);
    662     list($method,$name) = explode('.',$str,2);
    663     $method = strtoupper($method);
    664     switch ($method) {
    665         case 'POST':
    666             $type = $_POST;
    667             break;
    668         case 'SESSION':
    669             $type = $_SESSION;
    670             break;
    671         case 'REQUEST':
    672             $type = $_REQUEST;
    673             break;
    674         case 'COOKIE':
    675             $type = $_COOKIE;
    676             break;
    677         case 'GET':
    678         default:
    679             $type = $_GET;
    680             break;
    681     }
    682     if(empty($name)){
    683         $request = filter_string($type);
    684     }else{
    685         if($method == 'GET'){
    686             $request = urldecode($type[$name]);
    687         }else{
    688             $request = $type[$name];
    689         }
    690         $request = filter_string($request);
    691         //设置默认值
    692         if($default){
    693             if(empty($request)){
    694                 $request = $default;
    695             }
    696         }
    697         //设置处理函数
    698         if($function){
    699             $request = call_user_func($function,$request);
    700         }
    701     }
    702     return $request;
    703 }
    

    了解更多

    https://xz.aliyun.com/t/2025
    http://www.freebuf.com/column/162886.html

  • 相关阅读:
    hdu 5366 简单递推
    hdu 5365 判断正方形
    hdu 3635 并查集
    hdu 4497 数论
    hdu5419 Victor and Toys
    hdu5426 Rikka with Game
    poj2074 Line of Sight
    hdu5425 Rikka with Tree II
    hdu5424 Rikka with Graph II
    poj1009 Edge Detection
  • 原文地址:https://www.cnblogs.com/0x4D75/p/9790281.html
Copyright © 2011-2022 走看看