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代码审计之会话认证漏洞的更多相关文章

  1. php代码审计10审计会话认证漏洞

    挖掘经验:遇到的比较多的就是出现在cookie验证上面,通常是没有使用session来认证,直接将用户信息保存在cookie中      Session固定攻击:黑客固定住目标用户的session i ...

  2. 2020/2/1 PHP代码审计之变量覆盖漏洞

    0x00 变量覆盖简介 变量覆盖是指变量未被初始化,我们自定义的参数值可以替换程序原有的变量值. 0x01 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...

  3. 2020/1/31 PHP代码审计之文件包含漏洞

    0x00 文件包含简介 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校检,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...

  4. 2020/1/31 PHP代码审计之目录穿越漏洞

    0x00 目录穿越 目录穿越(Directory Traversal)攻击是黑客能够在Web应用程序所在的根目录以外的文件夹上,任意的存取被限制的文件夹,执行命令或查找数据.目录穿越攻击,也与人称为P ...

  5. 2020/1/28 PHP代码审计之命令执行漏洞

    0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...

  6. 2020/1/28 PHP代码审计之代码执行漏洞

    0x00代码执行原理 应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞. 该漏洞主要存在于eval().assert().p ...

  7. PHP Sessions子系统会话固定漏洞

    漏洞名称: PHP Sessions子系统会话固定漏洞 CNNVD编号: CNNVD-201308-193 发布时间: 2013-08-22 更新时间: 2013-08-22 危害等级: 中危   漏 ...

  8. 代码审计之XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)

    0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...

  9. [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)

    0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...

随机推荐

  1. P1093 字符串A+B

    1093 字符串A+B (20分)   给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集.要求先输出 A,再输出 B,但重复的字符必须被剔除. 输入格式: 输入在两行中分别给出  ...

  2. 有没有比NRF51822更好的智能穿戴蓝牙方案

    现在在智能穿戴领域市场不断的追求低功耗.低成本的蓝牙芯片.蓝牙芯片目前除了Dialog公司研制蓝牙芯片是最求超低功耗的但是对于其它性能上还比较满足不了其它领域的功能,另外NORDIC.TI的蓝牙芯片虽 ...

  3. 微信小程序语音(A)发给别人(B),也能播放,是需要先把语音上传到自己的服务器上才可以

    小程序语音(A)发给别人(B),也能播放,是需要先把语音上传到自己的服务器上才可以. https://developers.weixin.qq.com/miniprogram/dev/api/medi ...

  4. html的适配

    html值得一说的应该就是适配 !!适配是与手机同时存在的 写好一个页面在手机端打开,会发现这个页面显示很小,那是因为设备的视口宽度viewport不等于设备宽度device-width,而页面是根据 ...

  5. String+、intern()、字符串常量池

    字符串连接符 "+"及字符串常量池实验.字符串final属性 结果预览 public class StrTest{ public static void main(String[] ...

  6. 019、MySQL取本季度开始时间和本季度结束时间

    SELECT QUARTER ( adddate( dy, ) ) QTR, date_add( dy, INTERVAL MONTH ) Q_start, adddate( dy, ) Q_end ...

  7. DFS技巧 折半搜索

    #include<iostream> #include<string> #include<cmath> #include<cstring> #inclu ...

  8. java代码静态分析工具

    需求:有些基础类型的遍历,值希望它被赋予指定的几个值,赋予其他值能够别编译器(IDEA/eclipse)提醒 Android studu结合自己的插件,引入 <!-- https://mvnre ...

  9. 如何形成自己的的绘画风格?/ Bookness插画教程分享

    搬运地址 :http://wemedia.ifeng.com/46042525/wemedia.shtml ---------------------------------------------- ...

  10. JuJu团队12月3号工作汇报

    JuJu团队12月3号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 修改batch里给sentence加padding的方法 继续调试 无 婷婷 给crossentro ...