会话固定攻击

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

会话固定攻击 - yxcms session固定漏洞的更多相关文章

  1. 漏洞:会话固定攻击(session fixation attack)

    什么是会话固定攻击? 会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会 ...

  2. 预防 Session 劫持与 Session 固定攻击

    一.预防 Session 劫持 要求: ① 只允许通过 Cookie 来传递 SessionID ② 生成一个由 URL 传递的唯一标识作为 Session 的标记(token) 当请求同时包含有效的 ...

  3. php防止会话固定攻击

    问题:希望确保应用不会受到会话固定攻击,即攻击者强制用户使用一个预定义的会话id. 解决方案:要求使用会话cookie但会话标识符不追加到URL,另外要频繁地生成新会话ID: <?php ini ...

  4. Spring cloud微服务安全实战-3-12session固定攻击防护

    getSession这个方法里面的逻辑,会根据传过来的cookie里面带的JSessionID在你的服务器上去找一个session,如果能找到,就用这个已经存在的session,这个getSessio ...

  5. 会话技术: Cookie 和 Session

    会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保 ...

  6. Java Web使用过滤器防止Xss攻击,解决Xss漏洞

    转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687   版权声明:本文为博主原创文章,转载请注明出处!有时候 ...

  7. Java EE会话技术Cookie和Session

    会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...

  8. Apache Tomcat examples directory vulnerabilities(Apache Tomcat样例目录session操纵漏洞)复现

    目录 Session操控漏洞 示例: Session操控漏洞 在Apache tomcat中,有一个默认的example示例目录,该example目录中存着众多的样例,其中/examples/serv ...

  9. 当ligerui的grid出现固定列与非固定列不在同一水平线上时,改怎么处理

    当ligerui的grid出现固定列与非固定列不在同一水平线上时,如下图所示: 此时可以增加fixedCellHeight:false属性进行解决.这个属性在IE上不起作用,那么该怎么处理,可以这样处 ...

随机推荐

  1. String补充

    String类不可变和可变字符序列区别_字符串比较 String类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”.也就是指对象内部成员变量的值无法再改变, p ...

  2. 1.Django安装与运行

    Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...

  3. CDN边缘节点容器调度实践(上)

    又拍云容器云是基于 Docker 的分布式计算资源网,节点分散在全国各地及海外,提供电信.联通.移动和多线网络,融合微服务.DevOps 理念,满足精益开发.运维一体化,大幅降低分布式计算资源构建复杂 ...

  4. 启动MongoDB shell客户端会什么会一闪而过

    解决办法: 在MongoDB shell客户端根目录下右击选择 "在此处打开命令窗口"; 在命令窗口敲入mongod --dbpath=d:/mongodb/data ; //我的 ...

  5. Lucene 01 - 初步认识全文检索和Lucene

    目录 1 搜索简介 1.1 搜索实现方案 1.2 数据查询方法 1.2.1 顺序扫描法 1.2.2 倒排索引法(反向索引) 1.3 搜索技术应用场景 2 Lucene简介 2.1 Lucene是什么 ...

  6. 知识小罐头03(idea+maven+部署war包到tomcat 上)

    自学的的小伙伴第一就要用maven!自学的的小伙伴第一就要用maven!自学的的小伙伴第一就要用maven! 重要的事说三遍!maven本质上,其实就是一种目录的格式,没有什么特别的地方!而且,你可以 ...

  7. HBase查询优化

    1.概述 HBase是一个实时的非关系型数据库,用来存储海量数据.但是,在实际使用场景中,在使用HBase API查询HBase中的数据时,有时会发现数据查询会很慢.本篇博客将从客户端优化和服务端优化 ...

  8. Jenkins自定义主题

    x下载自定义样式 http://afonsof.com/jenkins-material-theme/ 打开连接 最后点击:DOWNLOAD TOUR THEME! 得到样式文件:jenkins-ma ...

  9. Java的类加载器种类(双亲委派)

    Java类加载器采用双亲委派模型: 1.启动类加载器:这个类加载器负责放在<JAVA_HOME>\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别 ...

  10. .NET快速信息化系统开发框架 V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能

    文件中心是3.2版本开始新增的一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧“我的网盘”展示了用户对文件的分类,只能自己看到, ...