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

  • 相关阅读:
    [转贴]USB簡介
    [网游计划第六、七天]压力好大,坚持很难
    [备忘] 字符串倒序函数strrev
    我的网游计划:ACM 30天 60题
    [网游计划第一天]:不怎么顺利的开始
    程序员必须要有的自信
    转:squid做反向代理时,要注意的安全设置
    Linux DHCP Server 配置给FIT AP 使用的option
    jdk配置
    nod32升级
  • 原文地址:https://www.cnblogs.com/0x4D75/p/9790281.html
Copyright © 2011-2022 走看看