会话固定攻击 - yxcms session固定漏洞
会话固定攻击
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固定攻击
用chrome新注册用户作为攻击用户,取得 PHPSESSID = qhi5f1rj7tu07dfkq53ngfqim2
模拟受害者使用firefox登陆管理后台,此时正常管理员 PHPSESSID= ib9pf18oh90ngm13q9m3utjp26, 后台地址为 http://192.168.27.136/yxcms/index.php?r=admin/index/index
攻击者诱使受害者访问恶意链接: http://192.168.27.136/yxcms/index.php?r=admin/index/index&sessionid=qhi5f1rj7tu07dfkq53ngfqim2
攻击者使用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固定漏洞的更多相关文章
- 漏洞:会话固定攻击(session fixation attack)
什么是会话固定攻击? 会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会 ...
- 预防 Session 劫持与 Session 固定攻击
一.预防 Session 劫持 要求: ① 只允许通过 Cookie 来传递 SessionID ② 生成一个由 URL 传递的唯一标识作为 Session 的标记(token) 当请求同时包含有效的 ...
- php防止会话固定攻击
问题:希望确保应用不会受到会话固定攻击,即攻击者强制用户使用一个预定义的会话id. 解决方案:要求使用会话cookie但会话标识符不追加到URL,另外要频繁地生成新会话ID: <?php ini ...
- Spring cloud微服务安全实战-3-12session固定攻击防护
getSession这个方法里面的逻辑,会根据传过来的cookie里面带的JSessionID在你的服务器上去找一个session,如果能找到,就用这个已经存在的session,这个getSessio ...
- 会话技术: Cookie 和 Session
会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保 ...
- Java Web使用过滤器防止Xss攻击,解决Xss漏洞
转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687 版权声明:本文为博主原创文章,转载请注明出处!有时候 ...
- Java EE会话技术Cookie和Session
会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...
- Apache Tomcat examples directory vulnerabilities(Apache Tomcat样例目录session操纵漏洞)复现
目录 Session操控漏洞 示例: Session操控漏洞 在Apache tomcat中,有一个默认的example示例目录,该example目录中存着众多的样例,其中/examples/serv ...
- 当ligerui的grid出现固定列与非固定列不在同一水平线上时,改怎么处理
当ligerui的grid出现固定列与非固定列不在同一水平线上时,如下图所示: 此时可以增加fixedCellHeight:false属性进行解决.这个属性在IE上不起作用,那么该怎么处理,可以这样处 ...
随机推荐
- [Swift]LeetCode295. 数据流的中位数 | Find Median from Data Stream
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- [Swift]LeetCode450. 删除二叉搜索树中的节点 | Delete Node in a BST
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...
- [Swift]LeetCode498. 对角线遍历 | Diagonal Traverse
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...
- [Swift]LeetCode953. 验证外星语词典 | Verifying an Alien Dictionary
In an alien language, surprisingly they also use english lowercase letters, but possibly in a differ ...
- MyBatis增、删、改、查
1.config.xml文件的基本配置信息 2.选择数据源 3.mybatis约定 (1)parameterType和resultType 只能传一个参数,但是我们可以传一个数组或者集合,达到传多个参 ...
- ubuntu16.04安装lnmp环境
1.安装mysql sudo apt install mysql-server 2.安装nginx和php #添加nginx和php的ppa源 sudo apt-add-repository ppa ...
- Django+Bootstrap+Mysql 搭建个人博客(二)
2.1.博客首页设计 (1)settings.py MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace("//","/ ...
- BBS论坛(二十)
20.1.cms添加轮播图后台逻辑代码完成 (1)apps/models.py from exts import db from datetime import datetime class Bann ...
- EF架构~mysql中时间戳字段被认为是主键自增
回到目录 如果在mysql中添加了自增字段,用来维护行的版本,那么在EF中会有一个问题,会把它当成是数据表主键,当你的真正主键是自曾时,就会把默认值0拼到生成的SQL语句里,导致你的insert出错, ...
- Oracle学习笔记四
一.PL/SQL编程 游标(光标Cursor) 为什么使用游标 在写java程序中有集合的概念,那么在pl/sq中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据. 语法: C ...