Web安全实践(13)嗅探,arp欺骗,会话劫持与重放攻击(上)

简介:

本系列导航http://www.cnblogs.com/xuanhun/archive/2008/10/25/1319523.html

安全技术区http://space.cnblogs.com/group/group_detail.aspx?gid=100566 

前言 

(作者:玄魂)

嗅探,arp欺骗,会话劫持与重放攻击之间的关系可谓相辅相成,这次针对web安全把它们放在一起来讲,并探讨一下相关的编程问题。内容比较多,分三节来讲,第一节讲嗅探和会话劫持,第二节讲会话劫持和重放攻击,第三节讲编程实现的相关细节。

正文

13.1 Sniffer

Sniffer(嗅探器)程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包。Sniffer分为软件和硬件两种,一般指的是软件,但功能有限,硬件价格比较贵。

Sniffer可以用来监听任何网络信息,在此我只关心http/https数据的监听。

下面我以登录126为例,运行了在网上随便找的一个嗅探工具,我这里为了更清楚的说明问题没有选"SSL安全登录"选项。这里我们也该体会到的一点是防止嗅探攻击的最好方式就是加密数据。

在图片的末尾我们可以看到下面的内容:

domain=126.com&language=0&bCookie=&username=xuanhun521@126.com&user=xuanhun521&password=xuanhun&style=-1&remUser=&enter.x=%B5%C7+%C2%BC

用户名和密码都可以被嗅探到。


13.2 
话劫持

下面改编了一下网上的相关资料,介绍一下会话劫持。
 1、会话劫持原理

我们可以把会话劫持攻击分为两种类型:1)中间人攻击(Man In The Middle,简称MITM)2)注射式攻击(Injection);并且还可以把会话劫持攻击分为两种形式:1)被动劫持,2)主动劫持;被动劫持实际上就是在后台监视双方会话的数据流,丛中获得敏感数据;而主动劫持则是将会话当中的某一台主机""下线,然后由攻击者取代并接管会话。

1)中间人攻击

要想正确的实施中间人攻击,攻击者首先需要使用ARP欺骗或DNS欺骗,将会话双方的通讯流暗中改变,而这种改变对于会话双方来说是完全透明的。不管是ARP欺骗,还是DNS欺骗,中间人攻击都改变正常的通讯流,它就相当于会话双方之间的一个透明代理,可以得到一切想知道的信息,甚至是利用一些有缺陷的加密协议来实现。

2)注射式攻击简介
  这种方式的会话劫持比中间人攻击实现起来简单一些,它不会改变会话双方的通讯流,而是在双方正常的通讯流插入恶意数据。在注射式攻击中,需要实现两种技术:1IP欺骗,2)预测TCP序列号。如果是UDP协议,只需伪造IP地址,然后发送过去就可以了,因为UDP没有所谓的TCP三次握手,但基于UDP的应用协议有流控机制,所以也要做一些额外的工作。

对于IP欺骗,有两种情况需要用到:1)隐藏自己的IP地址;2)利用两台机器之间的信任关系实施入侵。对于基于TCP协议的注射式会话劫持,攻击者应先采用嗅探技术对目标进行监听,然后从监听到的信息中构造出正确的序列号,如果不这样,你就必须先猜测目标的ISN(初始序列号),这样无形中对会话劫持加大了难度。

  2TCP会话劫持

如果劫持一些不可靠的协议,那将轻而易举,因为它们没有提供一些认证措施;而TCP协议被欲为是可靠的传输协议,所以要重点讨论它。
  根据TCP/IP中的规定,使用TCP协议进行通讯需要提供两段序列号,TCP协议使用这两段序列号确保连接同步以及安全通讯,系统的TCP/IP协议栈依据时间或线性的产生这些值。在通讯过程中,双方的序列号是相互依赖的,这也就是为什么称TCP协议是可靠的传输协议(具体可参见RFC 793)。如果攻击者在这个时候进行会话劫持,结果肯定是失败,因为会话双方"不认识"攻击者,攻击者不能提供合法的序列号;所以,会话劫持的关键是预测正确的序列号,攻击者可以采取嗅探技术获得这些信息。
  TCP协议的序列号
  现在来讨论一下有关TCP协议的序列号的相关问题。在每一个数据包中,都有两段序列号,它们分别为:

SEQ
:当前数据包中的第一个字节的序号
ACK
:期望收到对方数据包中第一个字节的序号

  假设双方现在需要进行一次连接:
S_SEQ
:将要发送的下一个字节的序号
S_ACK
:将要接收的下一个字节的序号
S_WIND
:接收窗口
//
以上为服务器(Server
C_SEQ
:将要发送的下一个字节的序号
C_ACK
:将要接收的下一个字节的序号
C_WIND
:接收窗口
//
以上为客户端(Client

它们之间必须符合下面的逻辑关系,否则该数据包会被丢弃,并且返回一个ACK包(包含期望的序列号)。
C_ACK <= C_SEQ <= C_ACK + C_WIND
S_ACK <= S_SEQ <= S_ACK + S_WIND

  如果不符合上边的逻辑关系,就会引申出一个"致命弱点" 
  这个致命的弱点就是ACK风暴(Storm)。当会话双方接收到一个不期望的数据包后,就会用自己期望的序列号返回ACK包;而在另一端,这个数据包也不是所期望的,就会再次以自己期望的序列号返回ACK……于是,就这样来回往返,形成了恶性循环,最终导致ACK风暴。比较好的解决办法是先进行ARP欺骗,使双方的数据包"正常"的发送到攻击者这里,然后设置包转发,最后就可以进行会话劫持了,而且不必担心会有ACK风暴出现。当然,并不是所有系统都会出现ACK风暴。比如Linux系统的TCP/IP协议栈就与RFC中的描述略有不同。注意,ACK风暴仅存在于注射式会话劫持。

  TCP会话劫持过程
  假设现在主机A和主机B进行一次TCP会话,
C为攻击者,劫持过程如下:
A
B发送一个数据包
SEQ (hex): X ACK (hex): Y
FLAGS: -AP--- Window: ZZZZ
,包大小为:60

B
回应A一个数据包
SEQ (hex): Y ACK (hex): X+60
FLAGS: -AP--- Window: ZZZZ
,包大小为:50

A
B回应一个数据包
SEQ (hex): X+60 ACK (hex): Y+50
FLAGS: -AP--- Window: ZZZZ
,包大小为:40

B
A回应一个数据包
SEQ (hex): Y+50 ACK (hex): X+100
FLAGS: -AP--- Window: ZZZZ
,包大小为:30

攻击者C冒充主机A给主机B发送一个数据包
SEQ (hex): X+100 ACK (hex): Y+80
FLAGS: -AP--- Window: ZZZZ
,包大小为:20

B
A回应一个数据包
SEQ (hex): Y+80 ACK (hex): X+120 
FLAGS: -AP--- Window: ZZZZ
,包大小为:10

  现在,主机B执行了攻击者C冒充主机A发送过来的命令,并且返回给主机A一个数据包;但是,主机A并不能识别主机B发送过来的数据包,所以主机A会以期望的序列号返回给主机B一个数据包,随即形成ACK风暴。如果成功的解决了ACK风暴(例如前边提到的ARP欺骗或者其他方式),就可以成功进行会话劫持了。
3.http会话劫持

Web应用程序是通过2种方式来判断和跟踪不同用户的:Cookie或者Session(也叫做会话型Cookie)。其中Cookie是存储在本地计算机上的,过期时间很长,所以针对Cookie的攻击手段一般是盗取用户Cookie然后伪造Cookie冒充该用户;而Session由于其存在于服务端,随着会话的注销而失效(很快过期),往往难于利用。所以一般来说Session认证较之Cookie认证安全。

会话型cookie也是可以通过程序获得的,换句话说我们进行TCP会话劫持的时候如果针对http会话劫持的话可以截获所有http内容包括Session信息。

下面我们一个具体的例子。这个例子中我使用的是一个非ARP欺骗方式的工具SSClone。本机ip是192.168.1.107,我在ip地址为192.168.1.105的机器上打开126邮箱。

之后在ip是192.168.1.107的计算机上我们截获了这个会话,而且可以直接进入邮箱,不用登录。

 

哎呀,好累,还剩点内容,留到明天吧,欢迎各位读者踊跃批评。


本文转自悬魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2009/01/05/1369828.html,如需转载请自行联系原作者

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
安全 网络协议 NoSQL
Web渗透-常见的端口及对其的攻击思路
本文介绍了常见网络服务端口及其安全风险,涵盖FTP、SSH、Telnet、SMTP、DNS、HTTP、SMB、数据库及远程桌面等20余个端口,涉及弱口令爆破、信息泄露、未授权访问、缓冲区溢出等典型漏洞,适用于网络安全学习与渗透测试参考。
662 59
|
SQL 存储 安全
Web 常见攻击方式及防御方法
【10月更文挑战第25天】Web 安全是一个复杂而重要的领域,攻击者不断寻找新的攻击方法,我们需要不断加强防御措施,提高安全意识,以保障 Web 应用的安全运行。通过采取多种防御手段的综合运用,我们可以有效地降低 Web 攻击的风险,保护用户的信息和财产安全。同时,随着技术的不断发展,我们也需要持续关注和研究新的安全威胁和防御方法,以应对不断变化的安全形势。
1452 56
|
Web App开发 网络协议 安全
基于Web攻击的方式发现并攻击物联网设备介绍
基于Web攻击的方式发现并攻击物联网设备介绍
211 4
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
248 4
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
664 4
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
483 2
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
【10月更文挑战第27天】计算机主机网关的作用类似于小区传达室的李大爷,负责将内部网络的请求转发到外部网络。当小区内的小不点想与外面的小明通话时,必须通过李大爷(网关)进行联系。网关不仅帮助内部设备与外部通信,还负责路由选择,确保数据包高效传输。此外,网关还参与路由表的维护和更新,确保网络路径的准确性。
249 2
|
1月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
217 4
|
5月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
5月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。

热门文章

最新文章