zoukankan      html  css  js  c++  java
  • 2020/2/4 PHP代码审计之会话认证漏洞

    0x00 会话认证漏洞简介

    会话认证是个非常大的话题,涉及各种协议和框架,如cookie、session、sso、oauth、openid等。
    而其中最常使用的是Cookie和Session,他们都能够进行会话跟踪。

    cookie是Web服务器返回给客户端的一段常用来标识用户身份或者认证情况的字符串,保存在客户端,浏览器请求时会自动带上这个标识;
    session是保存在服务器端的信息。用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。

    0x01session会话漏洞

    Session固定攻击
    Session劫持攻击

    0x02 挖掘经验

    遇到的比较多的就是出现在cookie验证上面,通常是没有使用session来认证,直接将用户信息保存在cookie中  
    在挖掘登录认证漏洞的时候,可以先看一下程序的登录代码功能,看看整个登录过程的业务逻辑有没有可以控制session值或者直接绕过密码验证的漏洞;另外需要关注程序验证是否为登陆的代码,通俗的说是验证cookie的代码。

    0x03 Session劫持攻击:

    黑客劫持目标用户的session id俩获取网站服务器上未
    3)窃取:使用网络截获,xss攻击等方法获得经许可的存取信息,特别是窃取目标用户的cookie数据,来取得网站的认可

    攻击者获取目标用户session id的方法:

    1)暴力破解:尝试各种session id,直到破解为止。
    2)计算:如果session id使用非随机的方式产生,那么就有可能计算出来
    3)窃取:使用网络截获,xss攻击等方法获得
    

    参考:
    https://cloud.tencent.com/developer/article/1377297
    写两个简单界面复现这个漏洞:
    index.php:

    <?php
    $id=md5(time().'salt');//无法预测的salt
    header('location:login.php?PHPSESSID='.$id);
    ?>
    

    首先使用攻击者浏览器访问 index.php 获得带令牌的登陆 url。

    然后到另外一个浏览器(用户浏览器)使用该链接登陆账户

    login.php

    <?php
    session_start();
    $user='admin';
    $pass='password';
    if(isset($user)&&isset($pass)){    
    if($_GET['user']==$user&&$_GET['pass']==$pass){        $_SESSION['user']='admin';    
    }
    }if($_SESSION['user']=='admin'){    
    echo'hello admin!';
    }else{    
    echo'please login.';
    }
    echo'<br>';
    echosession_id();//方便查看当前的session id是啥
    ?>
    

    0x04 Session劫持攻击修复

    使用随机而且长度够大的数字或字符串来当做session id

    使用随机而且长度够大的数字或字符串来当做session id

    更改session名称
    注销后销毁session的所有数据

    0x05 Session固定攻击

    黑客固定住目标用户的session id,所以目标用户使用的session可以由攻击者指定

    简单来讲,攻击者要想办法,让某个用户通过他预先选择的session标识符来访问系统,一旦系统接收到了这个用户的请求,并且使用用户传递过来的session标识创建了会话,攻击者就可以使用这个session标识了,也就等于冒充了你的身份

    0x06 Session固定攻击修复方案

    不要从GET/POST变量中接受session id
    调用session_start函数后,立即产生新的session id,并删除旧的session
    将session id存放在cookie内
    注销后即销毁session的所有数据
    使用时间戳来记录session的使用时间,如果两次session的相差时间太长,就销毁session的所有数据
    检查用户的IP地址,如果IP地址改变就产生一个新的session id,并且删除旧的session.

    0x07cookie身份认证漏洞修复

    单纯的cookie容易被修改,所以我们添加session变量对cookie进行验证,添加的代码如下:

    if(isset($_COOKIE['username']))
            {   
                $_SESSION['veri'] = $_COOKIE['username'];
                header("location: main.php");
            }
            
    

    用session存储cookie的值,并且session存放在服务端不会被修改。

    0x08 总结

    实战中一般单独危害较小,但是配合其他高级技巧会有很大危害。比如和xss配合起来getshell.
    多注意一下,要从总体来看,配合组合技会有意想不到的结果。

    参考链接:

    https://www.jianshu.com/p/a24bed73cb4e
    https://cloud.tencent.com/developer/article/1377297

  • 相关阅读:
    Mysql数据操作指令
    Mysql列属性
    Mysql表的对应关系
    Mysql中的一些类型
    Mysql笔记
    (三) rest_framework 权限与限流源码梳理
    (二) rest_framework 认证源码流程与配置
    (一) rest_framework 视图入口
    django_celery_beat
    GRPC
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/12258673.html
Copyright © 2011-2022 走看看