首页 > Web开发 > 详细

2020/2/4 PHP代码审计之会话认证漏洞

时间:2020-02-04 12:48:08      阅读:63      评论:0      收藏:0      [点我收藏+]

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

2020/2/4 PHP代码审计之会话认证漏洞

原文:https://www.cnblogs.com/wangtanzhi/p/12258673.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!