PHP漏洞之session会话劫持
本文主要介绍针对PHP网站Session劫持。session劫持是一种比较复杂的攻击方法。大部分互联网上的电脑多存在被攻击的危险。这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持可能。
服务端和客户端之间是通过session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session。每个用 户的session都是独立的,并且由服务器来维护。每个用户的session是由一个独特的字符串来识别,成为session id。用户发出请求时,所发送的http表头内包含session id 的值。服务器使用http表头内的session id来识别时哪个用户提交的请求。
session保存的是每个用户的个人数据,一般的web应用程序会使用session来保存通过验证的用户账号和密码。在转换不同的网页时,如果 需要验证用户身份,就是用session内所保存的账号和密码来比较。session的生命周期从用户连上服务器后开始,在用户关掉浏览器或是注销时用户 session_destroy函数删除session数据时结束。如果用户在20分钟内没有使用计算机的动作,session也会自动结束。
php处理session的应用架构
会话劫持
会话劫持是指攻击者利用各种手段来获取目标用户的session id。一旦获取到session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。
攻击者获取目标用户session id的方法:
1)暴力破解:尝试各种session id,直到破解为止。
2)计算:如果session id使用非随机的方式产生,那么就有可能计算出来 3)窃取:使用网络截获,xss攻击等方法获得
会话劫持的攻击步骤:
实例:
1 //login.php 2 session_start(); 3 if (isset($_POST["login"])) 4 { 5 $link = mysql_connect("localhost", "root", "root") 6 or die("无法建立MySQL数据库连接:" . mysql_error()); 7 mysql_select_db("cms") or die("无法选择MySQL数据库"); 8 if (!get_magic_quotes_gpc()) 9 { 10 $query = "select * from member where username=’" . addslashes($_POST["username"]) . 11 "’ and password=’" . addslashes($_POST["password"]) . "’"; 12 } 13 else 14 { 15 $query = "select * from member where username=’" . $_POST["username"] . 16 "’ and password=’" . $_POST["password"] . "’"; 17 } 18 $result = mysql_query($query) 19 or die("执行MySQL查询语句失败:" . mysql_error()); 20 $match_count = mysql_num_rows($result); 21 if ($match_count) 22 { 23 $_SESSION["username"] = $_POST["username"]; 24 $_SESSION["password"] = $_POST["password"]; 25 $_SESSION["book"] = 1; 26 mysql_free_result($result); 27 mysql_close($link); 28 header("Location: http://localhost/index.php?user=" . 29 $_POST["username"]); 30 }
//index.php session_start();// 打开Session
访客的 Session ID 是:echo session_id();
访客:echo htmlspecialchars($_GET["user"], ENT_QUOTES);
book商品的数量:echo htmlspecialchars($_SESSION["book"], ENT_QUOTES);
如果登录成功,使用
$_SESSION["username"] 保存账号
$_SESSION["password"] 保存密码
#_SESSION["book"] 保存购买商品数目
开始攻击
1 //attack.php 2 session_start();// 打开Session 3 echo "目标用户的Session ID是:" . session_id() . ""; 4 echo "目标用户的username是:" . $_SESSION["username"] . ""; 5 echo "目标用户的password是:" . $_SESSION["password"] . ""; 6 // 将book的数量设置为2000 7 $_SESSION["book"] = 2000;
提交 http://www.XXX.com/attack.php?PHPSESSID=5a6kqe7cufhstuhcmhgr9nsg45 此ID为获取到的客户session id,刷新客户页面以后客户购买的商品变成了2000
session固定攻击
黑客可以使用把session id发给用户的方式,来完成攻击 http://localhost/index.php?user=dodo&PHPSESSID=1234 把此链接发送给dodo这个用户显示 然后攻击者再访问 http://localhost/attack.php?PHPSESSID=1234 后,客户页面刷新,发现商品数量已经成了2000
防范方法
1)定期更改session id 函数 bool session_regenerate_id([bool delete_old_session]) delete_old_session为true,则删除旧的session文件;为false,则保留旧的session,默认false,可选 在index.php开头加上 session_start(); session_regenerate_id(TRUE); 这样每次从新加载都会产生一个新的session id
2)更改session的名称 session的默认名称是PHPSESSID,此变量会保存在cookie中,如果黑客不抓包分析,就不能猜到这个名称,阻挡部分攻击session_start(); session_name(“mysessionid”);
3)关闭透明化session id 透明化session id指当浏览器中的http请求没有使用cookies来制定session id时,sessioin id使用链接来传递;打开php.ini,编辑session.use_trans_sid = 0 代码中 int_set(“session.use_trans_sid”, 0); session_start();
4)只从cookie检查session id session.use_cookies = 1 表示使用cookies存放session id session.use_only_cookies = 1 表示只使用cookies存放session id,这可以避免session固定攻击 代码中 int_set(“session.use_cookies”, 1); int_set(“session.use_only_cookies”, 1); p>
5)使用URL传递隐藏参数 session_start(); $seid = md5(uniqid(rand()), TRUE)); $_SESSION["seid"] = $seid; 攻击者虽然能获取session数据,但是无法得知$seid的值,只要检查seid的值,就可以确认当前页面是否是web程序自己调用的。
[via@91ri]
转载于:https://www.cnblogs.com/im404/p/3506170.html
PHP漏洞之session会话劫持相关推荐
- 如何防范 PHP安全的方式-session会话劫持与会话固定 ?
一.概述 对于Web应用程序来说,加强安全性的第一条原则就是--不要信任来自客户端的数据,一定要进行数据验证以及过滤才能在程序中使用,进而保存到数据层.然而,由于Http的无状态性,为了维持来自同一个 ...
- Session 会话劫持和cookie窃取
会话劫持 会话劫持(Session hijacking),这是一种通过获取用户Session ID后,使用该Session ID登录目标账号的攻击方法,此时攻击者实际上是使用了目标账户的有效Sessi ...
- 会话劫持漏洞小结——cookie劫持的方式、属性、原理、危害及防御
会话劫持 概念 会话劫持(Session hijacking)是一种通过获取用户Session ID后,使用该Session ID登录目标账号的攻击方法,此时攻击者实际上是使用了目标账户的有效Sess ...
- 如何修复会话固定漏洞_PHP安全漏洞:会话劫持,跨站点脚本,SQL注入以及如何修复它们...
如何修复会话固定漏洞 PHP中的安全性 (Security in PHP) When writing PHP code it is very important to keep the followi ...
- 【XSS漏洞-06】XSS漏洞利用案例(浏览器劫持、会话劫持、GetShell)—基于神器beEF
目录 1 案例简介 1.1 案例目的 1.2 案例环境 2 案例一:浏览器劫持 2.1 概述 2.2 案例步骤 3 案例二:会话劫持 3.1 概述 3.2 案例步骤 4 案例三:GetShell 4. ...
- Session攻击手段(会话劫持/固定)及其安全防御措施
一. 概述 对于Web应用程序来说,加强安全性的第一条原则就是--不要信任来自客户端的数据,一定要进行数据验证以及过滤才能在程序中使用,进而保存到数据层.然而,由于Http的无状态性,为了 ...
- Session攻击(会话劫持+固定)与防御
阅读目录 1.简介 2.会话预测 3.会话劫持 3.1.含义 3.2.攻击步骤 3.3.防御方法 4.会话固定 4.1.含义 4.2.攻击步骤 4.3.防御方法 5.参考文献 回到顶部 1.简介 Se ...
- 【XSS漏洞07】基于神器beEF的XSS漏洞利用实验(浏览器劫持、会话劫持、GetShell)
目录 1 实验简介 1.1 实验目的 1.2 实验环境 2 实验一:浏览器劫持 2.1 概述 2.2 实验步骤 3 实验二:会话劫持 3.1 概述 3.2 实验步骤 4 实验三:GetShell 4. ...
- SSClone非ARP会话劫持原理分析-ARP原理
前两天买的过期杂志上看到的一款软件,刚开始还没注意,后来就恨自己杂志买晚了.(今年3月份的<黑客(利用系统安全漏洞对网络进行攻击破坏或窃取资料的人)防线>) 那个神奇的软件,就像我标题上说 ...
最新文章
- Symfony学习笔记
- 图解负载均衡 LVS、Nginx及HAProxy--云平台技术栈14
- 中小企业网络结构设计1(华为版)
- Select 多个表并且相关联转置
- ##(两个井号)和#(一个井号)都是什么意思C and C++ 2008-09-23 21:18:27 阅读1106 评论0 字号:大中小 订阅 .
- 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)
- 假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!
- 5s的app显示无法连接服务器,苹果iphone5s手机无法连接App Store问题解决方法汇总...
- 虚拟机网络模式与网络配置
- JS实现点击复制目标内容
- c语言实现 网络嗅探程序代码,C语言实现网络嗅探器
- 网站建设 之 CSS渐变
- IBC和电信管理论坛将在数字转型世界峰会上进行媒体-电信融合项目演示
- KanziStudio应用程序配置详解
- Deep Retinex Decomposition for Low-Light Enhancement 论文阅读笔记
- Cisco(34)——BGP的十三条选路原则
- AI绘画工具软件网站合集:这些人工智能绘画生成器效果太赞了
- CCNA思科的一些基础知识
- js时间与当前时间比较
- 2021Android面经,历时一个半月,斩获3个大厂offer
热门文章
- 【开发管理类软件必备知识视频教程之二】登录窗体后台注意事项
- .Net中删除数据前进行外键冲突检测
- http://www.gov.cn/fuwu/bm/gyhxxhb/index.htm
- what format should you export from matlab?
- turnitin时间
- 有一些事情你不必要尝试
- 在Mono/Linux上使用PerformanceCounter
- 读源码学C之阅读李恒的bioawk
- 关于FlexBox的布局
- POJ 放苹果问题(递归)