session劫持是一种比较复杂的攻击方法。大部分互联网上的电脑多存在被攻击的危险。这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持
可能。

两台主机要想进行TCP通信,必须经过一个三次握手的过程。三次握手过程中服务端和客户端一般会协商一个序列号。这个序列号一般是一个长整数。用来标记
每个数据包本来的顺序。服务端或者客户端使用这个序列号来重组在网络传输过程中乱序了的数据包。服务端和客户端在三次握手过程中还会协商其他的内容
比如window
size用来通知对方自己可以缓存多少个数据包,以防止某一方过快发送数据包导致丢包。

下面简述一下三次握手的过程:
假设A想要和B进行通信。
A会先发给B一个TCP数据包。这个数据包中的SYN标志被置位,因此又将这个数据包叫做SYN数据包。在这个数据包中会包含A的Window
size信息,并且会包含一个ISN(Initial Sequence
Number)号,就是初始序列号ISNA。好像最初的ISN号码固定从一个数字开始,这样更容易被人劫持,所以后来这个数字变为了一个伪随机数。这个值的取值范
是0到2^32-1。这个数据包中不带负载数据。

B在收到SYN数据包后会返回一个SYN+ACK数据包,这个SYN+ACK数据包用来告诉A:
“我收到了你的SYN数据包”。同时B会将A发过来的ISNA号,原封不动地插入这个ACK数据包。并且将自己的ISNB号码放入这个ACK数据包中返回给A。这个数据包
同样不会带任何的负载数据。

A收到B的ACK数据包时,同样会返回给B一个ACK数据包表示成功收到对方的数据包。同时A也会将B发送来的ISNA数据+1,放入这个ACK数据包返回给B。这个数据
包中可以携带负载数据,也可以不携带负载数据。(因为这时连接已经建立了)

通过上面的三次握手之后,一个完整的TCP连接就建立好了。

之后的序列号都是主机收到的数据包中的序列号+收到包中的数据大小。第三次握手中,如果ACK数据包中携带数据,那么ISNA就不再是+1了。而是+数据大小。

Session Hiject

TCP协议在设计之初并没有考虑太多安全的因素。Session都是通过客户端IP,客户端Port,服务端IP,服务端Port来验证的。

session劫持一般发生在A和B建立连接之后的通信过程中。Hacker一般会首先监听网络上的通信数据包。在某次通信过程中,Hacker在B发送信息给A之前,假冒
B发给A一个数据包。这个数据包中使用B的IP和端口,并且将上次B收到的序列号+此数据包的数据大小作为序列号。在A收到这个数据包时,就会以为这个数据
是B发给他的。同时A会根据Hacker发给他的数据包修改自己的序列号。如果真正的B尝试发送数据包给A时,A会因为序列号不正确抛弃这个数据包(这时因为B没
有收到A的响应,所以会重发这个数据包,而这个数据包在发送到A之后又被抛弃)从此Hacker就可以代替B和A通信了。

完成这个过程一般需要一下3个步骤:
1、监控,跟踪某个Session通信过程。
2、破坏Session同步通信。
3、劫持这个Session。

下面简述一下实现以上三个步骤的过程。
1、通过简单的sniff就可以监听网络上的数据包。
2、要想破坏Session同步,我们需要预测数据包的序列号。如果我们有权限访问网络,那就可以sniff到网络通信过程,并且从数据包中可以计算出下个序列号
。这就是本地session劫持。如果我们没有权限,不可以sniff到客户端和服务端的通信过程,那就比较麻烦了。预测序列号是很不可能的,因为可选范围太大
。(2^32中可能性)
在如法预测序列号的时候,可以通过ARP欺骗的方法对客户端和服务端来个中间人攻击。这样就可以使两者之间的通信都在Hacker的监控之下。
3、在上面两个步骤完成之后,就只剩下重组数据包,并且发送给通信的某一端了。重组数据包有很多中方法和现成的工具。这里就不说了。

有很多工具可以用来做Session劫持,有商业的,也有开源的。

这里只提供一些大概的思路:

数据库设计:

logininf表(登录状态表)要有userid, sessionid, workstation(ip), agent(request), hashticket.

1, 在登录成功后,把登录时request的ip, agent,并把sessionid+ip+agent的hash记入logininf表

2,在每次页面访问时,获取request的ip,agent,利用sessionid+ip+agent hash的结果同logininf表里的hashticket比较,如果相同则表明该session是合法的,不同则表示该session和登录时的 session要么不在同一台机器上,要么浏览器等其他因素改变,极有可能是session篡改。

解决web系统session劫持相关推荐

  1. html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...

    最近负责的系统总是出现奇怪的缓存问题,在这里简单记录一下碰到的问题和踩到的坑. 问题:用户反映使用不同账号A,B登录时,都出现账号A的页面信息(未邮寄账单提示).如下所示: 图1:未邮寄账单提示 一  ...

  2. 在英文Win7操作系统上部署C#开发的Web系统出现乱码的解决方法

    今天,迁移机器,把一个使用C#开发的Web系统部署到一台英文版Win7操作系统上,部署好以后,系统可以登录,只是网页上出现汉字乱码. 在这台电脑上,打开Word等文本编辑器,是可以正常输入.显示中文的 ...

  3. 解决ios系统在safari浏览器中添加web应用程序到主屏幕,打开子链接会跳转到safari的问题

    解决ios系统在safari浏览器中添加web应用程序到主屏幕,打开子链接会跳转到safari的问题 前言 ios系统的safari浏览器有一个功能可以将web应用程序添加到主程序,使得web程序像a ...

  4. 亿级Web系统搭建——单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  5. 亿级Web系统搭建――单机到分布式集群 转载

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  6. 亿级Web系统负载均衡几种实现方式

    aspirant 架构师技术联盟 负载均衡(Load Balance)是集群技术(Cluster)的一种应用技术.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应 ...

  7. 徐汉彬:亿级Web系统搭建—单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  8. 【转】基于SQL的Web系统安全防范——SQL注入漏洞

    攻击研究及防范措施 SQL-Based Web System Security--Structured Query Language InjectionLeak Attack Study And De ...

  9. Windows变慢原因分析及解决方法·系统篇

    Windows变慢原因分析及解决方法·系统篇 系统加速 一 [Windows 98 ] 1.不要加载太多随机启动程序 不要在开机时载入太多不必要的随机启动程序.选择"开始→程序→附件→系统工 ...

最新文章

  1. Spring boot外部配置加载顺序
  2. zookeeper 源码阅读(3)
  3. Golang的CSP很酷?其实.NET也可以轻松完成
  4. Linux上开启TUN
  5. 初学django框架
  6. php中简单ubb案例,php Ubb代码编辑器函数代码
  7. PDF文件修改或做笔记后变得很大
  8. QQ分析和密码获取,阿里旺旺分析和密码获取,新浪UC分析和密码获取,以及所有的UC端...请不要乱用,我可不负责
  9. 基因数据处理12之samtool的tview来查看sam的匹配文件
  10. Pycharm 引入类报错Unresolved reference ‘attempt_load‘
  11. 因 N-API 发音对黑人的头发不友好,Node.js 官方将其改名为 Node-API
  12. 与门非门在电子计算机中的应用,【E电路】数字电路基础:与门电路
  13. CocoaPods使用中的invalid byte sequence in US-ASCII错误
  14. 汇编语言--div指令,伪指令dd
  15. 2022年浙江省人民医院--互联网医院出线小报
  16. 【卸载CUDA-10.0】
  17. Elasticsearch搜索引擎该怎么使用,这篇文章彻底讲透(荣耀典藏版)
  18. 2022电工(初级)考试题模拟考试题库及在线模拟考试
  19. 【设计模式实战】SpringBoot模板+策略设计模式实现抽奖流程
  20. ui设计基础培训机构

热门文章

  1. TextView中加横线
  2. latex : 常见编译错误记录
  3. 静态路由 动态路由 默认路由 默认网关
  4. 战神引擎mud2没有mysql文件_战神引擎架设不要(MongoDB)芒果数据库配置教程
  5. asterisk连接sip139网络电话
  6. Gnome桌面环境设置与美化
  7. 微信小程序云函数操作云数据库Mysql
  8. linux下看pcie的设备id,linux lspci查看pci总线设备信息
  9. 全国青少年编程等级考试python一级真题2020年6月(含题库答题软件账号)
  10. Python:tkinter简易广告牌