Session对于Web应用是最重要的,也是最复杂的。对于Web应用程序来说,加强安全性的首要原则就是:不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,再保存到数据层。然而,为了维持来自同一个用户的不同请求之间的状态,客户端必须要给服务器端发送一个唯一的身份标识符(SessionID)。很显然,这和前面提到的安全原则是矛盾的,但是没有办法,http协议是无状态的,为了维持状态,我们别无选择。由此可以看出,Web应用程序中最脆弱的环节就是session,因为服务器端是通过来自客户端的一个身份标识来认证用户的,所以session是Web应用程序中最需要加强安全性的环节,
基于session的攻击有很多种方式。大部分的手段都是首先通过捕获或者固定合法用户的session,然后冒充该用户来访问系统。也就是说,攻击者至少必须要获取到一个有效的session标识符,用于接下来的身份验证。
攻击者至少可以通过以下三种方式来获取一个有效的session标识符
会话预测这种方式需要攻击者猜测出系统中使用的有效的session标识符(PHP中格式为PHPSESSID=1234),类似暴力破解。
目前会话预测这种攻击方式基本上不太可能成功
1、目标用户需要先登录站点
2、登录成功后,该用户会得到站点提供的一个会话标识SessionID
3、攻击者通过某种攻击手段捕获Session ID
4、攻击者通过捕获到的Session ID访问站点即可获得目标用户合法会话
示意图:
攻击者获取SessionlD的方式有很多种:
对于php来说,其内部Session的实现机制虽然不是很安全,但是关于生成Session ID的环节还是比较安全的,这个随机的SessionID往往是极其复杂的并且难于被预测出来,所以,暴力破解SessionID和预测SessionID的攻击方式基本上是不太可能成功的。
对于窃取Session ID的方式大多使用网络数据通讯层进行攻击获取,可以使用SSL进行防御。
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种通过窃取或篡改通信物理、逻辑链路间接完成攻击行为的网络攻击方法。攻击者与通信的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,实际上整个会话都被攻击者完全控制。这个被攻击者控制的通信节点就是所谓的“中间人"
中间人攻击有两种常见形式:
示意图如下:
中间人攻击难以防御的原因:
会话固定(Session fixation),是一种诱骗受害者使用攻击者指定的会话标识(SessionlD)的攻击手段。
这是攻击者获取合法会话标识的最简单的方法。(让合法用户使用攻击者预先设置的SessionlD进行登录,从而使Web不再进行生产新的SessionlD,导致攻击者预先设置的SessionlD变成了合法桥梁)。
会话固定也可以看成是会话劫持的一种类型,因为会话固定攻击的主要目的同样是获得目标用户的合法会话,不过会话固定还可以是强迫受害者使用攻击者设定的一个有效会话,以此来获得用户的敏感信息。
攻击步骤通常包括:
示意图如下:
早期浏览器存储的sessionID容易暴露、使用URL来传送sessionlD
首先检査携带cookie是否含有sessionID;若没有则再检查get、post数据中是否含有,若有则使用此数据;没有才会使系统生成一个sessionID发给客户端。
使用客户端脚本来设置Cookie到浏览器
<script> document.cookie="PHPSESSID=99999";</script>
这种方式可以使用XSS来达到目的
开启Httponly阻止攻击者读取Cookie
但有少数低版本浏览器存在漏洞,即使设置了HttpOnly,也可以重写Cookie。所以还需要添加其他方式校验,如User-Agent验证,Token校验。
使用HTML的<META>标签加Set-Cookie属性。
服务器可以在返回的HTML文档中增加<META>标签来设置Cookie
<meta http-equiv='Set-Cookie'content='PHPSESSID=23333'>
与客户端脚本相比,对<META>标签的处理目前还不能被浏览器禁止
使用Set-Cookie的HTTP响应头部设置Cookie
攻击者可以使用一些方法在Web服务器的响应中加入Set-Cookie的HTTP响应头部。
本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!
本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。