XDSec—02数据包详解
B站小迪安全系列视频的笔记整理
一、HTTP协议
1.1、概述
- 名称:超文本传输协议,(HyperText Transfer Protocol),是应用最广泛的一种互联网协议
- 作用:是一个基于TCP/IP协议栈的用来传输数据的协议;一般用于B/S架构:客户端通过http请求发送给服务器,服务器一般监听80端口,之后发出http响应,传输的数据类型有html文件、图片、等等
- 特点:支持C/S模式,是一种请求/响应式的协议,时无状态的协议,服务端不保留与客服交易是的任何状态;是无连接的协议,服务器处理完请求后,会断开连接,为了弥补这种不足,就产生了cookie和session
- http报文组成:
- 请求行:包含请求方法、URL、协议版本
- 请求头(Requert Header)
- 请求体
- URL和URI
- URI:统一资源标识符,标识一个具体的网络资源,是一个抽象的概念,用于唯一标识一个资源,如同身份证号
- URL:统一资源定位符,标识一个具体的网络资源并且标识了具体找到该资源的路径,可以说是URI的一种实现方式,如同一个人的定位位置;如果该资源改变了路径,旧的URL就失效了,但URI还是存在的
- URI包括:URL和URN(统一资源名称,给网络上的一个资源唯一标识一个号码,如1234,想访问该资源时直接通过解析器解析该号码,就可以找到资源的位置,但目前仍未实现)
1.2、数据包
-
抓包
使用burpsuite开启代理,火狐挂代理,即可在http history栏中看到所经过的所有数据包,上图为http请求数据包,下图为http响应数据包
2.1、请求数据包内容详解
- 请求行:即图一数据包的第一行,由三个标记组成,并用空格隔开
- 请求方法:GET、POST、HEAD、PUT等共八种,最常用的就是前两种,图一为GET方法
- 请求URL:即要找的资源的网络绝对路径,上图的URL为
/
,即根目录 - HTTP版本:有1.0、1.1、2.0版本,最常见为1.1版
- 请求头:由关键字和值组成,之间用
:
隔开,主要关键字有以下:- HOST:请求的地址域名和端口
- User-Agent:用户代理,即浏览器的用户代理信息,有浏览器信息和操作系统信息等
- Accept:浏览器支持的请求类型,为MIME类型
- Accept-language:浏览器接受的语言类型
- Accept-ENcoding:浏览器能处理的压缩代码
- Connection:连接类型,图一close标识请求处理完毕后会断开连接
- Cookie:保存在用户浏览器端的用来做用户验证的一端文本片段
- Upgrade-Insecure-Requests:http 自动升级到https,防止跨域问题但是域名端口都不同的不会提升
- Cache-Control:强制要求服务器返回最新的文件内容,也就是不走缓存,返回的200
- 空行:图一的第11行,这是必须的一行
- 请求数据
2.2、响应数据包详解
- 状态行:包括协议版本,状态响应码和状态描述
- 协议版本:同请求,常用http1.1
- 状态响应码
- 1XX:信息,服务器收到了请求,需要请求者继续执行
- 2XX:成功,操作成功被接收或处理
- 3XX:重定向,需要进一步的操作以完成请求
- 4XX:客户端错误,请求包含语法错误或无法完成请求
- 5XX:服务器错误,服务器在处理请求的过程中发生了错误
- OK、Created、Not Found等,是对状态响应码的描述
- 响应头:键值对组成,同上的请求头,主要内容有以下:
- Date:服务器响应的格林尼治时间
- Server:服务器的类型信息,图二为指出服务器为apache,版本为2.4.46
- X-Powered-By:告知网站使用何种语言或框架编写
- Set-Cookie:从服务器向用户发送的Cookie,用于下次浏览器的请求
- Upgrade:请求客服端升级协议
- Connection:连接类型
- Vary:记录了代理服务器返回特定数据参考了哪些请求字段
- Content-Length:返回数据的长度
- Content-Type:回送数据的类型
二、HTTPS协议概述
- HTTP的传输内容是明文,容易被窃取
- HTTP不能验证数据的完整性,我们不知道数据是否被篡改
- HTTP未对对方身份进行认证识别
HTTP不符合安全三要素,因此是不安全的协议
2.1、HTTPS的概述
- 名称:全称Hyper Text Transfer Protocol over SecureSocket Layer,是以安全为目标的HTTP通道,是在HTTP的基础上通过传输加密和身份认证的保证了传输过程的安全性;HTTPS中的S指的是SSL,也可以说是Secure;可以理解为
HTTPS==HTTP+SSL/TLS
- SSL:Secure Sockets Layer,安全套接字协议,是为网络通信提供安全和数据完整性的一种协议;是为了在通信时加密数据和保证数据完整性
2.2、HTTPS工作流程
主要流程可概括为:发起请求、验证身份、协商密钥、加密会话
- 客户端像服务器发出对请求
- 客户端生成随机数A发送给服务器,并告诉服务器自己使用的加密算法和摘要算法
- 服务器将数字整数发送给客户端
- 服务器生成随机数B;并根据客户端适配一种加密算法和摘要算法,用CA的证书公钥解密得到数字证书和签名;将证书、随机数B、算法一起发给客户端
- 客户端验证数字证书:由浏览器的TLS完成
- 检索浏览器内置证书,找到和服务器发来证书同一机构的证书后,则取出该证书的公钥、会话密钥算法、随机数B
- 用机构的公钥解密得到服务器发来的证书,得到证书内容和签名,这里就完成了数字签名,验证了服务器身份,此时浏览器就信任了服务器证书和公钥
- 浏览器生成随机数C,根据和服务器商议的会话密钥算法使用A、B、C生成会话密钥X
- 使用服务器的公钥加密随机数C并发给服务器
- 服务器得到会话密钥
- 服务器使用私钥解密加密了的随机数C,并根据会话密钥算法使用A、B、C生成会话密钥X
- 双方进行加密通话
- 双方使用会话密钥X对通信内容进行加密和解密
对于上述步骤可以看出:
- 会话建立阶段,即生成会话密钥X的阶段,使用的是非对称加密算法
- 通信阶段使用对称加密算法
这样是因为非对称加密速度慢,对算力要求高,一直使用非对称加密会加大双方的负担
HTTPS之所以安全,是因为完成了数据加密、身份验证和验证了数据的完整性