TCP三次握手分析、http登录密码抓取

来源:互联网 发布:中金交易软件 编辑:程序博客网 时间:2024/06/09 14:57

概述:本次实验利用Wireshark先对TCP三次握手原理进行分析,解释TCP连接建立的过程,并用“两军问题”解释为什么要进行三次握手;然后分析TCP连接的安全性,概述SYN洪范攻击和SSL,利用Wireshark抓取http登录密码,证明http是明文传输,数据不安全,而https是密文传输,安全可靠;最后对免费WiFi热点的安全性提出自己的一些思考。


一,Wireshark分析TCP三次握手

1,抓取数据包

1.1,打开Wireshark,在过滤栏输入“http”进行抓包过滤。点击开始,进行抓包。 
1.2,打开浏览器,输入网址www.csdn.net进行访问。 
1.3,打开www.csdn.net的网页源代码,查看响应服务器的域名地址为read.csdn.net 
这里写图片描述

打开cmd,ping 域名地址read.csdn.net的ip,得到响应服务器的ip地址为101.201.170.152。 
这里写图片描述

1.4,在抓取到的数据包找到本机和101.201.170.152的交互信息,并找到协议为HTTP,方法为GET的数据包,如图所示。 
这里写图片描述
右键选择Follow TCP Stream,在弹出的窗口中,可以查看到Host和Referer,证明该数据包确实是来自csdn网站。 
这里写图片描述

2,三次握手分析

2.1在追踪到的TCP流中,可以看到在HTTP之前有三次TCP数据交互,分别是 
第1次:本机->csdn服务器          客户端向服务器发送连接请求
第2次:csdn服务器->本机          服务器对客户端的连接请求进行响应,允许请求。
第3次:本机->csdn服务器          客户端接收到服务器的响应后,进行应答。
这里写图片描述

2.2网上随便一搜,铺天盖地有一堆三次握手的示意图,找一张过来便于对数据包进行分析: 
这里写图片描述

对应着三次握手的示意图,对数据包进行分析。

第一次握手(SYN)

这里写图片描述

(1)源IP:本机IP 目的IP:服务器IP;表示本机发往服务器的TCP报文段。 
(2)源端口3800,目的端口为80(http熟知端口) 
(3)Syn=1,Seq=0,Ack=0 
Client通过发送一个TCP报文段向服务器
发起连接请求,该报文段被称为SYN报文段, 不包含应用数据,Syn的值被置为1,后面可以看到在连接未建立成功时,Syn的值都为1,连接建立成功之后,Syn为0,它表示Client和Server都已经Established,可以进行数据传输。 
Seq是Client选择的起始序列号,此处是0。关于序列号的选择也有诸多的研究,因为适当的选择序列号可以避免某些安全性攻击。 
Ack值为0。

第二次握手(SYNACK)

这里写图片描述 
(1)源IP: 服务器IP 目的IP:本机IP 表示服务器返回给本机的应答TCP报文段 
(2)源端口80,目的端口为3800 
(3)Syn=1,Ack=1 , Seq=0 
该报文段被称为SYNACK报文段,顾名思义,这是
Server对Client发送的SYN报文段进行确认(ACK),示意Client连接被允许。该报文段也不包含应用数据。 
SYN被置为1,因为连接还未建立成功。 
Ack的值为Client的初始Seq加1,于是Ack=1; 
Server端的初始序列号Seq=0

第三次握手(ACK)

这里写图片描述 
(1)源IP:本机IP 目的IP:服务器IP;表示本机发往服务器的确认TCP报文段。 
(2)源端口3800,目的端口为80 
(3)Syn=0,Ack=1,Seq=0 
该报文段被称为ACK报文段,是
Client对Server的应答进行确认(ACK),服务器成功收到ACK报文段之后,连接就建立成功了。 
此时Syn的值被置为0; 
Ack的值为Server的初始Seq加1。


二,为什么是三次握手?

imooc上Tony老师是利用有名的两军问题来进行解释的,课程地址http://www.imooc.com/view/258 
在此先感谢老师,然后将课件截图过来和大家分享:

这里写图片描述 
设左边的蓝色部队为A蓝,右边的蓝色部队为B蓝。 
(1)第一次握手:A蓝数据成功到达B蓝,B蓝收到A蓝的通知“你准备好攻打红色部队了吗?” 
(2)第二次握手:B蓝回复A蓝,“我准备好了!”。 
假设回复成功到达A蓝,但是此时B蓝并不知道A蓝是否成功收到了它的回复,因此它并不敢轻举妄动,假设A蓝并没有收到回复,没有出兵,那B蓝岂不是会全军覆没。于是很有必要进行第三次握手。 
(3)第三次握手:A蓝回复B蓝,“我知道你准备好了,开打吧!” 
当B蓝收到这个确认之后,就可以开始出兵了。 
理论上来说,两军的沟通永远停不下来,因为没有办法确认最后一次数据包是否成功到达对方,所以三次握手也并不是绝对的可靠,可以选择四次,甚至多次握手,但是考虑到开销,选择三次握手,能保证足够的可靠性了。


三,初识SYN洪范攻击和SSL

1, SYN洪范攻击(SYN flood attack)

在上述TCP三次握手的过程中,涉及到一个问题,那就是TCP缓存和变量的设置,传统的设置缓存和变量的大致过程如下: 
(1)第二次握手时,Server端分配TCP缓存和变量,生成一个半开TCP连接。 
(2)第三次握手时,Client端分配TCP缓存和变量,TCP双向连接建立成功。 
SYN洪范攻击是指,攻击者利用多个源发出众多的SYN报文段,但是不会发出ACK报文段,如果按照传统的TCP连接方式,Server端每接收到一个SYN报文段就会分配TCP缓存和变量,建立半开TCP连接。于是这种攻击会致使服务器的连接资源消耗殆尽,可怜的服务器此时相当于被攻击者钳制住了,别的合法的Client就无法与Server进行TCP连接了。 
由此可以看出,在TCP第三次握手之前进行缓存和变量分配的连接方式,其实是不安全。

2,SSL(Secure Socket Layer)

SSL,即安全套接字层,另外一个类似的名字是TSL,(Transport Layer Security,运输层安全性)是SSL3的修改版本。 
SSL子层位于应用层之下,传输层之上,通过SSL套接字接口与应用层对接,通过TCP套接字与传输层对接。 
SSL最大的功能就是使得TCP的连接和数据传输变得安全,它运用了加密技术,在数据传送到传输层之前对数据进行加密,具体涉及到的加密算法,和防攻击技术,在此就不具体介绍了(其实是因为我也不是很懂)。 
这样一来,数据就是密文传输,而非明文。我们在日常生活中经常听到两个名词,一个是http,另一个是https,这两者的区别在于后者使用了SSL加密技术,数据是加密传输的,一般的网络抓包工具不能截获一些重要信息,比如用户登录密码,而http是明文传输的,很容易用抓包工具抓取用户登录密码。 
对安全性要求较高的网站一般会使用https,比如百度,淘宝,京东,以及银行网站等等。而像论坛,博客等网站对安全性要求不是那么高的网站,一般使用http。

三,抓取http登录密码

下面用Wireshark抓取九度Online Judge(http://ac.jobdu.com)的登录密码。 
我正好忘记了我的登录密码,但是浏览器保存下了 ,现在用Wireshark抓取,看看我的密码到底是多少,下次清空浏览器记录时就不会忘了。 
1,打开Wireshark,开始抓包,登录九度OJ。 
这里写图片描述

2,找到对应的数据包(HTTP协议,POST方法) 
这里写图片描述

3,查看该数据包应用层的内容 
这里写图片描述


四,关于免费WiFi热点的一些思考

免费WiFi热点是极其不安全的,为什么呢? 
后台服务器会很容易抓取你的某些用户名和登录密码,即使https抓取不到,也可以抓取一些http的密码,对许多人来说,不管哪个密码被攻破,都不是一件令人愉快的事情,假如对方居心叵测,顺藤摸瓜还可以获取你的更多私人信息。所以说,有些时候免费WiFi其实就是一个鱼饵。 
同一个寝室的人也可以利用这种方法获取室友的信息,先伪造一个WiFi热点(这是很简单的),然后吃着零食,慢慢抓包……


感谢原文作者。

原文地址:http://blog.csdn.net/qq_24421591/article/details/50856423


原创粉丝点击