请详细介绍会话劫持
会话劫持是一种结合了嗅探以及欺骗技术在内的攻击手段。广义上说，会话劫持就是在一次正常的通信过程中，攻击者作为第三方参与到其中，或者是在数据里加入其他信息，甚至将双方的通信模式暗中改变，即从直接联系变成有攻击者参与的联系。简单地说，就是攻击者把自己插入到受害者和目标机器之间，并设法让受害者和目标机器之间的数据通道变为受害者和目标机器之间存在一个看起来像“中转站”的代理机器（攻击者的机器）的数据通道，从而干涉两台机器之间的数据传输，例如监听敏感数据、替换数据等。由于攻击者已经介入其中，他能轻易知道双方传输的数据内容，还能根据自己的意愿去左右它。这个“中转站”可以是逻辑上的，也可以是物理上的，关键在于它能否获取到通信双方的数据。#### 会话劫持的攻击分类

按会话劫持攻击类型划分：
1、中间人攻击(ManInTheMiddle，简称MITM)，
2、注射式攻击（Injection）；
按会话劫持攻击主被动划分为：
（1）被动劫持，
（2）主动劫持；
被动劫持实际上就是在后台监视双方会话的数据流，从中获得敏感数据；而主动劫持则是将会话当中的某一台主机“踢”下线，然后由攻击者取代并接管会话，这种攻击方法危害非常大，攻击者可以做很多事情，比如“catetc/master.passwd”（FreeBSD下的Shadow文件）。#### 会话劫持的原理结构

会话劫持利用了TCP/IP工作原理来设计攻击。TCP使用端到端的连接，即TCP用（源IP，源TCP端口号，目的IP，目的TCP端号）来唯一标识每一条已经建立连接的TCP链路。另外，TCP在进行数据传输时，TCP报文首部的两个字段序号（seq）和确认序号（ackseq）非常重要。序号（seq）和确认序号（ackseq）是与所携带TCP数据净荷（payload）的多少有数值上的关系：序号字段（seq）指出了本报文中传送的数据在发送主机所要传送的整个数据流中的顺序号，而确认序号字段（ackseq）指出了发送本报文的主机希望接收的对方主机中下一个八位组的顺序号。因此，对于一台主机来说，其收发的两个相临TCP报文之间的序号和确认序号的关系为：它所要发出的报文中的seq值应等于它所刚收到的报文中的ackseq的值，而它所要发送报文中ackseq的值应为它所收到报文中seq的值加上该报文中所发送的TCP净荷的长度。
TCP会话劫持的攻击方式可以对基于TCP的任何应用发起攻击，如HTTP、FTP、Telnet等。对于攻击者来说，所必须要做的就是窥探到正在进行TCP通信的两台主机之间传送的报文，这样攻击者就可以得知该报文的源IP、源TCP端口号、目的IP、目的TCP端号，从而可以得知其中一台主机对将要收到的下一个TCP报文段中seq和ackseq值的要求。这样，在该合法主机收到另一台合法主机发送的TCP报文前，攻击者根据所截获的信息向该主机发出一个带有净荷的TCP报文，如果该主机先收到攻击报文，就可以把合法的TCP会话建立在攻击主机与被攻击主机之间。带有净荷的攻击报文能够使被攻击主机对下一个要收到的TCP报文中的确认序号的值的要求发生变化，从而使另一台合法的主机向被攻击主机发出的报文被被攻击主机拒绝。TCP会话劫持攻击方式的好处在于使攻击者避开了被攻击主机对访问者的身份验证和安全认证，从而使攻击者直接进入对被攻击主机的的访问状态，因此对系统安全构成的威胁比较严重。#### 会话劫持的步骤

找到一个活动的会话
会话劫持的第一步要求攻击者找到一个活动的会话。这要求攻击者嗅探在子网上的通讯。攻击者将寻找诸如FTP之类的一个已经建立起来的TCP会话。如果这个子网使用一个集线器，查找这种会话是很容易的。一个交换的网络需要攻击者破坏地址解析协议。
猜测正确的序列号码
下一步，攻击者必须能够猜测正确的序列号码。请记住，一个基本的TCP协议设计是传输的数据的每一个字节必须要有一个序列号码。这个序列号用来保持跟踪数据和提供可靠性。最初的序列号码是在TCP协议握手的第一步生成的。目的地系统使用这个值确认发出的字节。这个序列号字段长度有32个字节。这就意味着可能有大约4,294,967,295个序列号。一旦这个序列号一致，这个账户就会随着数据的每一个字节逐步增加。
把合法的用户断开
一旦确定了序列号，攻击者就能够把合法的用户断开。这个技术包括拒绝服务、源路由或者向用户发送一个重置命令。无论使用哪一种技术，这个目的都是要让用户离开通讯路径并且让服务器相信攻击者就是合法的客户机。
如果这些步骤取得成功，攻击者现在就可以控制这个会话。只要这个会话能够保持下去，攻击者就能够通过身份验证进行访问。这种访问能够用来在本地执行命令以便进一步利用攻击者的地位。
会话劫持的预防和检测
处理会话劫持问题有两种机制：预防和检测。预防措施包括限制入网的连接和设置你的网络拒绝假冒本地地址从互联网上发来的数据包。
加密也是有帮助的。如果你必须要允许来自可信赖的主机的外部连接，你可以使用Kerberos或者IPsec工具。使用更安全的协议，FTP和Telnet协议是最容易受到攻击的。SSH是一种很好的替代方法。SSH在本地和远程主机之间建立一个加密的频道。通过使用IDS或者IPS系统能够改善检测。交换机、SSH等协议和更随机的初始序列号的使用会让会话劫持更加困难。此外，网络管理员不应该麻痹大意，有一种安全感。虽然会话劫持不像以前那样容易了，但是，会话劫持仍是一种潜在的威胁。允许某人以经过身份识别的身份连接到你的一个系统的网络攻击是需要认真对付的。